Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
lvisdd opened this issue May 5, 2020 · 0 comments
Open

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

lvisdd opened this issue May 5, 2020 · 0 comments

Comments

@lvisdd
Copy link

lvisdd commented May 5, 2020

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

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant