Chapter 05

dlshogiのインストールと設定

bellbind
bellbind
2021.08.29に更新

さらに、別の将棋エンジン実装、TadaoYamaokaさんのDeepLearningShogi(dlshogi)を登録してみます。
dlshogiは、ディープニューラルネットワーク(DNN)を盤面評価に利用する実装です。

dlshogiのダウンロードと展開

githubのDeepLearningShogiリポジトリReleasesには、歴代バージョンのzipアーカイブがリンクされています。

ここでは、「第31回世界コンピュータ将棋選手権バージョン」dlshogi_with_gct_wcsc31.zip を用います。

このzipファイル(65MB)を(たとえば「ドキュメント」フォルダへ)展開すると、
約80MBになります(さらに、将棋エンジンを実行すると60MBほどのファイルが書き出されました)。
この中に、exeファイルとbinファイル、onnxファイルなどが含まれていることが確認できます。

この中のexeファイルのうち、将棋エンジンは以下の2つです。

  • dlshogi_tensorrt.exe
  • dlshogi_onnxruntime.exe

tensorrt版exeは、nVidiaのGPUを使って計算をするタイプで速いです。
一方、onnxruntime版exeは、nVidiaのGPUなしでも実行できるタイプですが、tensorrt版と比べると遅いものになるようです。

どちらのexeも、zipファイルをダウンロードして展開しただけでは使えず、PC上で事前に用意することがあります。

onnxruntime版exeのための事前作業

onnxruntime版exeでは、実行するのにVisual C++ランタイムが必要です。

インストーラを実行したあとで、dlshogi_onnxruntime.exeは、ShogiGUIで「エンジン一覧」へ登録可能になります。

vc_redist.x64.exeを実行するとまずライセンスへの合意が求められます。

このあと「このアプリがデバイスに変更を加えることを許可します」というロック画面に入るので、「はい」 のほうを押すと、インストールが進み、最後に 「再起動」 を求められます。

(VCランタイムは他のアプリケーションでも利用するためにインストールしてある場合も多いので、この場合はvc_redist.x64.exeをインストールしなくでも、dlshogi_onnxruntime.exeが登録できるようになっています。)

tensorrt版exeのための事前作業

  • 注: tensorrt版を使うには、NVIDIAのGPUを搭載したPCであることが必須です

tensorrt版exeは、実行時にnVidiaのcuDNNTensorRTを用いています。
cuDNNとTensorRTは、ともにNVIDIAのCUDAを前提としています。

これらを完了するために、まず、CUDA Toolkitをインストールします。次に、NVIDIAアカウントを作成し、ログインしてから、cuDNNとTensorRTをセットアップします。

CUDA Toolkitのダウンロードとインストール

CUDA Toolkitは、以下の CUDA Toolkit Archive のページから該当バージョンを選び、ダウンロードします。

dlshogi_with_gct_wcsc31.zip では、CUDA Tooklkit 11.1.1が必要となります。

ダウンロードページでは、上記のように、Windows10exe(local)を選択していき(注: Windows11だけど10を選ぶ)、出てきた Download (3.1GB) をクリックすれば、cuda_11.1.1_456.81._win10.exe がダウンロードされます。ファイルサイズが3.1GBもあるので途中で失敗しないように注意してください。

このexeを実行すると、「このアプリがデバイスに変更を加えることを許可します」というロック画面に入るので、「はい」 のほうを押します。

つぎに、「CUDA Setup Package」ダイアログで 「OK」 を押すとインストーラーのファイルが展開されます。

その後インストーラーが立ち上がり、システムチェックの後、ライセンスに 「同意して実行する」 でインストールされます。

「インストールオプション」は 「高速(推奨)」 のままで 「次へ」 を選びます。

「CUDA Visual Studio Integration」では、 チェックボックスにチェック を入れ、「NEXT」 を選ぶと、インストールが始まり、しばらく時間がかかります。

インストールが終わるとサマリがでるので 「次へ」 で、終了画面に行き、 「閉じる」 で終わらせます。

NVIDIA Accountの作成

cuDNNとTensorRTのダウンロードを行うには、あらかじめ NVIDIA Accountでログインする必要 があります。

以下のURLから、NVIDIA Accountを作成します。

Emailに、gmailのメールアドレス を入れ、「Next」 ボタンを押すと、以下の画面に飛びます

このページを開いたあと、まずブラウザの広告ブロックは解除しておく 必要があります。広告ブロックを解除したら、一度リロードして からすすめます。

Googleアカウント(= gmailのアカウント)を持っているのであれば、「Log in with Google」 をクリックすることで、Googleアカウントによる認証で、パスワードなしでアカウント作成することができます(FacebookやAppleIDでも同様のことができるでしょう)。
作成時、いくつかの必須プロフィール情報を入力することになります。その中で、Organizationでは実在の企業がオートフィルされますが、適当に"individual"などを書き込んでも大丈夫です。

もしくは、他のサービスのアカウントと紐付けせずに、メールアドレスとパスワードを登録するのであれば、その上の「Create account」をクリックして作成することができます。

ちなみに、NVIDIAアカウントにログインすると、一度ブロックされ、emailで渡ってくる「電子メールアドレスの確認」ボタンを押すことで進行します。

また、再ログイン時には、なにか関心があるかのチェックボックスが出てきたりもしますが、
Yesではないので、なにもせずそのまま SUBMIT すればいいです。

cuDNNのダウンロードとセットアップ

NVIDIA Accountでログインした状態 で、cuDNN Archiveにいきます。

dlshogi_with_gct_wcsc31.zip では、最新の 「cuDNN v8.2.1 [June 7th,2021], for CUDA 11.x」 を使います。この中の 「cuDNN Library for Windows [x86]」 をダウンロードします。

  • cudnn-11.3-windows-x64-v8.2.1.32.zip (746MB)

このcudnnのzipファイルを展開し、その内容をフォルダ構成を保ったまま、CUDAのディレクトリにコピー します。
先程インストールしたCUDA Toolkit v11.1.1のインストール先は、C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.1\ です。具体的には以下のとおりです。

  • zip中の cuda/bin/内のdllファイルすべてを C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.1\bin\ の中へドロップ
  • zip中の cuda/include/内のhファイルすべてを C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.1\include\ の中へドロップ
  • zip中の cuda/lib/x64/内のlibファイルすべてを C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.1\lib\x64\ の中へドロップ
  • zip中の cuda/NVIDIA_SLA_cuDNN_Support.txtC:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.1\ の中へドロップ

コピーしたあとは、CUDA\v11.1\bin以下は以下のような状態になっていることでしょう。

TensorRTのダウンロードとインストール

NVIDIA Accountでログインした状態 で、"NVIDIA TensorRT Download"へいきます。

dlshogi_with_gct_wcsc31.zip では、TensorRT 7を使います。
ページ内の「TensorRT 7」のリンクをたどります。

ここで初回は、アンケート入力が求められるでしょう。
アンケートをSUBMITしたあと、以下のページに進みます。

このページではまず、 「I Agree To the Terms of NVIDIA TensorRT License Agreement」のチェックボックスをチェック します。

出てきたリストの最上部 「TensorRT 1.2.3」 をクリックし、 「TensorRT 7.2.3 for Windows10 and CUDA 11.1 & 11.2 ZIP package」 をクリックし、zipファイルをダウンロードします。

  • TensorRT-7.2.3.4.Windows10x86_64.cuda-11.1.cudnn8.1.zip (614MB)

このTensorRTのzipアーカイブはそのまま展開して利用します。
どこにおいても良いですが、ここでは C:\tools\ というフォルダを作り、その中に展開しました。

  • C:\tools\TensorRT-7.2.3.4\

環境変数Pathへの追加

dlshogiの将棋エンジンのtensorrt版exeが実行可能になるためには、環境変数 を編集し、インストールしておいたcuDNN/CUDAとTenosrRTへの PATHを通す 必要があります。

まず、Windowsの 「設定」 ダイアログを開きます。Windowsキー(左altキーの左のキー)を押しながらiキーを押すことで開けます。

「設定」ダイアログの左の 「システム」 を選び、右の一番下の 「バージョン情報」 を選びます。
そして、「デバイスの仕様」の下にある「関連リンク」の 「システムの詳細設定」 をクリックします。

すると「システムのプロパティ」ダイアログが出るので、下側の 「環境変数」 ボタンをクリックします。「環境変数」ダイアログが開くので、上の「ユーザー環境変数」のリストから、変数が 「Path」 の行をダブルクリックすると、「環境変数名の編集」 ダイアログが開きます。

「環境変数名の編集」 ダイアログの 「新規」 ボタンを押すと、テキスト入力が出るので、そこに以下のフォルダパスを書き加えます。

  • "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.1\bin"
  • "C:\tools\TensorRT-7.2.3.4\lib"

空白含みはダブルクォートでくくる必要があるので、フォルダパスはファイルエクスプローラからコンテキストメニューで**「パスのコピー」** をして、Ctrl+Vでペースト するのがと良いでしょう。

この2つのパスを追加したら、「環境変数名の編集」ダイアログの「OK」ボタンを押し、さらに「環境変数」ダイアログの「OK」ボタンを押します。

この編集が終わったあとで、Windowsを再起動 します。

ShogiGUIへのdlshogiの登録と設定

ShogiGUIのメニュー「ツール」「エンジン設定」の「追加」で、 dlshogi_tensorrt.exe を選びます。NVIDIAのGPUを積んだPCでtensorrtの事前作業がうまく行っていれば、パラメータリスト入りで 「エンジン設定」 ダイアログが立ち上がります。

もし設定がうまく行ってなければ、「エラー」ダイアログで「エンジンの起動に失敗しました」というメッセージが表示されます。この場合は「キャンセル」し、環境変数Pathが正しいかどうか、そこにファイルが有るかどうか、を確認しなおします。
(または、一旦保留して dlshogi_onnxruntime.exe を使う、など)

つぎに、水匠のときと同様に、エンジン設定の各パラメータを調整します。

調整をするとよい各パラメータの説明は、githubのReleaseページに書いてあります。

多分調整の必要があるのは以下の3つです。

  • DNN_Batch_Size
  • UCT_NodeLimit
  • UCT_Threads

まず、「検討」のために将棋エンジンを用いるため、説明にあるように DNN_Batch_Size256にします。
つぎにUCT_NodeLimitがデフォルトで20GB(2kB✕1000万)の設定になっているので、16GBの範囲に入るようにしておきます(この例では600万など)。

あとは、実際に「検討」を実行しながら、「NPS」値が大きくなるようUCT_Threadsの数を上げていきます。
ただ、表示される「NPS」はkN/sec単位で丸まっているため、実際の「ノード数」を「時間」で割った値で判断します。
ただし、UCT_Threadsの値が大きくなるほど更新間隔が長くなり、たとえば8とかにすると数秒かかるようになってしまうので、1秒以内に更新される範囲にとどめておきます。

この例では、UCT_Threads4のときの評価で、57k/41s = 1.4kN/secくらい出ている、ということになります。

このときの「タスクマネージャ」の「パフォーマンス」は以下のようになっています。

水匠4のときと違い、dlshogi_tensorrt.exeでGPUが利用されている事がわかります。

ちなみにonnruntime版でもGPUが搭載されていればGPUを使用してくれます。
しかし、tensorrt版ほどではなく、同設定のonnxruntime版では、ちょうど1kN/secぐらいでした。