TadaoYamaokaの開発日記

個人開発しているスマホアプリや将棋AIの開発ネタを中心に書いていきます。

Unity Barracudaでdlshogiのモデルを推論する その4(探索)

前回Androidでのモデルの推論速度を調べた。
今回は、MCTSで探索を行った際の探索速度を調べた。

前回、推論をバッチにしても同じデータ数を処理する時間がほとんど変わらないことが分かったため、MCTSの探索もバッチで並列化を行わないように実装した。
また、Andoroidではプレイアウト数は増やせないため、並列化するとVirtual Lossの影響が大きく精度が低くなるため、速度が変わらない場合、並列化はデメリットしかない。

測定コードの実装

C#MCTSの探索処理を実装して、初期局面で64プレイアウト行った際の時間を測定した。
モデルサイズ 5ブロック96フィルタのモデルを使用した。

    void Test4()
    {
        var sw = new System.Diagnostics.Stopwatch();

        var pos = new Position(Position.DefaultStartPositionSFEN);
        var searcher = new UctSearcher(64, modelAsset);

        sw.Start();
        Move move = searcher.Search(pos, pos.GetKey(), new Move[0]);
        sw.Stop();

        Debug.Log(move.ToUSI());
        text1.text = sw.ElapsedMilliseconds.ToString() + "\n" + move.ToUSI();

        searcher.Dispose();
    }

結果

Pixel5で、GPUおよびCPUで実行した場合の処理時間は以下の通りであった。

GPU/CPU 処理時間(ms)
GPUで実行(WorkerFactory.Type.Compute) 3918
CPUで実行(WorkerFactory.Type.CSharpBurst) 1373

前回調査したとおり、CPUの方が速くなっている。

64プレイアウトで、1手、1.4秒くらいで探索できることがわかった。

64プレイアウトの強さは、dlshogiの最新モデル(15ブロック224フィルタ)では、floodgateでR2971である。
5ブロック96フィルタでは、それよりも弱くなると思われる。

1手あたりの時間を増やせば強くできる。
ぴよ将棋のLV40だと1手10秒近く使っているので、同じくらい使えばスマホでも相当強くなりそうである。
dlshogiの最新モデルの512プレイアウトだと、floodgateでR3288である。

まとめ

AndoroidでMCTSで探索を行った場合の、処理時間を調べた。
バッチ並列化なしで、CPUで実行した場合、64プレイアウトで、初期局面で約1.4秒ということが分かった。

5ブロック96フィルタのモデルのため、dlshogiの教師データを使って十分に学習した場合にどれくらいの強さになるか別途確認したい。
また、モバイルに最適化されたMobileNetなどのモデルで、探索速度と精度がどうなるかも確認してみたい。