-
Notifications
You must be signed in to change notification settings - Fork 120
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
新クラス設計API #370
新クラス設計API #370
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
とりあえず実際のコード見たほうがイメージ付きやすいかと思ったのでつくりました
全体的にちょっと長めの命名にしてます
crates/voicevox_core/src/publish.rs
Outdated
pub struct Device {} | ||
|
||
/// スピーカーId,スタイルIdから音声合成モデルIdを取得する | ||
pub fn get_model_id(speaker_id: &SpeakerId, style_id: &StyleId) -> Result<SpeechSynthesisModelId> {} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
これ便利そうですね!
たぶんModelを作成して初めてglobalメモリ上にmetasのデータが乗って、そこからmodel_idを引っ張ってくる形ですよね。
となると、Model.from_id
とこっちのどっちが先なのかみたいな問題が出てきそうだなと思いました!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
いや違います。これはビルトインのmodelを読み込む際にユーザーがmodel idを知るすべがないのでとりあえず作ったものですね
なのでmodel作成前に呼ばれることを想定しており、modelがビルトインじゃなくなったらこの関数は消そうかと思ってます
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
あーなるほどです!であれば問題はなさそうです。
(まあビルトインのモデルはunloadする方法はなくても良い派なので、この関数は最初からなしでも良いかも!)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
仮にビルトインのmodelはunload提供しなかったとしても全loadせずに個別にビルトインのmodelを読み込みたい場合に必要ではないでしょうか?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
それは必要だと思います!VVM対応したら自動的にその需要は満たせるかなと。
つまり(ちょっと話が進んじゃうのですが)こういうのを考えてます。
ビルトインも2種類あると思います。
1つが今のCOREみたくVVMがなく勝手にloadされてるパターンですが、こちらはunloadもloadも提供しなくて良いかなと。
もう1つが製品版のVVMファイルを全部loadされてるパターンで、これは「勝手にloadしない」ようにできる制御フラグを付けつつ、あとはVVMをload/unloadしてもらえればみたいな感じでいます。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
VVMも全部入ってるものの提供を考えてました!
まあ個別にするかは置いといて、同ディレクトリにあるvvmファイルを全部読み込むかどうか、みたいなオプションになるんじゃないかなーと思っています。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
それか今と同じでmodelsディレクトリ配下にあるVVMファイルを読み込むとかですかね。
しかしそうなるとファイルパス指定のAPIの価値があまりなくなってしまいますね
個別に読み込む際に使えそうですが、ユーザーがどのVVMを読み込めば目的のスピーカーを使うことができるか知る手段を提供するつもりでいますか?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
目的のスピーカーというよりかは目的のスタイルですかね
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
modelsディレクトリでも良いと思います!(そっちのほうが良さそう)
知る手段
重要なことですが、良い方法が思いつかないですね・・・・・。
全metas.jsonを書き下したREADME.mdを作るとか・・・・・・。
せめて検討がつくよう、わかりやすいファイル名にしてあげたいですね・・・。
そうなるとファイルパス指定のAPIの価値があまりなくなってしまいますね
現ニーズは現APIなので、この視点だとパス指定周りとかは価値が薄いとは思います。
でもまあVVMを抜き差しできれば、例えば差分アップデートなど別の仕様も思いつけると思います!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
get_model_idについては削除
今議論されているものについてAPIを最新に変更しました |
議論ありがとうございました!! |
そうですね。そこ決まったらとりあえずの仮実装はできそうです |
Rust化したときにはC APIしかなかったから同期処理だけにしてたけど、Python,将来的にはRustも公開することを考えるとRust実装とPython実装の部分についてはasync化できるところ(VVMファイルをオープンする処理とか)はasync化したほうがよいかも? 🤔 @Hiroshiba @qryxip 意見聞かせてもらえますか? |
良い設計がまだ浮かんで無いですが、面白いと思います! |
RustのasyncはPythonのasyncに変換できたりしますし、そこからブロッキングなAPIに派生させることも普通にできるため、ありかとは思います。 |
APIを一度公開してしまうとあとから変えるのは難しいくtryするならいましかなさそうなのでやってみます。 |
たしかにAPI変更に関してはおっしゃる通りかもです。 |
onnxruntimeもそうですが、openjtalkも同時に実行すると壊れてしまうので今と同じように全体的にロックをかける必要はありそうですね |
そこはまあ |
そもそもEnvironmentについてはnew_session_builderでimmutable参照されてるだけなのでどちらにしろ不要かも |
そこはまあ、今(多分時間差で)↑のコメントをeditしましたがonce_cellに置いたままでもよいので、使いまわせるなら使いまわした方がいいんじゃないでしょうか。 |
db09d19
to
b3a8165
Compare
@Hiroshiba engine互換APIためにstyle_idとvvmとは別にstyle_idとvvmファイルのパスの対応情報をまとめたファイル |
( ちょっと記憶が曖昧で変なことを言っちゃうかもしれません・・・。) 先に後者のこちらから
これに関してはmetaファイルを用意しなくても、全VVMをloadしたSynthesizerのmetasを使えば良いのかなと思ってました・・・が、全modelをloadするので重そうですね・・・。 ファイルを用意しなくても、全VVMから全Modelを作って全Modelのmetasを集約する手もありそう・・・?
あーーー。これは必要になったstyle_idのModelだけloadするため、ですよね。 Modelを参照するだけのset関数と、style_idを指定して実際に読み込むload関数をSynthesizerに持たせるのはどうでしょうか。。 |
可能ですが互換性守るならmetasはdll読み込み時にすでに用意できてる必要があるのでdll読み込みが相当遅くなります
前のやり取りだと新APIは読み込んでいるmetasのみ返す仕様にするとのことだったのですが常に全てのmetasを返すようにするということでしょうか? |
ちょっと対応できそうかもなのでやってみます |
あ、違います! 狙いは2つあって、1つ目の理由が読み込まなくてもmetasが分かるようにするためです。 もう1つの狙いは↓の解消です。
|
公開APIとしてはload_model関数のみにしたほうが良いと思います。
これはVoiceModelでmetasを確認できるので不要では
これはunloadの振る舞いが不自然になる問題があるので解消しきれないと思います |
@Hiroshiba 過去のやり取りでもunloadとの整合性が取れなくなる点について言及されてますね |
あああ・・・・・・。すみません、これ失念していました・・・。 うーん。unloadややこしい問題があるのでsetとloadに分けるのは難しいかなと思いました! |
a83538b
to
c3a0a76
Compare
コンフリクトを解消しました。マージ可能です。 つきましてはこのタスクリストに追加で入れるべき内容が無いかだけ、どなたかに見てもらえたらと思っています。 |
@qryxip ざっと見た感じ問題ないのかなと思いました!! |
いったんマージさせていただきます! |
VOICEVOX#370 (comment) Co-authored-by: Hiroshiba <[email protected]>
関連 Issue
refs #280,#280 (comment)