litagin02 / Style-Bert-VITS2

Style-Bert-VITS2: Bert-VITS2 with more controllable voice styles.
GNU Affero General Public License v3.0
774 stars 100 forks source link

ONNX への変換と ONNXRuntime による推論サポートを追加 #165

Closed tsukumijima closed 2 weeks ago

tsukumijima commented 2 months ago

表題の通りです。

ONNX 推論時は、BERT 特徴量の抽出にも ONNX 化された BERT モデルを使用します。 既に ONNX 形式に変換済みの BERT モデルを Hugging Face にアップロードしており、initialize.py の実行時に他の BERT モデル同様に自動的にダウンロードされるよう設計しています (その性質上、従来の SBV2 から更新したユーザーが ONNX 推論を利用するには、再度 initialize.py の実行が必要になります) 。

ONNX 推論では PyTorch 推論と比べて CPU 利用時に最大1.5〜3倍の高速化が期待でき、ランタイムサイズも小さいです。 CUDA 利用時は高速化の恩恵は限られますが、それでも PyTorch 推論より幾分か高速です。

ONNX 推論しか使わないのに PyTorch が依存関係にあり自動インストールされるのは無駄ですから、今回の変更に合わせ、ライブラリとしての style_bert_vits2 では、PyTorch をデフォルトの依存関係から除外しています。 pip install style-bert-vits2[torch] のように追加の torch 依存関係を明示してインストールすると、従来通り PyTorch が依存関係に追加され、引き続きライブラリ利用時の PyTorch 推論を行えます。

音声合成モデルを Safetensors 形式から ONNX 形式へ変換するには、convert_onnx.py を使用します。 --model にディレクトリを指定すると、その配下にある全ての .safetensors ファイルを ONNX 形式に変換し、同じファイル名.onnx に保存します。

そのほか直接 ONNX 推論とは関係ないものの、以前 PR した際の修正漏れや改善した方が良い点などをいくつか累積的に修正しています。

各変更の詳細はコミットメッセージに詳しく記載していますので、ぜひご確認ください。

litagin02 commented 1 month ago

@tsukumijima ありがとうございます。確認を始めました。

既に ONNX 形式に変換済みの BERT モデルを Hugging Face にアップロードしており、initialize.py の実行時に他の BERT モデル同様に自動的にダウンロードされるよう設計しています (その性質上、従来の SBV2 から更新したユーザーが ONNX 推論を利用するには、再度 initialize.py の実行が必要になります) 。

~~initialize.pyは特に変更がないように見えるのですが、更新忘れでしょうか? こちらでも更新はできそうですが、すでにあるのならばコミットしていただけると助かります。~~

litagin02 commented 1 month ago

あっすみません、実行したらダウンロード開始されました、"bert/bert_models.json"に追加されていたのですね、気づきませんでした、申し訳ありません。

tsukumijima commented 1 month ago

@litagin02 ふと現在の dev ブランチを確認した所、この PR と一部コンフリクトすることが判明しました。 元々かなり大きめの PR ですし、現状の dev ブランチと master ブランチの差分量は比較的小さめです。したがってレビューコストの増加は限定的だと考え、先ほどこの PR にて dev ブランチの内容をマージしました。

同時に null_model_params 周りの仕様に関して、渡せるパラメータの型 (Type Hints) を Pydantic モデルとして明確化してあります。 恐らく大丈夫かとは思いますが、もし「dev ブランチはマージしない予定」などありましたらお知らせください。

Mofa-Xingche commented 3 weeks ago

@litagin02 ふと現在の dev ブランチを確認した所、この PR と一部コンフリクトすることが判明しました。 元々かなり大きめの PR ですし、現状の dev ブランチと master ブランチの差分量は比較的小さめです。したがってレビューコストの増加は限定的だと考え、先ほどこの PR にて dev ブランチの内容をマージしました。

同時に null_model_params 周りの仕様に関して、渡せるパラメータの型 (Type Hints) を Pydantic モデルとして明確化してあります。 恐らく大丈夫かとは思いますが、もし「dev ブランチはマージしない予定」などありましたらお知らせください。

onnx化された省GPUメモリのStylebert Vits2が出たら、オープンソースの"かなり"一般大衆向けのかわいい音声変換ワンクリック起動アプリをリリースしようと思っています。もしonnx化されたGPUのStylebert Vits2がいつ頃完成予定かとかtsukumijimaさんに目途が立っていましたら、これからの計画が立てやすくなりますのでお伝えください、リリースの予想や予定時期はありますか?

litagin02 commented 2 weeks ago

一旦devにマージして確認やバージョン上げの作業をしてからmasterにマージします。ありがとうございます!

tsukumijima commented 2 weeks ago

こちらこそマージしていただきありがとうございました!