<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>SSH | Yuya Kaneta</title><link>https://www.yuyakaneta.page/tags/ssh/</link><atom:link href="https://www.yuyakaneta.page/tags/ssh/index.xml" rel="self" type="application/rss+xml"/><description>SSH</description><generator>Hugo Blox Builder (https://hugoblox.com)</generator><language>en</language><copyright>© 2021-2024 Yuya Kaneta</copyright><lastBuildDate>Sat, 09 May 2026 22:55:39 +0900</lastBuildDate><image><url>https://www.yuyakaneta.page/media/icon_hu_c4fd2c5d31e64759.png</url><title>SSH</title><link>https://www.yuyakaneta.page/tags/ssh/</link></image><item><title>Vast.aiでGPUを借りてCLIからSSH接続するまで</title><link>https://www.yuyakaneta.page/post/vast-ai/</link><pubDate>Sat, 09 May 2026 22:55:39 +0900</pubDate><guid>https://www.yuyakaneta.page/post/vast-ai/</guid><description>&lt;h2 id="はじめに"&gt;はじめに&lt;/h2&gt;
&lt;p&gt;GPUを使う機械学習やKaggleの実験をしたいとき、手元にGPUマシンがないと少し困ります。&lt;/p&gt;
&lt;p&gt;
を使うと、GPU付きのインスタンスを時間単位で借りられます。
本ページでは、Vast.aiにsign inしてから、CLIでGPUインスタンスを作成し、SSHでログインして、最後に &lt;code&gt;nvidia-smi&lt;/code&gt; でGPUが見えるところまでをまとめます。
Python環境は &lt;code&gt;uv&lt;/code&gt; を使います。&lt;/p&gt;
&lt;p&gt;前提として、ローカルPCで &lt;code&gt;uv&lt;/code&gt; と &lt;code&gt;ssh&lt;/code&gt; が使える状態を想定します。&lt;code&gt;uv&lt;/code&gt; が未インストールの場合は先にインストールしておいてください。&lt;/p&gt;
&lt;h2 id="vastaiにsign-inする"&gt;Vast.aiにsign inする&lt;/h2&gt;
&lt;p&gt;まず、
にアクセスしてsign inします。
Google / GitHub / メールアドレスなどでアカウントを作成して、Consoleに入れることを確認しておいてください。&lt;/p&gt;
&lt;p&gt;
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;&lt;img src="https://www.yuyakaneta.page/img/vast-ai/dashboard.png" alt="Vast.aiのConsoleダッシュボード" loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;右上のLoginボタンを押せば、アカウントの作成画面になりました。&lt;/p&gt;
&lt;p&gt;
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;&lt;img src="https://www.yuyakaneta.page/img/vast-ai/sign-in.png" alt="Vast.aiのSign in画面" loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;Googleアカウントで登録した場合も、メールアドレス確認のメールが届くので、リンクをクリックして認証を済ませておきます。&lt;/p&gt;
&lt;p&gt;
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;&lt;img src="https://www.yuyakaneta.page/img/vast-ai/email-verification.png" alt="メール認証メール" loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 id="billingからクレジットを追加する"&gt;Billingからクレジットを追加する&lt;/h2&gt;
&lt;p&gt;GPUインスタンスを作成するには、事前にクレジットを追加する必要があります。
BillingページはConsole左上のハンバーガーメニュー（☰）から「Billing」を選択すると移動できます。&lt;/p&gt;
&lt;p&gt;
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;&lt;img src="https://www.yuyakaneta.page/img/vast-ai/billing.png" alt="Vast.aiのBilling画面" loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;支払い方法はクレジットカードを登録して自動請求にする方法と、「Add credit」から都度クレジットを追加する方法があります。
自動請求が気になる場合は、「Add credit」から使いたい分だけ先払いしておく方が安心です。
お試しであれば $5 程度で十分です（RTX 4090 は安いもので $0.3〜0.5/時間程度なので、接続確認だけなら $1 も使いません）。
なお、クレジットカードを登録していない場合、残高がなくなってもインスタンスが自動削除されないことがあるようです。使い終わったら必ず手動で削除しましょう。&lt;/p&gt;
&lt;p&gt;一点注意したいのは、インスタンスを「停止」しただけではディスク料金が残る場合があることです。
使い終わったインスタンスは、不要なら削除するようにしましょう。&lt;/p&gt;
&lt;h2 id="uvでvastai-cliをインストールする"&gt;uvでVast.ai CLIをインストールする&lt;/h2&gt;
&lt;p&gt;Vast.aiはCLIから操作できます。ここではグローバルに &lt;code&gt;pip install&lt;/code&gt; するのではなく、&lt;code&gt;uv&lt;/code&gt; を使います。&lt;/p&gt;
&lt;p&gt;CLIをその場で実行するだけなら、&lt;code&gt;uvx&lt;/code&gt; が一番手軽です。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;uvx vastai --help
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;毎回 &lt;code&gt;uvx vastai ...&lt;/code&gt; と打てば、仮想環境を意識せずにVast.ai CLIを実行できます。以降のコマンドはすべて &lt;code&gt;uvx vastai&lt;/code&gt; で実行します。&lt;/p&gt;
&lt;p&gt;もしプロジェクトディレクトリ内に明示的に環境を作りたい場合は以下のようにしてもよく、この場合は &lt;code&gt;uv run vastai ...&lt;/code&gt; として実行することになります。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;uv init
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;uv add vastai
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;uv run vastai --help
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="api-keyを発行設定する"&gt;API keyを発行・設定する&lt;/h2&gt;
&lt;p&gt;CLIからVast.aiを操作するにはAPI keyが必要です。ConsoleのハンバーガーメニューからBillingと並列に「Keys」があるので選択します。「Manage Keys」ページの「API Keys」タブを開き、API keyを新規作成します。作成したAPI keyは後で再表示できない場合があるので、作成直後にコピーしておきましょう。&lt;/p&gt;
&lt;p&gt;
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;&lt;img src="https://www.yuyakaneta.page/img/vast-ai/api-key.png" alt="Vast.aiのAPI key作成画面" loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;作成ダイアログではNameと権限設定が求められますが、CLIからインスタンスを操作するだけであればStandardのデフォルト設定のままで問題ありません。&lt;/p&gt;
&lt;p&gt;コピーしたAPI keyをCLIに設定します。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;uvx vastai &lt;span class="nb"&gt;set&lt;/span&gt; api-key YOUR_API_KEY
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;ファイルに保存してある場合は以下のように読み込むこともできます。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;uvx vastai &lt;span class="nb"&gt;set&lt;/span&gt; api-key &lt;span class="k"&gt;$(&lt;/span&gt;cat ~/vast-ai_apikey.txt&lt;span class="k"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;設定したAPI keyは &lt;code&gt;~/.config/vastai/vast_api_key&lt;/code&gt; に平文で保存されます。以降の &lt;code&gt;uvx vastai&lt;/code&gt; コマンドはここから自動的に読み込まれます。&lt;/p&gt;
&lt;p&gt;認証できているか確認します。ユーザーID、メールアドレス、残高などが表示されればOKです。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;uvx vastai show user
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;&lt;img src="https://www.yuyakaneta.page/img/vast-ai/show-user.png" alt="uvx vastai show userの実行結果" loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;API keyはパスワードと同じように扱ってください。GitHubにコミットしたり、ブログに貼ったりしないように注意です。&lt;/p&gt;
&lt;h2 id="ssh-keyを作ってvastaiに登録する"&gt;SSH keyを作ってVast.aiに登録する&lt;/h2&gt;
&lt;p&gt;次に、インスタンスへSSH接続するためのSSH keyを作ります。
既存の &lt;code&gt;~/.ssh/id_ed25519&lt;/code&gt; を使ってもよいですが、Vast.ai用の鍵だと分かるようにファイル名を明示しておくと後々管理が楽です。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_vastai -C &lt;span class="s2"&gt;&amp;#34;vastai&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;.pub&lt;/code&gt; が付いた公開鍵をVast.aiに登録します。秘密鍵（&lt;code&gt;.pub&lt;/code&gt; なし）は他人に渡してはいけません。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;uvx vastai create ssh-key &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;cat ~/.ssh/id_ed25519_vastai.pub&lt;span class="k"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;ファイルパスをそのまま渡すと、パスが文字列として登録されてしまうことがあります。&lt;code&gt;$(cat ...)&lt;/code&gt; で中身を展開して渡すのが確実です。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SSH keyはインスタンスを作成する前に登録しておくのが重要です。&lt;/strong&gt;
インスタンス作成後にSSH keyを追加しても、すでに作成済みのインスタンスには反映されない場合があります。&lt;/p&gt;
&lt;h2 id="gpuインスタンスを検索する"&gt;GPUインスタンスを検索する&lt;/h2&gt;
&lt;p&gt;借りたいGPUインスタンスを検索します。ここではRTX 4090を1枚使うインスタンスを探してみます。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;uvx vastai search offers &lt;span class="s1"&gt;&amp;#39;gpu_name=RTX_4090 num_gpus=1 verified=true direct_port_count&amp;gt;=1 rentable=true&amp;#39;&lt;/span&gt; -o &lt;span class="s1"&gt;&amp;#39;dlperf_usd-&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;条件の意味は以下の通りです。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;条件&lt;/th&gt;
&lt;th&gt;意味&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;gpu_name=RTX_4090&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;RTX 4090を対象にする&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;num_gpus=1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;GPU 1枚のインスタンスを探す&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;verified=true&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;verifiedなマシンを対象にする&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;direct_port_count&amp;gt;=1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;direct SSHに使えるportがあるものを対象にする&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;rentable=true&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;現在レンタル可能なものを対象にする&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;-o 'dlperf_usd-'&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;deep learning performance per dollarが良い順に並べる&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;検索結果には、offerごとの &lt;code&gt;ID&lt;/code&gt; が表示されます。インスタンス作成時にこの &lt;code&gt;ID&lt;/code&gt; を使います。&lt;/p&gt;
&lt;p&gt;
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;&lt;img src="https://www.yuyakaneta.page/img/vast-ai/search-offers.png" alt="vastai search offersの実行結果" loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;条件が厳しすぎて何も出ない場合は、GPU名を変えるか指定を外してみてください。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;uvx vastai search offers &lt;span class="s1"&gt;&amp;#39;num_gpus=1 verified=true direct_port_count&amp;gt;=1 rentable=true&amp;#39;&lt;/span&gt; -o &lt;span class="s1"&gt;&amp;#39;dlperf_usd-&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="gpuインスタンスを作成する"&gt;GPUインスタンスを作成する&lt;/h2&gt;
&lt;p&gt;使いたいofferの &lt;code&gt;ID&lt;/code&gt; が決まったら、インスタンスを作成します。&lt;code&gt;OFFER_ID&lt;/code&gt; を検索結果のIDに置き換えて実行します。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;uvx vastai create instance OFFER_ID &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="se"&gt;&lt;/span&gt; --image nvidia/cuda:12.4.1-cudnn-runtime-ubuntu22.04 &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="se"&gt;&lt;/span&gt; --disk &lt;span class="m"&gt;20&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="se"&gt;&lt;/span&gt; --onstart-cmd &lt;span class="s2"&gt;&amp;#34;nvidia-smi&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="se"&gt;&lt;/span&gt; --ssh
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;各オプションの意味は以下の通りです。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;オプション&lt;/th&gt;
&lt;th&gt;意味&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--image&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;起動するDocker image&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--disk 20&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;ディスク容量を20GBにする&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--onstart-cmd&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;インスタンス起動時に実行するコマンド&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--ssh&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;SSH接続用のインスタンスとして起動する&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;作成に成功すると以下のようなレスポンスが返ります。&lt;code&gt;new_contract&lt;/code&gt; の値がインスタンスIDです。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nt"&gt;&amp;#34;success&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;&amp;#34;new_contract&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;12345678&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;以降で使うので、シェル変数に入れておくと便利です。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;INSTANCE_ID&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;12345678&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="インスタンスの起動を待つ"&gt;インスタンスの起動を待つ&lt;/h2&gt;
&lt;p&gt;作成直後はDocker imageのpullや起動処理中なので、少し待ちます。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;uvx vastai show instance &lt;span class="nv"&gt;$INSTANCE_ID&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;Status&lt;/code&gt; が &lt;code&gt;running&lt;/code&gt; になれば接続できる状態です。いつまでも &lt;code&gt;running&lt;/code&gt; にならない場合は、別のofferで作り直した方が早いこともあります。&lt;/p&gt;
&lt;p&gt;出力はテーブル形式で、確認すべき主なカラムは以下の通りです。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;カラム&lt;/th&gt;
&lt;th&gt;意味&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Status&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;インスタンスの状態。&lt;code&gt;running&lt;/code&gt; になったら接続可能&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Model&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;GPUの種類。注文通りのGPUか確認する&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SSH Addr&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;SSH接続先のホスト名&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SSH Port&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;SSH接続先のポート番号&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;$/hr&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;時間あたりのコスト&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;&lt;img src="https://www.yuyakaneta.page/img/vast-ai/instance-running.png" alt="show instanceでrunningになった状態" loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 id="ssh接続する"&gt;SSH接続する&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;running&lt;/code&gt; になったら、SSH接続用の情報を取得します。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;uvx vastai ssh-url &lt;span class="nv"&gt;$INSTANCE_ID&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;以下のような形式で表示されます。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ssh://root@sshX.vast.ai:XXXXX
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;-i&lt;/code&gt; オプションで秘密鍵を指定して接続します（&lt;code&gt;sshX.vast.ai&lt;/code&gt; と &lt;code&gt;XXXXX&lt;/code&gt; は実際の値に置き換えてください）。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ssh -i ~/.ssh/id_ed25519_vastai root@sshX.vast.ai -p XXXXX
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;接続すると、Vast.aiのコンテナはデフォルトでtmuxが自動起動します。&lt;code&gt;ctrl+b&lt;/code&gt; → &lt;code&gt;d&lt;/code&gt; でtmuxをデタッチ（プロセスを残したまま切断）できます。&lt;/p&gt;
&lt;p&gt;毎回 &lt;code&gt;-i&lt;/code&gt; や &lt;code&gt;-p&lt;/code&gt; を指定するのが面倒なら、&lt;code&gt;~/.ssh/config&lt;/code&gt; に登録しておくと便利です。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Host vastai-gpu
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; HostName sshX.vast.ai
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; User root
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Port XXXXX
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; IdentityFile ~/.ssh/id_ed25519_vastai
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; IdentitiesOnly yes
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;こうしておけば &lt;code&gt;ssh vastai-gpu&lt;/code&gt; だけで接続できます。なお、インスタンスを作り直すたびにHostNameとPortは変わるので、その都度更新が必要です。&lt;/p&gt;
&lt;h2 id="nvidia-smiでgpuを確認する"&gt;nvidia-smiでGPUを確認する&lt;/h2&gt;
&lt;p&gt;SSH接続できたら、GPUが見えているか確認します。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;nvidia-smi
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;GPU名、Driver Version、CUDA Versionなどが表示されればOKです。&lt;/p&gt;
&lt;p&gt;
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;&lt;img src="https://www.yuyakaneta.page/img/vast-ai/nvidia-smi.png" alt="nvidia-smiの実行結果" loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;PyTorch入りのimageを使っている場合は、以下でPythonからも確認できます。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;python -c &lt;span class="s2"&gt;&amp;#34;import torch; print(torch.cuda.is_available()); print(torch.cuda.get_device_name(0))&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="ファイルの転送"&gt;ファイルの転送&lt;/h2&gt;
&lt;p&gt;ローカルからインスタンスにファイルを送りたい場合は &lt;code&gt;vastai copy&lt;/code&gt; が使えます。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# ローカル → インスタンス&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;uvx vastai copy local:./data/ &lt;span class="nv"&gt;$INSTANCE_ID&lt;/span&gt;:/workspace/data/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# インスタンス → ローカル&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;uvx vastai copy &lt;span class="nv"&gt;$INSTANCE_ID&lt;/span&gt;:/workspace/results/ local:./results/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;SSH configを設定していれば、通常の &lt;code&gt;scp&lt;/code&gt; でも問題ありません。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;scp ./train.py vastai-gpu:/workspace/train.py
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;scp -r vastai-gpu:/workspace/results ./results
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="使い終わったらインスタンスを削除する"&gt;使い終わったらインスタンスを削除する&lt;/h2&gt;
&lt;p&gt;作業が終わったら忘れずにインスタンスを削除します。
停止中でもディスク料金が残る場合があるので、不要なインスタンスは &lt;code&gt;destroy&lt;/code&gt; するのが安全です。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;uvx vastai destroy instance &lt;span class="nv"&gt;$INSTANCE_ID&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="よく使うコマンドまとめ"&gt;よく使うコマンドまとめ&lt;/h2&gt;
&lt;h3 id="api-key設定確認"&gt;API key設定・確認&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;uvx vastai &lt;span class="nb"&gt;set&lt;/span&gt; api-key YOUR_API_KEY
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;uvx vastai show user
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="ssh-key作成登録"&gt;SSH key作成・登録&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_vastai -C &lt;span class="s2"&gt;&amp;#34;vastai&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;uvx vastai create ssh-key &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;cat ~/.ssh/id_ed25519_vastai.pub&lt;span class="k"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="gpu検索"&gt;GPU検索&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;uvx vastai search offers &lt;span class="s1"&gt;&amp;#39;gpu_name=RTX_4090 num_gpus=1 verified=true direct_port_count&amp;gt;=1 rentable=true&amp;#39;&lt;/span&gt; -o &lt;span class="s1"&gt;&amp;#39;dlperf_usd-&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="インスタンス作成確認"&gt;インスタンス作成・確認&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;uvx vastai create instance OFFER_ID &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="se"&gt;&lt;/span&gt; --image nvidia/cuda:12.4.1-cudnn-runtime-ubuntu22.04 &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="se"&gt;&lt;/span&gt; --disk &lt;span class="m"&gt;20&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="se"&gt;&lt;/span&gt; --onstart-cmd &lt;span class="s2"&gt;&amp;#34;nvidia-smi&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="se"&gt;&lt;/span&gt; --ssh
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;uvx vastai show instance &lt;span class="nv"&gt;$INSTANCE_ID&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;uvx vastai ssh-url &lt;span class="nv"&gt;$INSTANCE_ID&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="ssh接続"&gt;SSH接続&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ssh -i ~/.ssh/id_ed25519_vastai root@xxx.xxx.xxx.xxx -p &lt;span class="m"&gt;12345&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# SSH config 設定後&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ssh vastai-gpu
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="ファイル転送gpu確認削除"&gt;ファイル転送・GPU確認・削除&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;uvx vastai copy local:./data/ &lt;span class="nv"&gt;$INSTANCE_ID&lt;/span&gt;:/workspace/data/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;nvidia-smi
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;uvx vastai destroy instance &lt;span class="nv"&gt;$INSTANCE_ID&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;お疲れ様でした。&lt;/p&gt;
&lt;h2 id="参考"&gt;参考&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>