dlshogi高速化雑感

本家にIssue立てるか迷って纏まりがないのでここにメモります。

 

dlshogiに関しては比較的初期から山岡さんに直接連絡を取ったり本家プルリクを送ったりしてましたが,AobaZeroは実験中とのことで邪魔をしないようにここで更新記録を残しておりました。我ながら割と扱いが違う感があります。

 

ここでdlshogi検索すると何となく分かるかもしれません。

bleu48.hatenablog.com

 

また,dlshogiは大きく3バージョンあります。選手権などに出られているC++で対戦しているもの,書籍で解説されているpython-shogiを用いてPythonで書かれているもの,同人誌で解説されているBoost-Pythonにより高速化されたcshogiを利用したものです。

 

まずひとつ。

不老で遊んでみた - 48's diary

先日不老で遊んでみた際に気づいた点です。実際に動かしたのは別のマシンでしたが4GPUの学習で4倍の高速化に及ばない点についてです。ハッカソンのチューターのコメントでCPU負荷が上限に達している場合GPU利用率が上がらないとのことでした。

既に手元で相当改造したコードですので本家と直接対応するかどうか不明ですが

具体的には hcpe_decode_with_value の部分が並列化されていないのでNNに食わせる配列準備が遅いんだろうと推察しています。暇があれば分散並列を視野に入れてとりあえずのローカル並列化でもしてみようかと考えておりました。

 

もうひとつ。

情報学広場:情報処理学会電子図書館

今日のGPWで発表があった件についてです。こちらは書籍版のdlshogiですが,上記と同様にNNに食わせる配列の生成を高速化しています。こちらの高速化は具体的には配列の準備に差分情報を用いて動かす駒のレイヤーのみ更新しているとのことでした。

確かにうまくいくと1~3配列の更新のみにとどまります。また,バッチ処理中の局面でしたら配列がメモリ上に存在しますので差分生成は相当容易と思われます。

 

dlshogiは使用スレッド数が少なく管理の見通しが良いのですがCPUがボトルネックになっている部分が見受けられますので上記の点を改善すると効果がありそうだなぁっと言った感じです。

また,前者が学習時,後者が探索時なのですが類似の手法でいけそうに思います。

 

やはり本家打診はちょっと自力で手を入れてからですね。(つらつらと書き連ねながら自問自答)