DeepLearningShogi
DeepLearningShogi copied to clipboard
AWSでのGPU環境の構築手順について
README.mdのビルド環境の記載から、自力でdlshogi を導入するハードルが高いと思われるため、環境構築手順をまとめてみました。
- 第31回世界コンピュータ将棋選手権(2021/05/03~05)バージョンの想定
- 以下の環境で、dlshogi のビルド環境構築を実施しました。
- ローカルPC(Windows10)
- AWS(Windows Server 2016)
AWS環境構築
AWS アカウントの作成
仮想 Multi-Factor Authentication (MFA) デバイスの有効化
Google Authenticator等のAndroid/iPhoneアプリ、または、WinAuth等の2段階認証アプリを事前に導入する。
Windows 仮想マシンの起動
- 「Amazon マシンイメージ (AMI) 」では、NVIDIAドライバーとの相性を考慮し、「Deep Learning AMI (Microsoft Windows Server 2016) - ami-0aedb6f2f29802c6e」を利用する。
- 「インスタンスタイプの選択」では、Amazon EC2 P3 インスタンスを利用する。
- 大会の場合は、Tensor コアを最大限活用するため、Tesla V100のGPUを利用する。
- ローカルPCの場合は、RTX 20/30 Series を利用する。
- 「ストレージの追加」では、「100 GiB」にする。
- 「Visual Studio 2019 Community」や「CUDA Toolkit 11.x」のインストール時に、デフォルトの「60 GiB」では不足する。必要に応じて、OS別EBSオンライン拡張方法でディスクサイズを拡張する。
- 「終了時に削除」を無効にすると、インスタンス終了後にディスクが残り、課金対象になる。
- 「セキュリティグループの設定」では、「ソース」に「マイ IP」を選択する等、接続元のIPアドレスを絞るのが望ましい。
- インターネット接続環境によっては、グローバルIPアドレスが変わることがあるため、必要に応じて編集する。
特記事項
- AWS費用を抑える場合は、必要に応じて、「米国東部 (バージニア北部)」等、インスタンス費用が安い海外のリージョンを利用する。
- 「インスタンスの設定」では、「スポットインスタンスのリクエスト」をすることで、クラウドコストを大幅に節約できる可能性がある。
タイプ | GPU | vCPU | メモリ (GiB) | 現在の価格 | オンデマンド料金/時間 |
---|---|---|---|---|---|
p3.2xlarge | 1 | 8 | 61 | $1.286 | $3.06 |
p3.8xlarge | 4 | 32 | 244 | $5.144 | $12.24 |
p3.16xlarge | 8 | 64 | 488 | $10.288 | $24.48 |
p3dn.24xlarge | 8 | 96 | 768 | $13.7796 | $31.218 |
-
初めて利用するリージョンでは、「Your Request For Accessing AWS Resources Has Been Validated」のメールが来るまで、AWSインスタンスが起動しないことがある。数分程度待つ必要があった。
-
「Max spot instance count exceeded」エラーが表示された場合は、AWS サポートセンターで、スポットインスタンス の制限 の引き上げをリクエストする。「p3.16xlarge」は初期状態では制限されている可能性がある。
Windows 環境構築
OS設定(任意)
- 「日付と時刻の調整」から「タイムゾーン」を「(UTC +09:00) 大阪、札幌、東京」にする。
- 「言語」から「Windowsの表示言語」を「日本語」にする。
プリインストールされているアプリをコントロールパネルからアンインストール
- NVIDIA(CUDA 9.0関連)から始まるドライバ全て
- Anaconda 3
Google Chrome(任意)のインストール
7zip(任意)のインストール
VS 2019 Community のインストール
- Python development(Python 開発)
- Python native development tools(ネイティブ開発ツール)
- Desktop development with C++(C++ によるデスクトップ開発)
CUDA Toolkit のインストール
-
CUDA Toolkit 11.1.1
- 「Windows」
- 「x86_64」
- 「10」、「Server 2019」、「Server 2016」のいずれか
- 「exe (local)」
- 「Download」を選択する。
cuDNN のインストール
NVIDIA Developer Programの無料アカウントが必要
- 「Download cuDNN v8.2.0 (April 23rd, 2021), for CUDA 11.x」
- 「cuDNN Library for Windows (x86)」を選択する。
- 解凍した資材をフォルダごとコピーし、貼り付ける。
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.1
- bin
- include
- lib
NVIDIA TensorRT 7.x のインストール
NVIDIA Developer Programの無料アカウントが必要
- ☑「I Agree To the Terms of the NVIDIA TensorRT License Agreement」をチェックする
- 「TensorRT 7.2.3」
- 「TensorRT 7.2.3 for Windows10 and CUDA 11.1 & 11.2 ZIP package」を選択する。
- 解凍した資材をCドライブ直下に格納する。
- 環境変数PATHに、TensorRTライブラリのパスを追加する。
C:\TensorRT-7.2.3.4\lib
Anaconda のインストール
- 以下の資材をダウンロードする。
Python 3.8 • 64-Bit Graphical Installer
- インストール先は、以下に変更する。
C:\Anaconda3
Boost のインストール
- 「1.75.0」-「source」配下の資材を選択する。
- 解凍した資材をCドライブ直下に格納する。
C:\boost_1_75_0
- USERPROFILE配下に、以下の設定ファイルをメモ帳等のテキストエディタで作成する。
例:「C:\Users\%USERNAME%\user-config.jam」
using python : 3.8 : C:\\Anaconda3\\python ;
- Anacondaコマンドプロンプトからビルドする。
cd C:\boost_1_75_0
bootstrap.bat
b2 toolset=msvc threading=multi variant=debug,release link=static runtime-link=static address-model=64 --stagedir=stage/x64 -j 8
Git のインストール
- 「Download For Windows」から資材をダウンロードし、インストールする。
dlshogi のインストール
AnacondaコマンドプロンプトからPython 関連をインストールする。
mkdir c:\work
cd c:\work
git clone https://github.com/TadaoYamaoka/DeepLearningShogi.git
cd DeepLearningShogi
pip install cshogi
conda install pytorch torchvision torchaudio cudatoolkit=11.1 -c pytorch -c conda-forge
pip install onnxruntime-gpu
pip install --no-cache-dir -e .
ソリューションをVisual Studio 2019で開く。
C:\work\DeepLearningShogi\DeepLearningShogi.sln
アクティブ構成を以下に変更する。
- 「Release/x64」※対局用
- 「Makebook/x64」※定跡ファイル作成用
「ソリューションエクスプローラー」から以下のプロジェクトを「右クリック」-「プロパティ」を選択する。
- 「cpp_shogi」
- 「make_hcpe_by_self_play」
- 「test」
- 「usi」
「VC++ ディレクトリ」の以下の設定を確認し、「TensorRT」、「Anaconda3」、「Boost」のインストールディレクトリと合っていることを確認する。
- 「インクルード ディレクトリ」
- 「ライブラリディレクトリ」
「ソリューションエクスプローラー」から「ソリューション 'DeepLearningShogi'(7/7) プロジェクト」を右クリックする。
「ソリューションのビルド」を選択する。
以下の実行ファイルを将棋所のエンジンとして登録する。
C:\work\DeepLearningShogi\x64\Release\dlshogi_tensorrt.exe
以下の実行ファイルで定跡ファイルを作成する。
C:\work\DeepLearningShogi\x64\MakeBook\dlshogi_tensorrt.exe
第31回世界コンピュータ将棋選手権バージョン のモデルをダウンロード
- 任意のディレクトリ(例は「C:\work」配下)に解凍
C:\work\dlshogi_with_gct_wcsc31
- 自前で学習したモデルをONNX に変換する場合は、以下のツールで変換できる。対局時にTensorRTを使用する場合は、拡張子は「.onnx」とする。
cd c:\work\DeepLearningShogi
python -m dlshogi.convert_model_to_onnx --network resnet10_swish model-XXXXXXXX model-XXXXXXX.onnx
エンジンの動作確認(任意)
- コマンドプロンプトから起動確認
C:\work\dlshogi_with_gct_wcsc31\dlshogi_tensorrt.exe
setoption name DNN_Model value C:\work\dlshogi_with_gct_wcsc31\model-0000226kai.onnx
setoption name UCT_Threads value 3
setoption name UCT_Threads2 value 0
setoption name UCT_Threads3 value 0
setoption name UCT_Threads4 value 0
setoption name UCT_Threads5 value 0
setoption name UCT_Threads6 value 0
setoption name UCT_Threads7 value 0
setoption name UCT_Threads8 value 0
setoption name DNN_Batch_Size value 128
isready
position startpos
go byoyomi 1000
quit
dir /b C:\work\dlshogi_with_gct_wcsc31\model-0000226kai.onnx*
- 「isready」コマンドの後に作成されるキャッシュファイル(*.serialized)を新規作成する場合は、数分間待つ必要がある。
- 「DNN_Batch_Size value」(例:128→256) を変えた場合は、バッチサイズ単位に作成される。
- 例:
- 「model-0000226kai.onnx.0.128.serialized」
- 「model-0000226kai.onnx.0.256.serialized」
- 例:
- エラーが発生する場合
- dlshogi をビルドしている場合は、アクティブ構成を「Release/x64」に変更していること。
- 「環境変数PATHに、TensorRTライブラリのパスを追加する。」を設定していること。
- CUDA/cuDNN/TensorRTインストール後、PCを再起動していること。
- キャッシュファイルは環境依存するため、古い環境(別インスタンス/端末、CUDAバージョンアップ等)で作成済みのものは削除し、再作成すること。
技巧2(任意)のインストール
- 任意のディレクトリ(例は「C:\work」配下)に解凍
C:\work\gikou2_win
将棋所 のインストール
- 任意のディレクトリ(例は「C:\work」配下)に解凍
C:\work\Shogidokoro
- Shogidokoro.exe を起動
C:\work\Shogidokoro\Shogidokoro.exe
- 「対局」メニューの「エンジン管理」を選択
- 「C:\work\DeepLearningShogi\x64\Release\dlshogi_tensorrt.exe」
- 「C:\work\Shogidokoro\Engine\Lesserkai.exe」
- 「C:\work\gikou2_win\gikou.exe」
- 「エンジン設定」は、以下の設定を参考にする。
パラメータ | 設定値 | 備考 |
---|---|---|
DNN_Model | model-dr2_exhi.onnx | exe ファイルとの相対パス、または、絶対パスでモデルファイルを記載する。デフォルトモデルファイル名(model.onnx)になっている。 |
DNN_Batch_Size | 128 or 256 | 推論のバッチサイズ。NPSが最大になるように調整する。128が推奨値。検討モードでは256が推奨値。 |
UCT_Threads | 2 or 3 | GPU1枚当たりの探索のスレッド数。基本は2~3にする。 |
UCT_NodeLimit | 10000000 | 最大探索ノード数。1ノードあたり2Kbyteのメモリが必要。デフォルト10000000。 |
PV_Mate_Search_Threads | 0 or 1 | 探索中に読み筋(PV)上に詰みがないかをチェックするスレッドの数(デフォルト0)。CPUコア数が、UCT_Threads+1(Mate_Root_Searchが1以上の場合)の場合に設定する。CPUのコアが余っていない場合、設定すると弱くなる場合がある。 |
Book_File | book.bin | Apery形式のbookファイルが使用可能。デフォルト定跡ファイル名(book.bin)になっている。 |
OwnBook | false or true | 定跡を使用する場合オンにする。 |
USI_Ponder | false or true | 同一マシンでのエンジン同士の対局の場合オフにする。 |
- 「閉じる」を選択
- 「対局」メニューの「対局」を選択
- 先手または後手の「エンジン」-「dlshogi」を選択し、「OK」を選択
- 初回は、キャッシュファイルを作成するため、数分間待つ必要がある。
- 「表示」メニューの「デバッグウィンドウ」から確認すること。
- 対局できない場合は、「エンジンの動作確認(任意)」を実施し、エラーが発生していないか確認すること。
- CUDA/cuDNN/TensorRTインストール後、PCを再起動していること。
- 初回は、キャッシュファイルを作成するため、数分間待つ必要がある。
onnxモデルの精度テスト(任意)
- floodgateテストデータ のダウンロード
- コマンドプロンプトから起動確認
python -m dlshogi.test --onnx model-0000226kai.onnx floodgate_teacher_uniq-test-01
NPS測定ベンチマークの取得(任意)
- floodgateからサンプリングした100局面で、NPSを測定する。
python -m dlshogi.utils.benchmark ./dlshogi_tensorrt.exe ./model-0000226kai.onnx --gpus 1 --threads 3 --batch 128
- floodgateからサンプリングした100局面で、NPSを測定し、統計情報を取得する。
python -m dlshogi.utils.benchmark ./dlshogi_tensorrt.exe ./model-0000226kai.onnx --gpus 1 --threads 3 --batch 128 > benchmark.txt
python
import pandas as pd
import re
f = open('benchmark.txt', 'r', encoding='UTF-8')
lines = f.readlines()
nps = []
for s in lines:
#print(s)
m = re.match('^.*nps ([0-9]+).*$', s)
if m:
#print(m.group(1))
nps.append(int(m.group(1)))
f.close()
del nps[0]
print(nps)
df = pd.DataFrame(nps, columns=['nps'])
print(df.describe())
quit()
定跡ファイルの作成(任意)
- 水匠2をダウンロード
- 「水匠2(200504).zip」を解凍する
- コマンドプロンプトから起動確認
C:\work\DeepLearningShogi\x64\MakeBook\dlshogi_tensorrt.exe
setoption name DNN_Model value C:\work\dlshogi_with_gct_wcsc31\model-0000226kai.onnx
setoption name UCT_Threads value 3
setoption name UCT_Threads2 value 0
setoption name UCT_Threads3 value 0
setoption name UCT_Threads4 value 0
setoption name UCT_Threads5 value 0
setoption name UCT_Threads6 value 0
setoption name UCT_Threads7 value 0
setoption name UCT_Threads8 value 0
setoption name Save_Book_Interval value 100
isready
make_book ./sentebook.bin ./book.bin 10000000 1
quit
# 定跡ファイル作成コマンド
make_book [bookFileName] [outFileName] [playoutNum] [limitTrialNum]
パラメータ | 設定値 | 備考 |
---|---|---|
Save_Book_Interval | 100 | 途中で保存する間隔(デフォルト100) |
bookFileName | sentebook.bin or gotebook.bin | 対戦相手が使用する定跡を指定します。 |
outFileName | book.bin | ファイルがないと作られます。すでにあると続きから探索します。 |
playoutNum | 10000000 | プレイアウト数 |
limitTrialNum | 500 | 試行回数の閾値 |
イメージバックアップ
- スポットインスタンスをそのまま終了/シャットダウンした場合、インスタンスが削除される。
- EC2ダッシュボードの「インスタンス」-「インスタンス」から「実行中のインスタンス」を選択する。
- 「右クリック」-「イメージの作成」する。
- EC2ダッシュボードの「イメージ」-「AMI」を選択する。
- 作成したイメージが「ステータス」:「available」になることを確認する。
- 次回以降は、「右クリック」-「スポットのリクエスト」をすることで、イメージからインスタンスを起動できる。
- ただし、Public DNSやPublic IP等の設定は変更される。リモートデスクトップの接続先の情報が変わるため、注意が必要。
- 作成したキーペアやパスワードは次回以降も必要なため、削除しないように注意する。
インスタンスを終了
- EC2ダッシュボードの「インスタンス」-「インスタンス」から「実行中のインスタンス」を選択する。
- 「右クリック」- 「インスタンスの状態」-「削除」する。
不要なリソースの確認
- EC2ダッシュボードの「ELASTIC BLOCK STORE」の以下のメニューをクリックする。
- 「ボリューム」
- 「スナップショット」
- インスタンス削除済みであり、不要なリソースが残っていないか確認する。
- 不要なリソースがあれば、「右クリック」-「削除」する。