🔖

vast.aiでGPUをレンタルしてVSCodeでSSH接続する

2024/10/19に公開

この記事の目標はvast.aiでGPUをレンタルして、Cursor(VSCode)でSSH接続することです。

vast.aiとは

vast.aiは、世界中の未使用GPUリソースを共有するマーケットプレイスです。個人や企業が持つ余剰のGPUを借りることで、高性能な計算資源を安価に利用できます。特にディープラーニングや生成AIの開発に必要な強力なGPUを、一時的に手軽に使えるのが魅力です。

時間あたりの単価は他のクラウドサービスに比べても安いです。

HPにはRTX4090で$0.35/hr, RTX3090で$0.18/hrとなっています。

注意点は機密情報の取り扱いです。個人のサーバーに接続する形になるので情報の取り扱いには注意しましょう。コンペなどで使うに留めると良いと思います。

手順の全体像

  1. 事前準備
    1. vast.aiのアカウントを作成
    2. VSCodeの拡張機能のインストール
    3. ssh keyの作成
  2. クレジットをチャージ
  3. RTX 4090のインスタンスをレンタル
  4. VSCodeからリモート接続
  5. 生成AIの環境を構築して実行

事前準備


vast.aiのアカウントを作成

まずはアカウントの作成から始めましょう。

  1. https://vast.ai/ にアクセスし、右上のConsoleをクリックしましょう

  1. サインアップをしましょう

    右上の「SIGN IN」ボタンをクリックします。

    Continue with Google/Githubで認証を行うか、メールアドレスで登録します。

    メールアドレスの場合は、Sign upからEmail, Username, Passwordを入力してアカウントを作成します。

    →認証のメールが届くのでクリックします。

これでvast.aiの登録は完了です。

Remote - SSHのインストール

この拡張機能でVSCodeからvast.aiで立てたインスタンスにSSH接続が可能になります。

VSCodeから接続することでいつもと同じような環境でコーディングができます。

VSCodeを開き、左のバーから「拡張機能」をクリックし、「Remote - SSH」を検索してインストールします。

SSH keyの作成

SSH接続するための公開鍵を

ssh-keygen -t rsa -b 4096

を実行して公開鍵を作成します。

この時、-t ed25519 にしてED25519鍵を生成することもできますが末尾のコメントを空白にすると拒否されてしまいます。その時は、末尾に-C "my_comment”をつけコメント付きの鍵を作成しましょう

Generating public/private rsa key pair.

/.ssh/id_rsa.pubが作成されるので/.ssh/id_rsa.pubの内容をコピーします

Macを使用されている場合は以下のコマンドでコピーできます

cat ~/.ssh/id_rsa.pub | pbcopy

コピーした内容をvast.aiのコンソール画面の左から「ACCOUNT」を選択し、

Change SSH Keyのところに+ ADD SSH KEYで追加しておきます。

クレジットをチャージ


GPUをレンタルするにはクレジットが必要です。

  1. クレジットの追加

    左側のメニューから「Billing」を選択します。

  2. 支払い方法の設定

    • Add Credit」をクリック

    stripeで支払おうとすると事前にカードを登録する必要があると書かれていて選択ができませんでした

    Payment MethodsのAdd Cardからクレジットカードを登録しましょう

    • カードを登録すると以下の注意がAutomatic billingにかかけます

      Deletion protection is active for your account
      Your instances will be stopped if your credit drops to $0.
      Storage charges will still apply. You must destroy all your instances to avoid automatic charges.
      Your visa...XXXX card will be charged a default amount when your credit balance drops below $0.

    • クレジットが$0になった時点で、インスタンスは自動的に停止されます。ただし、インスタンスが停止している間もストレージ料金が発生するため、継続的に課金される可能性があります。

    • ストレージ料金を避けるためには、インスタンスを**完全に破棄(Destroy)**する必要があります。破棄しない限り、インスタンスは保持され、ストレージ料金が課され続けます

    • 基本的にデフォルトは自動でクレジットがチャージされることは無いので安心してよいです。

    • ただし、インスタンスが停止していてもストレージの料金が発生するので使わないときはDestroyしておきましょうという内容です。とはいえストレージの料金は1時間数円なのでそこまで神経質にならなくても良いのかもしれません

  3. Creditのチャージ

    • Add Credit」ボタンをクリック

    • チャージしたい金額を入力(例:$10)

    • Add Credit」をクリックしてチャージ完了

    • チャージができました

GPUをレンタル

いよいよGPUをレンタルします

GPUの選びかた

  • コンソール画面の右上のプルダウンリストで検索条件をつけることができます
    • 料金タイプは「On-Demand」を選んでおけば大丈夫です
      • Interruptibleは誰かがそれより高い金額で借りようとすると中断されてしまいます
    • 今回はRTX4090を使用するのでそれを選びます
    • リージョンもPlanet Earth(地球全体)かAsiaなどの特定の地域を選びます
    • 一番右で表示する順番を選ぶことができます。
  • 洗濯すると一覧がでます。
    • VRAMの容量やインターネットの上り・行の通信速度などがわかります
  • RENTのところにマウスホバーすると金額の詳細が見ることができます

  • 金額は画像の例だと以下のように読めます。(1$ =140円で計算)
    • GPU On-Demand
      • GPUの使用料です。1時間あたり$0.347がかかります。(48.58円)
    • 64.450 GB Disk
      • ディスクの使用料です。1時間あたり$0.018がかかります。(2.52円)
    • Total Cost
      • その2つの合計です(51.10円)
    • Internet
      • $0.004/TBアップロード**:**インターネットを介してデータをアップロードした場合、1TBあたり$0.004かかります。(0.56円/TB)
      • $0.003/TBダウンロード:データをダウンロードする際、1TBあたり$0.003かかります。(0.42円/TB)
    • アップロード・ダウンロードは0円のもあるのでそれを選ぶとよいのかもしれません。

テンプレートを選ぶこともできます。

テンプレートを選択するとまた、先程の一覧が出るので一つ選ぶとインスタンスが起動します

画像のCREATING…がOPENになれば起動が完了します。

起動するとインスタンスのIPアドレスやポート番号が表示されるのでそれをもとにVSCodeでSSH接続します。SSH構成ファイル(~/.ssh/config)に以下の内容を追加します。

  • Hostの名前はvast_ai_instanceになっていますが自分が分かりやすい名前を適当につけてください
  • HostNameはインスタンスのPublic IP Addressを書いてください
  • PortはインスタンスのInstance Port Rangeの番号を書いてください
  • IdentityFileは作成したSSH Keyのpathを記述してください
    • 基本的に~/.ssh/id_rsa のはずです。

VSCodeからSSH接続

  1. 左下の緑色の「><」アイコンをクリックし、「Remote-SSH: Connect to Host」を選択します。

  2. vast_ai_instanceをリストから選択します。

  3. 接続が完了しました。

  4. 正しく接続されると、VSCodeの左下に「SSH: vast_ai_instance」と表示され、リモートサーバー上での操作が可能になります。リモートでPythonスクリプトを実行したり、ファイルを編集することができるようになります。

    VScodeのターミナルにメッセージが表示されます

  • 試しにnvidia-smiを実行してみましょう

以下のように表示されRTX4090のGPUが積まれたインスタンスに接続できていることがわかります。

$ nvidia-smi
Sat Oct 19 06:02:47 2024       
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 555.58.02              Driver Version: 555.58.02      CUDA Version: 12.5     |
|-----------------------------------------+------------------------+----------------------+
| GPU  Name                 Persistence-M | Bus-Id          Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |
|                                         |                        |               MIG M. |
|=========================================+========================+======================|
|   0  NVIDIA GeForce RTX 4090        On  |   00000000:21:00.0 Off |                  Off |
|  0%   13C    P8              5W /  450W |       2MiB /  24564MiB |      0%      Default |
|                                         |                        |                  N/A |
+-----------------------------------------+------------------------+----------------------+
                                                                                         
+-----------------------------------------------------------------------------------------+
| Processes:                                                                              |
|  GPU   GI   CI        PID   Type   Process name                              GPU Memory |
|        ID   ID                                                               Usage      |
|=========================================================================================|
|  No running processes found                                                             |
+-----------------------------------------------------------------------------------------+

接続後は、通常のVSCodeと同じようにファイル操作やターミナルの利用が可能です。リモートサーバー上でPythonスクリプトを実行したり、コードを実行できます。

Discussion