Skip to content

vast.aiでふかうら王

yaneurao edited this page Jul 8, 2023 · 1 revision

vast.aiでふかうら王を動かす手順についてです

Windows環境 + 将棋所で使う場合について書いています。他の環境で使う場合も、参考になると思います。

🌈 やねうら王チームの勉強会の動画

vast.aiでふかうら王を動かす手順を動画で解説

vast.aiとは

個人間でGPUを貸し借りできるサービスです。AWSで借りるより1/5ぐらいの費用で済みます。

https://vast.ai/

インスタンスの種類

オンデマンド(On-demand)とインタラプティブル(Interruptible)と二種類あります。

前者はAWSのオンデマンドインスタンス、後者はスポットインスタンスに対応します。

つまり、後者は誰かがそれより高い価格で借りようとすると使用中であっても中断されてしまいます。

今回は、中断されては困るのでオンデマンドで借ります。

インスタンスの借り方について

まずアカウントを作成して、vast.aiのトップから「On Demand Pricing」をクリックして、左のメニューの「Billings」のところから$10ほどチャージします。前払いでチャージする方式です。これなら使いすぎることはなくて良いですね。

大会では、試合中に支払いが足りなくてチャージしようと思ったらクレジットカードの決済ができなくて(カード会社のセキュリティが働いて)、試合が続行できなくなることがあるので、大会の時は前日までにがっつりチャージしておいた方がいいかも知れませんね。

SSH keyの作成

SSH keyを作成します。詳しくは、「SSH keyの作成」などでググってください。

いまでしたら、WSLが使えるなら、WSLのssh-keygenを使うのが一番簡単だと思います。

【WSL環境】sshを作成してgithubにアクセスするまでの道のり

ssh-keygenを使うと、以下の2つのファイルができると思います。

id_rsa
id_rsa.pub

前者がプライベートキーです。これは、外部サイトに決して貼り付けたりしないでください。sshで接続する時に用います。

後者はパブリックキー(公開キー)です。これは、外部サイトに貼り付けたりして使います。

パブリックキーの登録

vast.aiのトップから「On Demand Pricing」をクリックして、画面左のメニュー(?)にある「Account」をクリックします。

画面右側に「Change SSH Key」と書いてあるので、ここに公開キー(id_rsa.pub)を貼り付けます。

id_rsa.pubをテキストエディタ(メモ帳でも可)で開いて、ここにコピペします。

インスタンスを借りるまで

借りたいGPUを選んで、「RENT」ボタンを押すと借りられます。

…が、その前に、この時に起動するイメージを「Instance Configuration」のところから選んでおきます。

「Template Slot」を「SELECT」します。

「Version tag to use:」の下にある 「Enter full docker image/tag name for docker pull」のところに

nvcr.io/nvidia/tensorrt:22.12-py3

と記入。

・「Launch Mode:」は「Run Interactive shell server , SSH」にチェック(デフォルト)

・「Identification」の「Template Name :」「FukauraOu」と書くなどあとでイメージを識別しやすい名前を書く。

・「Description:」のところにはメモ書き用。

「SELECT & SAVE」ボタンを押して保存。

借りてみる

「Instance Configuration」のところで「Image:FukauraOu」と、さきほど編集したイメージが選択されていることを確認する。

「1x RTX 4090」、「$0.379/h」などと価格が書いてある。「1x」はGPUが1基ついてるという意味。「8x」なら8基ついてる。

💡 「$0.1/h」だと1時間15円程度。1ヶ月で15000円程度。「$4/h」だと1ヶ月40万円程度。使いすぎ注意。

⚠ Max CUDAが 12.0以上のものを借りる。Max CUDA 11はTensorRT等のバージョンが異なりビルドできないことがある。

インスタンスの起動を待つ

左のメニューの「Instances」をクリック。

いま借りたインスタンスが表示されています。

起動したら、「LOADING」と書いてあったボタンが「>_ CONNECT」に変わります。このボタンをクリックすると、接続先の情報が表示されます。

Direct ssh connect:

ssh -p 40172 root@47.203.161.59 -L 8080:localhost:8080 のように書いてあるはずです。この「-p」のあとがport番号、「root@」のあとの数値がIPアドレスです。

sshで接続してみます。

コマンドプロンプトから。

ssh -p 40172 root@47.203.161.59 -L 8080:localhost:8080 -i id_rsa

のように、末尾に「-i id_rsa」を指定します。

⚠ コマンドプロンプトは、保存したid_rsaファイルのある場所で開いてください。

💡 sshコマンドは、Windows 10 RS4(1803)以降、もしくはWindows 11ならば最初から使える状態になっています。

sshコマンドを使う時にUNPROTECTED PRIVATE KEY FILEと出たら

秘密鍵のアクセス権限設定に余計なものが付いていると起きる現象です。 (例: 「NT AUTHORITY\Authenticated Users : そのコンピュータにログイン出来る人全部」から読み取り可能な場所に秘密鍵ファイルを配置している)

LinuxでSSHを使う場合も、SSH鍵のパーミッションとかが他の一般ユーザーから読み取り可能だったり不適切だと起きるエラーです。

Windowsの場合、Cドライブ直下に掘った、アクセス権限を弄っていない(NT AUTHORITY\Authenticated Users からのアクセスが許可されている)作業用フォルダを使っていて、そこに秘密鍵を置こうととした時などに起きやすいです。

  • Linuxならパーミッションを600に変更。
  • Windowsならそのファイルにアクセス可能なユーザーを自分だけに変更する。
    • 解決しない時 👉 ユーザーフォルダ (C:\Users\%USERNAME%\) の下であれば、変なこと(ユーザーフォルダに他ユーザーからのアクセス権限を追加してしまっている、など)をしていなければ、標準ではそのユーザー(+SYSTEM+Administrators)でしかアクセスできない権限設定になっているので、ユーザーフォルダの下にSSH秘密鍵を格納するためのフォルダを作成して入れるのがお勧め。

💡 参考 : SSHでUNPROTECTED PRIVATE KEY FILEと言われたら : https://note.affi-sapo-sv.com/ssh-unprotected-key.php

VSCode + SSH Remote

VSCode + SSH Remoteを用いて、ソースコードや評価関数ファイルなどを転送します。

このへんはAWSを使う時と同様なので詳しくはそちらをご覧ください。

dlshogiのビルド

dlshogiのビルド手順を書いておきます。

sudo apt-get update
sudo apt-get install libboost-all-dev -y

# make
mkdir workspace
cd ~/workspace
git clone https://github.com/TadaoYamaoka/DeepLearningShogi.git
cd ~/workspace/DeepLearningShogi/usi
make

# 実行
cd ~/workspace/DeepLearningShogi/usi/bin
./usi

ふかうら王のビルド

sudo apt-get update
sudo apt-get -y install build-essential clang lld libopenblas-dev unzip zip
git clone https://github.com/yaneurao/YaneuraOu

# make
cd YaneuraOu/source
make clean YANEURAOU_EDITION=YANEURAOU_ENGINE_DEEP_TENSOR_RT_UBUNTU
make -j8 tournament COMPILER=clang++ YANEURAOU_EDITION=YANEURAOU_ENGINE_DEEP_TENSOR_RT_UBUNTU ENGINE_NAME="FukauraOu" TARGET_CPU=AVX2
cp ./YaneuraOu-by-gcc ~
cd ~

# 実行
./YaneuraOu-by-gcc
usi

engineの.batファイルを作成します。

例えば、vast-engine.bat というファイルを新規に作成して、以下の内容にします。(port番号と接続先IPはCONNECTボタンを押した時の情報に変更してください)

ssh -p 40172 root@47.203.161.59 -L 8080:localhost:8080 -i id_rsa 
 ./YaneuraOu-by-gcc

⚠ この .batファイルと同じフォルダに id_rsa ファイルが存在している必要があります。

また初回接続時には、sshコマンドが「知らないホストだけどいいかな?」みたいな確認のメッセージが出てきて面倒なので、このチェックを省略するオプションをつけておいたほうが運用が楽でしょう。これは、以下のように「-o StrictHostKeyChecking=no」と書きます。

ssh -p 40172 root@47.203.161.59 -L 8080:localhost:8080 -o StrictHostKeyChecking=no -i id_rsa ./YaneuraOu-by-gcc

id_rsaを他のフォルダに配置する場合は、以下のようにダブルクォートで囲みます。

ssh -p 40172 root@47.203.161.59 -L 8080:localhost:8080 -o StrictHostKeyChecking=no -i "C:\Users\yaneurao\id_rsa" ./YaneuraOu-by-gcc

id_rsaは信頼できるフォルダ(Cドライブのユーザーフォルダなど)に配置しないと接続に失敗するので注意してください。

将棋所でエンジンとして登録します

上で作成した.batファイルは、将棋所からエンジンとして登録できます。

インスタンスの終了

利用が終了したら、Instancesのところからインスタンスを確認してゴミ箱ボタンを押しましょう。そのあと本当に消すのか確認のダイアログが出てくるので「AGREE」(同意)をクリックして、インスタンスが表示されなくなったら削除されています。(以降、料金はかかりません)

vast.ai利用上の注意事項

使い終わったら、インスタンスが終了していること必ず確認するようにしましょう。

Clone this wiki locally