Conversation
|
今この実装を自分で見直しているのですが、思い付くまま書き殴った設計そのままなので、その意味でも #552 ベースで書き直した方が良いかもと思ってしまいました。 (追記) 「余計な情報を持たないようにする」という方針は心掛けていて、それは体現できていると思うので、コンセプトについてはそのままにしたいと思います。 |
Hiroshiba
left a comment
There was a problem hiding this comment.
実装読みました!
コンセプトとしては、Inference Coreには一旦手を加えず、Statusをデータ周りと推論周りで二層構造にする形かなと感じました!
そういう目的であるということが分かりやすい構造体名になっていると嬉しそう?
あとInference CoreからStatusの関数を2回以上叩いている関数がちょくちょくあって、これもMutexにしとかないといけないはず。status.validate_speaker_idとか。
まあこっちをMutexにするのは面倒なので、Inference Coreからstatusを2回呼ぶような設計にしなければ一旦大丈夫かなと思いました!
|
こちらのブルリクエストのデータ構造みたいなのを書き下してみました!! flowchart LR
276662["session.run"] --o 672471(["Onnx Session (Mutex)"])
115090["Inference Core"] --o 605462["Status"]
939501["Syntthesis Engine"] --o 115090
132055["Synthesizer"] --o 939501
939501 --o 707071(["OpenJTalk"])
515265["metas"] --o 909525["metas"]
605462 --o 326867["Loaded Models (Mutex)"]
909525 --o 343936["metas"]
343936 --o 628672["metas"]
999221["predict"] --o 635888["predict"]
635888 --o 276662
927541["synthesis"] --o 394870["synthesis"]
394870 --o 635888
699899["load_voice_model"] --o 209723["load_model"]
209723 --o 367614["load_model"]
367614 --o 629577["insert"]
678674(["metas"]) --> 684359(["metas"])
367614 --o 920120["Voice Model"]
163279(["Onnx Model"]) --> 672471
subgraph 115090["Inference Core"]
909525
635888
209723
end
subgraph 132055["Synthesizer"]
515265
999221
927541
699899
end
subgraph 326867["Loaded Models (Mutex)"]
628672 --o 684359
629577 --o 174035["Loaded Model"]
subgraph 174035["Loaded Model"]
684359
672471
end
end
subgraph 605462["Status"]
276662
343936
367614
end
subgraph 920120["Voice Model"]
163279
678674
end
subgraph 939501["Syntthesis Engine"]
394870
end
|
|
|
|
このPRの
ですが、結構小刻みで包むことになってしまいますね。 |
|
|
コンフリクト解消が適当だったので同じ宣言が二つできていてwarningが出てい た。
|
Hiroshiba
left a comment
There was a problem hiding this comment.
ほぼLGTMです!!
コメントしたところだけ変更もしくは再コメントいただけると!!!
これはこのプルリクエストで追加する必要はなく、ちょっとしたコメントなのですが、
Async/Mutexに関して、望んだ実装になっているかどうか(例えば同じモデルの同じセッションは同時に実行できないとか)をテストできると嬉しいのかなと思いました!
ソースコードから判断しようとすると間違えそうなので・・・。
| pub fn predict_duration_session_run( | ||
| /// # Panics | ||
| /// | ||
| /// `self`が`model_id`を含んでいないとき、パニックする。 |
There was a problem hiding this comment.
(判断メモです)
パニックになってしまうのは結構きつい制約かなと思ったのですが、ユーザーがmodel_idを直接指定して実行する機会がないのでパニックで良さそうな気がしました!
| .flat_map(SpeakerMeta::styles) | ||
| .any(|style| *style.id() == style_id) | ||
| }) | ||
| .ok_or(Error::InvalidStyleId { style_id })?; |
There was a problem hiding this comment.
多分このプルリクエストの範囲じゃないと思うんですが、InvalidStyleIdというよりはNonExistStyleIdかもと思いました。
|
|
あとエラーの形が調整完了すればマージかなと! |
Hiroshiba
left a comment
There was a problem hiding this comment.
LGTM!!!
Async系のテストがあるとかっこよさそうですが、コンパイル言語だとモックとかも難しそうだから相当難しそう。
|
問題ないと思うのでマージします! あ、以前描いたmarmaid、共有します。よかったらどうぞ 🙏 Detailsflowchart LR
276662["session.run"] --o 672471(["Onnx Session (Mutex)"])
115090["Inference Core"] --o 605462["Status"]
939501["Syntthesis Engine"] --o 115090
132055["Synthesizer"] --o 939501
939501 --o 707071(["OpenJTalk"])
515265["metas"] --o 909525["metas"]
605462 --o 326867["Loaded Models (Mutex)"]
909525 --o 343936["metas"]
343936 --o 628672["metas"]
999221["predict"] --o 635888["predict"]
635888 --o 276662
927541["synthesis"] --o 394870["synthesis"]
394870 --o 635888
699899["load_voice_model"] --o 209723["load_model"]
209723 --o 367614["load_model"]
367614 --o 629577["insert"]
678674(["metas"]) --> 684359(["metas"])
367614 --o 920120["Voice Model"]
163279(["Onnx Model"]) --> 672471
subgraph 115090["Inference Core"]
909525
635888
209723
end
subgraph 132055["Synthesizer"]
515265
999221
927541
699899
end
subgraph 326867["Loaded Models (Mutex)"]
628672 --o 684359
629577 --o 174035["Loaded Model"]
subgraph 174035["Loaded Model"]
684359
672471
end
end
subgraph 605462["Status"]
276662
343936
367614
end
subgraph 920120["Voice Model"]
163279
678674
end
subgraph 939501["Syntthesis Engine"]
394870
end |
内容
関連 Issue
Resolves #552.
ref #545
その他
decodeの並列実行機能(gpu_num_sessionsオプション)を剥がすtokio::task::spawn_blockingで包む