Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

cpu_num_threadsが未指定または0の場合に、論理コア数の半分が使用されるようにする #756

Open
sigprogramming opened this issue Feb 27, 2024 · 3 comments

Comments

@sigprogramming
Copy link

sigprogramming commented Feb 27, 2024

内容

現在、cpu_num_threadsの値はonnxruntimeのintra_op_num_threadsに渡されるようになっていますが、0が渡された場合にINTRAスレッドの合計=物理コアの数になるため、「cpu_num_threadsが未指定または0」かつ「論理コア数=物理コア数のCPU」の場合にすべてのコアが使用されます。

すべてのコアが使用されると他のアプリケーションやOSの動作に影響が出る(重くなる)のと、コメントやエンジンのREADMEでは「論理コア数の半分」という表記があるので、「cpu_num_threadsが未指定または0」の場合は論理コア数の半分が使用されるようにするのが良さそうです。

Pros 良くなる点

  • 一部のCPU(論理コア数=物理コア数のCPU)で動作が軽くなる

Cons 悪くなる点

  • 仕様が変わる

実現方法

論理コア数はnum_cpusで取得できそう?

その他

@Hiroshiba
Copy link
Member

Hiroshiba commented Feb 28, 2024

issue作成ありがとうございます!
補足説明と個人的な感想をコメントしてみます。

cpu_num_threadsの数ですが、スレッド数の半分ぐらいを超えるとパフォーマンスはそこまで上がらなかったという実験結果があります。
VOICEVOX/voicevox_engine#291 (comment)

たぶんエンジンは大体の環境でいい感じに動作してくれるデフォルト値を設定した方が良さそうに思います。
ただコアはデフォルト値をどうするべきかはちょっと迷います。
onnxruntimeのデフォルト値の「物理コア数」にするのは意図がはっきりしないので真似する必要はない気がします。
じゃあ論理コア数にするのか、論理コアの半分にするべきなのかは分からないです。

個人的にはスマホとかだと100%使われると結構いまいちそうなので、コアでもまあ論理コアの半分にしといていいんじゃないかなとちょっと思ってます。
あるいはまあ4分の3とか。

@qryxip
Copy link
Member

qryxip commented Mar 2, 2024

とりあえずメモとしてですが、Rustの標準ライブラリにはstd::thread::available_parallelismという面白いものがあります。通常は論理コアの数を返すみたいです。
(例えばrayonは以前論理コア数を使っていましたが、今はavailable_parallelismを使うようになっています)。

まあ説明が難しいし、「論理コアの数の半分」がシンプルだとは思います。

@Hiroshiba
Copy link
Member

Hiroshiba commented Mar 3, 2024

なるほどです!!

ノートPC勢とかは画面が固まっちゃうので、できれば実装してあげたい気持ちがあります。
ただまぁエンジンには必須な機能だけど、コアはちょっと優先度下がるかも。
とはいえいい感じのプロダクトを作るためにこのパラメータを変えないとなのは気づきにくそうなので、デフォルトでいい感じに動いた方がやっぱり良さそう…かなぁ。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants