-
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
feat!: liberate VOICEVOX CORE #825
base: main
Are you sure you want to change the base?
Conversation
"type": "vv-bin", |
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.
draft状態ですけどちょっと見させていただきました!
コードは良さそう!!
製品版周りの扱いに関して相談があります!
VOICEVOXエンジンやエディタは、OSSリポジトリのreleasesで製品版をリリースしています。
コアも同じ感じにしていたのですが、このプルリクエストでis_production
フラグが消えて、一部製品版ではないものをビルドする方に倒されてるかもと感じました!
そのため製品版のonnxruntimeであるvoicevox_onnxruntime
を使っているけど、READMEは製品版のものに変えず、製品版のVVMのサポートが外れ、代わりにOSSサンプルのVVMがビルドされる形になっていそうです。
is_producrion
フラグを消すのは賛成で、更に全部製品版に寄せるのが手っ取り早い気がしました。
この辺りは考え方いろいろあると思います!
とりあえずエンジンとエディターに合わせる感じとかどうかなと思い、その前提でちょっと色々コメントしてみました。
ASSET_NAME: model-${{ needs.config.outputs.version }} | ||
ASSET_NAME: sample-model-${{ needs.config.outputs.version }} | ||
steps: | ||
- uses: actions/checkout@v4 | ||
- name: Checkout VOICEVOX FAT RESOURCE | ||
if: inputs.is_production | ||
uses: actions/checkout@v4 | ||
with: | ||
repository: VOICEVOX/voicevox_fat_resource | ||
ref: ${{ env.VOICEVOX_FAT_RESOURCE_VERSION }} | ||
path: download/fat_resource | ||
- name: Raplace resource | ||
if: inputs.is_production | ||
shell: bash | ||
run: | ||
rm -r ./model; mv download/fat_resource/core/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.
この変更によってダウンローダーが製品版のVVMをダウンロードできなくなるので、最新版のmainブランチを見て製品版の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.
#825 (comment)と重複しますが、このPRでダウンローダから直接voicevox_fat_resouceのファイルをダウンロードするようにすることを考えています。どうでしょうか?
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.
今の範囲でレビューしちゃったので、可能なら分けていただけると助かる思いはあります!
他にも理由は2つほどありそうでした。
- このPRは製品版コアのパッチ取得を辞めることが主目的だと思うので、VVMダウンロード方法とは独立してる
- fat_resourceの運用が定まっておらず、あとからどうせコア側の変更が必要になるかもしれない(fat_resourceのバージョン管理とか)
まあでもどうしてもそうしてほしいというレベルじゃないです。must/should/want/canのshouldから少しwant寄りくらい!
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.
わかりました。このPRでダウンローダは手を付けないことにします。
pub(crate) enum ModelBytes { | ||
Onnx(Vec<u8>), | ||
VvBin(Vec<u8>), | ||
} |
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.
(判断メモ)
enumで2つの種類のバイナリを想定するのではなく、別途typeを持っておく手もあると思うのですが、今のこの方法で問題ないと思いました!
こっちの方が管理しやすそうですし、いろんなところで型を判定しまくることもなさそうですし、フォークする場合はこのVvBin側を変えれば良いし!
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.
こうしている理由としてはどちらかというと、「Onnx
のVec<u8>
」と「VvBin
のVec<u8>
」が別個の役割を持っているからですね。TSだとしても{ type: "Onnx"; onnx: Uint8Array } | { type: "VvBin"; vvBin: Uint8Array; }
にする…のはちょっと冗長かもしれませんが、Rustの直和型ならこれが綺麗かなと思った次第です。
ただmanifest.jsonの方のこっちはどうしましょうかね… こっちはJSONの{ "type": "onnx", "filename": "decode.onnx" }
を表しますし、VVMのZIPからの読み込み時のこともあってtype
を分離させるメリットがあるんですよね…
(追記) もし分離させるんだったらRust的な観点からはtype
じゃなくてkind
とでもしたいんですが、manifest.jsonに書く内容としては、うーん
#[derive(Deserialize, Clone)]
#[serde(tag = "type", rename_all = "kebab-case")]
pub(crate) enum ModelFile {
Onnx { filename: String },
VvBin { filename: String },
}
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.
あ、manifest.jsonは現状PRのModelFile
のままtype
とfilename
のキーをもたせるのが良さそうだと感じました!
(しっかりわかってないのでなにか変なこと言ってるかも)
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.
#830 をマージしたときに若干つらみが出てきてしまったので、こうしてしまいました。
#[derive(Deserialize, Clone)]
pub(crate) struct ModelFile {
pub(crate) r#type: ModelFileType,
pub(crate) filename: Arc<str>,
}
#[derive(Deserialize, Clone, Copy)]
#[serde(rename_all = "snake_case")]
pub(crate) enum ModelFileType {
Onnx,
VvBin,
}
.or_else(|err| { | ||
warn!("{err}"); | ||
warn!("falling back to `{alt_onnxruntime_filename}`"); | ||
voicevox_core::blocking::Onnxruntime::load_once() | ||
.filename(alt_onnxruntime_filename) | ||
.exec() | ||
}) |
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.
(ただのコメントです)
ここのフォールバックは将来必要なくなるかもですね!
まあまだ色々わからないけど。
|
voicevox_onnxruntime自体の用意ができていませんが、多分時間がかかりそうであることを考えるとこのPRはさっさとマージした方がよいですかね? |
@qryxip ちょっと迷いどころですが、 @qryxip さんの都合に合わせてマージしてもいいと思います! というのも、多分このプルリクエストをマージすると、製品版をビルドしてもVVMがロードできなくなるんですよね~~ ただこのプルリクエストがマージされていないと進められないタスクもあると思うので、マージするのに反対ではないです。 まあもしmainブランチで製品版ビルドしたものが動かない状態が微妙というところでしたら、一旦projectブランチを作ってそちらにマージするとかはありかもです。 ということで、ちょっと問題は生じそうです+とはいえ進めやすい方法でいいと思います、って感じです! |
そうですね… このPRによってブロックされるというタスクは多分そんなに無い気がするので、draftのままでいいのかなと思ってます。ダウンローダーもVVMについては別で進められるかと。 (projectブランチも作らなくていいのではと思ってます。結局コンフリクト解消の手間をいつ取るのかという話になりそう。) |
内容
manifest.jsonの"…_filename"部分を変更し、.binを認識できるようにします。.binの場合、change: liberate VOICEVOX CORE ort#8で追加される
SessionBuilder::commit_from_vv_bin
を用います。Onnxruntime::LIB_NAME
を"onnxruntime"
から"voicevox_onnxruntime"
にします。compatible_engineの場合だけ、
"voicevox_onnxruntime"
で失敗すると"onnxruntime"
にフォールバックするようにしています。(モック目的で使えるように)
change: liberate VOICEVOX CORE ort#8でログのフィルタリングをやめる代わりに、C APIのログフィルタの
ort=info
をort=warn
にします。(現行のONNX Runtime v1.17.3とsample.vvmだとログが大量に出てしまいました)
build_and_deployの
is_production
周りを吹き飛ばします。関連 Issue
Resolves VOICEVOX/voicevox_project#24.
Resolves #388.
Resolves #722.
その他