-
Notifications
You must be signed in to change notification settings - Fork 200
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
推論エンジンにONNXを採用し、サイズ削減とモデルポータビリティを向上させる #69
Comments
Issueありがとうございます。coreリポジトリしっかりしたらそちらに移しても良いかもですね! 容量が大きいことは、VOICEVOXが抱えてる大きめの問題の1つなのでぜひ解決したいところです・・・ そういえばいつになるか未定ですが、JVSデータセットなどで学習したモデルと推論に必要なコードを公開しようかと考えているのですが、(やるやらないは置いておいて)他に必要になりそうなコードがあれば教えて頂ければ! |
首を長くしてお待ちしております:tada: 推論までのコード(例えばloadして、こんな形式のパラメータを入力して…)みたいのが分かると、モデルをloadしてから再度onnxでexportみたいので変換できるのかなぁ…とか思っています(トライしてみないとわからないところではありますが)。 他に必要そうなコードは今のところ思いつかないので、もしも公開されたらこのIssueにもリンクなどをいただけると嬉しいです(Coreとかその辺りのリポジトリもウォッチ予定なので見つけ次第tryしてみますが)。 |
了解しました! いつになるかわかりませんが、なるべく早く公開したいと思います 🙏 |
とりあえず、推論だけはできるコードを書き出してみました・・・! ただ、ネットワーク構造は、依存ライブラリを全てインストールしてコードジャンプを駆使しないと追えないようになってしまっています。 |
ご連絡ありがとうございます! https://github.com/Hiroshiba/vv_core_inference/blob/3b9ad87b2d015513dd50c62c531e67b3124d5eea/vv_core_inference/make_yukarin_sosoa_forwarder.py#L7 espnetのIssueを見る感じONNX化のために何も対応しないぞみたいなスタンスを持っていたので、もしかしたら腕力が必要かもしれませんが、トライしてみます |
ONNXを採用するならばpytorchでなくonnxruntime のような推論エンジンを採用をしたほうが良いかもしれません |
DirectML、初めて知りました!良いですね!! |
これ今どうなってますか?ちょっとやってみたいんですが |
@Yosshi999 おー! |
Forwarderクラスを多少いじっても大丈夫ですか? ここらへんの |
いまのところ以下の部分がヤバそうだということが分かっています
|
そうすることでより単純になるのであれば大丈夫です! |
なるほどです! numpy.finfoは埋め込みで問題ないと思います! peの置き換えに関しては、5000固定でも問題ないかもです。確か1秒で約100サンプルなので、50秒ほどまでサポートできそうです。 |
onnx生成が出来れば次は https://github.com/Hiroshiba/voicevox_core でcore.cppの実装ですかね? |
はい!onnx生成ができればcoreにc++実装をプルリクエストして頂ければ!! たしかにインターフェイスはほとんど変わらなそうな気がします。サードパーティライブラリでも変更が少なくて済むはずなので、とても良さそうです。 |
リポジトリ間の横断が必要なため、別途リポジトリ横断用のissueにしてみました。 |
製品版VOICEVOX COREの、onnxモデルが入ったリリースを作ってみました!!!大変おまたせしました。 この変更により、エンジン側でできることは2つほどあります。 1つ目が、7z分割をやめて、単体のファイルとしてreleasesを作ることです。これはユーザーにエンジンを配布しやすくなるので、ぜひやりたいと思っています。 2つ目は、CPU/GPU判定です。coreが対応しているデバイスを列挙するAPIが生えたので、エンジン側はそれをバイパスすることでソフトウェア側に伝えることができます。ソフトウェア側のこのissueを解決できるはずです。 それぞれのissueを作成しつつ、作成したonnx版コアに問題が合った場合はissueを作成するとして、このissueはcloseしたいと思います。 |
内容
現在特徴量からwave形式のfloat列を推論する
each_cpp_forwarder
にはTorchが使用されている。TorchScriptを使っているためポータビリティが良く、PythonでもC++でも使用できるみたいなメリットを享受できている。
しかしTorchLibrary自体のサイズが非常に大きく、VOICEVOX ENGINEをフルビルドし動作させるためのランタイムを同梱すると4GBを超える非常に大きなものとなっている。
バージョンアップの度に4GB以上のダウンロードが行われるのは体験的に好ましくないだろう。
そこでRuntimeのサイズが小さく同等レベルのポータビリティを備えるONNXを使用することを提案する。
Pros 良くなる点
Cons 悪くなる点
実現方法
VOICEVOXのバージョン
0.4.1
OSの種類/ディストリ/バージョン
その他
大分古いバージョンでの作業例ですが
yamachu/nnmnkwii@7add37f
オレオレAutogradを作った場合こんな感じでONNXにする時にどう変換してほしいか書く必要があるものもあります(yukarin_s_forwarderとかsaとかその辺りがどう実装されているのかわからないので、単純にexportするだけで上手くいくかもしれません)。
もしかしたらEngineよりもCoreの方が適しているIssueかもしれませんね…
The text was updated successfully, but these errors were encountered: