AWSのp3.8xlargeインスタンスを試験的に借りてGPUを増やした場合の性能を測定しました。
Linuxだとマルチスレッドの性能がでないので、OSはWindowsです。
p3.8xlargeのマシンスペックは以下の通りです。
Tesla V100 GPUs | 4 |
---|---|
vCPUs | 32 |
Main Memory | 244GiB |
各GPUに割り当てる探索スレッド255として、GPUを増やしながら平手初期局面での探索速度(シミュレーション/秒)を測定しました。
GPU枚数 | 探索速度(シミュレーション/秒) |
---|---|
1 | 6344 |
2 | 7545 |
3 | 7757 |
4 | 8168 |
GPUを増やすほど、探索速度が上がっていますが線形には伸びていません。
スレッド数
GPU4枚で、GPUあたりの探索スレッドを変えて測定しました。
スレッド数 | 探索速度(シミュレーション/秒) |
---|---|
255 | 8168 |
192 | 8790 |
168 | 8923 |
128 | 8179 |
スレッド数が168のときに最大となりました。
スレッド数を変えてGPU枚数変更
スレッド数を168として、GPU枚数を変更しました。
GPU枚数 | 探索速度(シミュレーション/秒) |
---|---|
1 | 5839 |
2 | 9696 |
3 | 8921 |
4 | 8923 |
GPU2枚が最大となりました。
GPU2枚でスレッド数を変更
GPU2枚でスレッド数を変えて測定しました。
スレッド数 | 探索速度(シミュレーション/秒) |
---|---|
255 | 7545 |
192 | 9118 |
168 | 9696 |
128 | 7263 |
スレッド数168のときが最大となりました。
考察
GPU枚数とスレッド数を単純に増やしても探索速度は上がりませんでした。
GPU枚数とスレッド数のバランスが取れている時が探索速度が最大となっています。
スケーラビリティが頭打ちになった原因は、スレッド間でノード情報を共有するツリー並列化を行っているため、スレッド数が増えるほど競合が発生するため、効率が悪くなったためと推測できます。
ツリー並列化の方式では、GPUは2枚以上にしても探索速度の向上は期待できそうにないことがわかりました。
スケーラビリティを上げるには、マルチプロセスまたはマルチノードでルート並列化を行う必要がありそうです。
なお、AWSではなく2枚のGPU(Titan Vと1080Ti)にCore i9 10コアのPCだと、GPUあたりの探索スレッド数255で、10779シミュレーション/秒の速度がでています。
5月の大会はGPU2枚のPCでの参加の方向になりそうです。
将来的には、マルチノード構成を検討することにします(5月の大会には間に合いそうにない)。