Open sigprogramming opened 5 months ago
issue作成ありがとうございます! 補足説明と個人的な感想をコメントしてみます。
cpu_num_threads
の数ですが、スレッド数の半分ぐらいを超えるとパフォーマンスはそこまで上がらなかったという実験結果があります。
https://github.com/VOICEVOX/voicevox_engine/issues/291#issuecomment-1019399723
たぶんエンジンは大体の環境でいい感じに動作してくれるデフォルト値を設定した方が良さそうに思います。 ただコアはデフォルト値をどうするべきかはちょっと迷います。 onnxruntimeのデフォルト値の「物理コア数」にするのは意図がはっきりしないので真似する必要はない気がします。 じゃあ論理コア数にするのか、論理コアの半分にするべきなのかは分からないです。
個人的にはスマホとかだと100%使われると結構いまいちそうなので、コアでもまあ論理コアの半分にしといていいんじゃないかなとちょっと思ってます。 あるいはまあ4分の3とか。
とりあえずメモとしてですが、Rustの標準ライブラリにはstd::thread::available_parallelism
という面白いものがあります。通常は論理コアの数を返すみたいです。
(例えばrayonは以前論理コア数を使っていましたが、今はavailable_parallelism
を使うようになっています)。
まあ説明が難しいし、「論理コアの数の半分」がシンプルだとは思います。
なるほどです!!
ノートPC勢とかは画面が固まっちゃうので、できれば実装してあげたい気持ちがあります。 ただまぁエンジンには必須な機能だけど、コアはちょっと優先度下がるかも。 とはいえいい感じのプロダクトを作るためにこのパラメータを変えないとなのは気づきにくそうなので、デフォルトでいい感じに動いた方がやっぱり良さそう…かなぁ。
内容
現在、
cpu_num_threads
の値はonnxruntimeのintra_op_num_threads
に渡されるようになっていますが、0が渡された場合にINTRAスレッドの合計=物理コアの数になるため、「cpu_num_threads
が未指定または0」かつ「論理コア数=物理コア数のCPU」の場合にすべてのコアが使用されます。すべてのコアが使用されると他のアプリケーションやOSの動作に影響が出る(重くなる)のと、コメントやエンジンのREADMEでは「論理コア数の半分」という表記があるので、「
cpu_num_threads
が未指定または0」の場合は論理コア数の半分が使用されるようにするのが良さそうです。Pros 良くなる点
Cons 悪くなる点
実現方法
論理コア数はnum_cpusで取得できそう?
その他