-
Notifications
You must be signed in to change notification settings - Fork 118
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
推論をキャンセル可能にする #687
Comments
なるほどです、キャンセル可能にするの面白そうですね!!
素人なのであれなんですが、頭の中でどうやってこれで実行中の処理をキャンセルできるのかが分かりませんでした・・・!! |
このオプションは前からあるみたいなので、1.16にしなくても今のonnxruntime-rsをちょっと弄れば実装できる気がします。ただCORE 0.15では |
なるほどです!!Rustの中でのイメージは結構わかった気がします。 |
なんかortに |
同期版にキャンセル機構を入れるかどうかですが、個人的にはしなくていいのではないかと今は思っています。キャンセル機構が要るような人は非同期版を使うでしょうし、ENGINE以降にキャンセル機能を追加するときはもうPyO3版でvoicevox_core_compatible_engine.pydみたいなのを作ってそれをコアとして取り扱った方がいいのでは?と思います。 |
PyO3版はエンジンで使うときに過去のコアを使えない問題が・・・ そもそもエンジンはcompatible_engine以外用いるモチベがなかった(どころか最新APIに対応するとコストが2倍になる)のですが、推論キャンセルほどの有用機能がC APIで使えないとなるとかなり話は変わってくるように感じました。 (コンテキストが深い内容なのですが、エンジンでできることがだいぶ将来に増えるかもなので共有です @y-chan @tarepan ) |
@tarepan 文脈を補足しておくと、 VOICEVOX COREはPyO3によるPython APIを提供しており、pyo3-asyncioによりRustの あとpyo3-asyncioはRustの まあC APIでも頑張れば非同期的な表現はできなくはないと思います。その場合はcompatible_engine(CORE)側とvoicevox_engine/core側の両方で手間がかかりそうな気はしますが。
既にonnxで提供されているものは最新のONNX Runtimeでなんとかなるとして、tch-rsの導入も検討した方がよいですかね? |
あ、あとPython側からはパッケージのインストールの他にも |
@Hiroshiba @qryxip |
#831 で残した次のTODOのうち、`Synthesizer`についてだけ解決する。 ````rs // TODO: `VoiceModelFile`のように、次のような設計にする。 // // ``` // pub(crate) mod blocking { // pub struct Synthesizer(Inner<SingleTasked>); // // … // } // pub(crate) mod nonblocking { // pub struct Synthesizer(Inner<BlockingThreadPool>); // // … // } // ``` ```` 目的としては、 #687 のようなことを行うのを円滑にするため。 もしかしたらパフォーマンスには影響が出ているかもしれないが、そこまで大き なものではないはず。 Refs: #831, #687
(cherry picked from commit 2db63f4) Refs: VOICEVOX/voicevox_core#687 Co-authored-by: Carson M. <[email protected]>
もしかして、ort側がv2になると開発しやすくなる感じでしょうか? 推論キャンセル機能は、現在需要が高い他の機能(VVM・voicevox onnxruntime・ソングAPI・streaming生成など)があるので、優先度だけで見ると結構後回しにできるかもです。 |
内容
asyncなタスクに一般的に期待される機能の一つとして、キャンセル可能であるというのがあると思います。しかし現状の実装では、ONNX Runtimeの推論はasyncの文脈でキャンセルすることができません。何故ならスレッドは外から停止できないからです。ここでONNX Runtimeの
RunOptions::SetTerminate
によって、推論のキャンセルを可能することを提案します。terminate
というプロパティですが、次のように説明されています。(C API)
(Python API)
意味を掴みかねていたのですが、コードを見ると
bool terminate
をconst bool&
で引き回してそれをチェックし続けていました。試してはいないのですが、あるRunOptions
で推論を開始したあと、そのRunOptions
のterminate
をtrue
にセットすると、"Exiting due to terminate flag being set to true."
というメッセージと共に推論が止まってくれるということだと予想しています。https://github.com/microsoft/onnxruntime/blob/v1.16.2/onnxruntime/core/framework/stream_execution_context.cc#L211-L216
APIとしては次のような形がよいのかなと思っています。
同期/非同期APIにおいて、Synthesizer
の各操作はclass SynthesisTask
を返すようにする。SynthesisTask
は.wait()
で続行、.cancel()
でキャンセルする。Synthesizer
の各メソッドに推論キャンセルのためのオプションを一つ追加する。例えば#[repr(C)] struct VoicevoxInferenceCanceller
。(追記) 直にbool
でもいけるかもしれないPros 良くなる点
Cons 悪くなる点
実現方法
VOICEVOXのバージョン
N/A
OSの種類/ディストリ/バージョン
その他
TFLiteにもキャンセル機構があるようです。
The text was updated successfully, but these errors were encountered: