昨日の記事で、AlphaZeroがどれくらいの強さなのかざっくり試算したのですが、ざっくりすぎてかなりいい加減だったので、LC0(LeelaChessZero)のbenchmarkを元に、正確に計算しなおします。
AlphaZeroがTPUv1×4でR4500相当。ニューラルネットワークはResNet 20ブロックでチャネル数は公開されていませんが、npsは、80k(80,000)だそうです。(※)
※ https://arxiv.org/pdf/1712.01815.pdf
一方、LC0のBenchmarks(※)によると、(CPU側の)スレッド数により多少変動はあるものの、ResNet 20ブロック×256ch構成において、以下のようになっていました。
・GTX 1080Ti : 9knps
・RTX 2080 : 26.1knps
・TITAN V : 31knps
・RTX 2080Ti : 37.5k-42.9kknps
・RTX TITAN : 46.4-53.8knps
・2x RTX TITAN : 78.4knps
・4x TITAN V100 : 78.7knps
※ https://github.com/LeelaChessZero/lc0/wiki/Benchmarks
この表を見ると、RTX 2080Ti、存外に(ResNetに使うのには)コスパ凄くいいんだなと。
TPUv1はTITAN V相当だとAlphaZeroの論文のほうに書いてあるので、上の表でTITAN Vが31knps、これを4倍すると124knps。実際にはオーバーヘッドがあるので、まあ、80knpsぐらいに落ちてもおかしくはなくて、結局のところ、AlphaZeroもResNetのチャネル数は256だと推測されます。(追記:AlphaZeroの正式な論文のほうには、256 filtersと書かれているようで、256で間違いなさそうです。)
ということは、上の表がそのまま適用できて、RTX 2080Ti(20万円ぐらい)が2基で、AlphaZero相当。(R4500) わりとお安くR4500の強さで対局できることがわかりました。
次に学習に使う教師棋譜を生成するコストを計算します。
AlphaZeroが教師棋譜の生成に費やしたのは、5,000 x TPUv1とされています。学習は2時間と書いてありますが、教師生成の時間は書いていません。教師を作りながらの強化学習なので、教師生成も同じ時間(2時間×5,000TPUv1)だと思うのですが、だとすると、上のベンチマーク結果からすると、RTX 2080Ti×1万時間ぐらいで同等だと思われます。
WCSC28で『PAL』の山口さんが「(グラボ、最新のものではないものの)1ダースぐらいあります」とおっしゃっていましたが、まあ、個人でも1ダースぐらい用意できるでしょうから、2080Ti×12基でやるとすると833時間。34.7日あれば終わる計算になります。
1ダース用意するのが難しいなら、4基程度であっても、この3倍で済むので3ヶ月程度でAlphaZeroレベルに到達できることになります。(試行錯誤する時間やネットワーク構成・パラメーター等を調整して学習をやりなおす時間などは一切含まれていませんが…。)
まあ…機を見て私も挑戦してみたいと思っています。
例によって計算が間違っていたら、コメント欄などで教えてください。
追記 2019/1/19 16:30
上で書いた「2時間」というのは、AlphaZeroがelmoと同じぐらいの強さになるまでに要した時間で、学習完了までは12時間のようです。つまりは、上で書いた6倍の時間が…。
メモリアクセスのボトルネックは致命的なレベルなのか気になる
Deep Learning目的であれば、基本的には行列の演算みたいなことばかりするので、メモリに対しては連続的なアクセスが多くて、メモリのlatencyよりはthroughputのほうが問題になるのではないでしょうか。throughputはたぶんそこまで遅くはないような?
学習フェーズだと基本的に行列行列積に帰着できるので、それなりのメモリ帯域があるなら、適切にプログラムを書けば、メモリ帯域よりも演算がボトルネックになるはずです。
もっとも行列行列積アクセラレーターであるTensor Coreがあるので、メモリ帯域が足りるかは微妙ですが…