DeepLearningShogi icon indicating copy to clipboard operation
DeepLearningShogi copied to clipboard

AWSでのGPU環境の構築手順について

Open lvisdd opened this issue 4 years ago • 0 comments

README.mdのビルド環境の記載から、自力でdlshogi を導入するハードルが高いと思われるため、環境構築手順をまとめてみました。

  • 第31回世界コンピュータ将棋選手権(2021/05/03~05)バージョンの想定
  • 以下の環境で、dlshogi のビルド環境構築を実施しました。
  1. ローカルPC(Windows10)
  2. 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*

image

  • 「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
  • 「対局」メニューの「エンジン管理」を選択
  1. 「C:\work\DeepLearningShogi\x64\Release\dlshogi_tensorrt.exe」
  2. 「C:\work\Shogidokoro\Engine\Lesserkai.exe」
  3. 「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モデルの精度テスト(任意)

python -m dlshogi.test --onnx model-0000226kai.onnx floodgate_teacher_uniq-test-01

image

NPS測定ベンチマークの取得(任意)

  • floodgateからサンプリングした100局面で、NPSを測定する。
python -m dlshogi.utils.benchmark ./dlshogi_tensorrt.exe ./model-0000226kai.onnx --gpus 1 --threads 3 --batch 128

image

  • 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()

image

定跡ファイルの作成(任意)

  • 水匠2をダウンロード
  • 「水匠2(200504).zip」を解凍する image
  • コマンドプロンプトから起動確認
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」の以下のメニューをクリックする。
  1. 「ボリューム」
  2. 「スナップショット」
  • インスタンス削除済みであり、不要なリソースが残っていないか確認する。
  • 不要なリソースがあれば、「右クリック」-「削除」する。

AWS 請求情報とコスト管理 から、定期的に「ダッシュボード グラフの確認」し、予想外の料金の回避 をお願いします。

予算の作成 から、指定された金額に対してコストをモニタリングし、ユーザー定義のしきい値に達したときにアラートメールの設定をお願いします。

lvisdd avatar May 05 '20 07:05 lvisdd