StyleBertVits2を動くようにする

StyleBertVits2を動くようにするメモ

基本

https://github.com/litagin02/Style-Bert-VITS2/issues/224を参考に進めれば大丈夫。

torchについては、自分でもcu118でよかったか少し怪しい。<2.4ではなく==2.6を使ったのも異なっているかも。下の方に書いたが、きちんとモデルのファイルの形式をsafetensorsのものにすると、形式が古いとかを警告されなくなり、ロード時間短縮になるので、モデルの確認をするといいかも。

作業記録

しかし自分の環境では、uvを使っているので多少の差異をメモしておく。まだuvに慣れていないためuv pip installを初手でしていいものか若干不明。あと、venvディレクトリではなく、.venvディレクトリを使っている。

StyleBertVits2をcloneして、./pyproject.tomlを編集してから、モジュールのインストールを行った。

./pyproject.tomlを開く。何かのモジュールが3.9をサポートしていないかったと思うので、3.9を削除する。他のモジュールのバージョン指定などは、uv addから行う(fast-whisperだけはうっかりrequirements.txtをじかに編集しちゃったようだ、これもuv addでいいはず)。

4箇所変更する:

diff --git a/pyproject.toml b/pyproject.toml
index 3b20d05..e47980d 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -7,7 +7,7 @@ name = "style-bert-vits2"
 dynamic = ["version"]
 description = "Style-Bert-VITS2: Bert-VITS2 with more controllable voice styles."
 readme = "README.md"
-requires-python = ">=3.9"
+requires-python = ">=3.10"
 license = "AGPL-3.0"
 keywords = []
 authors = [
@@ -16,12 +16,12 @@ authors = [
 classifiers = [
     "Development Status :: 4 - Beta",
     "Programming Language :: Python",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: Implementation :: CPython",
 ]
 dependencies = [
+    "av>=12.0.0",
     "cmudict",
     "cn2an",
     "g2p_en",
@@ -31,13 +31,15 @@ dependencies = [
     "num2words",
     "numba",
     "numpy<2",
-    "onnxruntime",
+    "onnxruntime==1.22.1",
     "pydantic>=2.0",
     "pyopenjtalk-dict",
     "pypinyin",
     "pyworld-prebuilt",
     "safetensors",
-    "transformers",
+    "setuptools<82",
+    "soxr>=1.0.0",
+    "transformers<5.0.0",
 ]

 [project.optional-dependencies]
@@ -91,7 +93,7 @@ cov-report = ["- coverage combine", "coverage report"]
 # Usage: `hatch run test:cov`
 cov = ["test-cov", "cov-report"]
 [[tool.hatch.envs.test.matrix]]
-python = ["3.9", "3.10", "3.11"]
+python = ["3.10", "3.11"]

 # for ONNX inference (without PyTorch dependency)
 [tool.hatch.envs.test-onnx]
@@ -118,7 +120,7 @@ cov-report = ["- coverage combine", "coverage report"]
 # Usage: `hatch run test-onnx:cov`
 cov = ["test-cov", "cov-report"]
 [[tool.hatch.envs.test-onnx.matrix]]
-python = ["3.9", "3.10", "3.11"]
+python = ["3.10", "3.11"]

3.9を削除し終えたら、インストール作業に移る。以下を実行する。もともとはtorch<2.4だったが、2.6でうまくいった。.safetensorsでないモデルを扱う関係と他のモジュールとの依存関係の都合で2.6にしたのだったと思う。

uv pip install "torch==2.6" "torchaudio==2.6" --index-url https://download.pytorch.org/whl/cu118
uv pip install -r .\requirements.txt
uv add "transformers<5.0.0"
uv add "av>=12.0.0"
uv add soxr
uv add "onnxruntime==1.22.1"
uv add "faster-whisper==1.2.1"
uv add "setuptools<82"

あとは、style_gen.pyのモデルの読み込み時に、weight_only=Falseを足す。

diff --git a/style_gen.py b/style_gen.py
index 55f1fc0..780dc1a 100644
--- a/style_gen.py
+++ b/style_gen.py
@@ -16,7 +16,9 @@ from style_bert_vits2.utils.stdout_wrapper import SAFE_STDOUT

 config = get_config()

-model = Model.from_pretrained("pyannote/wespeaker-voxceleb-resnet34-LM")
+model = Model.from_pretrained(
+    "pyannote/wespeaker-voxceleb-resnet34-LM", weights_only=False
+)
 inference = Inference(model, window="whole")
 device = torch.device(config.style_gen_config.device)
 inference.to(device)

今更気づいた

検証してて気づいたのだが、

# safetensorsを入れる前
|  INFO  | bert_models.py:112 | Loaded the JP BERT model from <path>\Style-Bert-VITS2\bert\deberta-v2-large-japanese-char-wwm (239.65s)

このように240秒とロードが異様に時間がかかっていた。この問題は、Style-Bert-VITS2\bert\deberta-v2-large-japanese-char-wwmフォルダに、safetensorsファイルがないためだった。safetensorsファイルを入れておけば、ロードは下のように1秒ほどと非常に早くなる。

# safetensorsを入れた後(もとのbinファイルはbin_0に変更して使わないようにした)
|  INFO  | bert_models.py:112 | Loaded the JP BERT model from <path>\Style-Bert-VITS2\bert\deberta-v2-large-japanese-char-wwm (1.22s)

別の問題として、違うモデルでbinファイル形式しかないものがあるので、weightsがどうのという問題が起こる場合は、下をやってみてもいいと思う。モデル自体を見つけるのに苦労したが、ユーザーディレクトリに勝手に.cacheを作るタイプのようだ。少なくともデフォルトでは。

# .venv\Lib\site-packages\pyannote\audio\core\model.pyにあった。
CACHE_DIR = os.getenv(
    "PYANNOTE_CACHE",
    os.path.expanduser("~/.cache/torch/pyannote"),
)

このモデル(pyannote/wespeaker-voxceleb-resnet34-LM)がどうやらsafetensorsがないモデルになっている。

むりやり

これはsafetensorsファイルを使わない場合の話。binファイルのモデルのままでは必要となるが、safetensorsファイルがHuggingFaceにあるものなら、基本的には不要の作業。safetensorsファイルがないモデルの場合、以下の作業は必要になるかもしれない。

特にpyannote/wespeaker-voxceleb-resnet34-LMの場合では、結構上のほうで書き換えたようにweights_only=Falseが外部モジュールに渡るが、無視されるため、まだモデルが読み込めない。よってこれが渡る外部モジュールを書き換える。.venv\Lib\site-packages\pyannote\audio\core\model.pyの670行目付近で、weights_onlyを無理やり指定する。

# .venv\Lib\site-packages\pyannote\audio\core\model.py
        # 670行目付近
        # obtain model class from the checkpoint
        wo = kwargs.get("weights_only", None)
        loaded_checkpoint = pl_load(path_for_pl, map_location=map_location, weights_only=wo)

確かここまでしか手を加えていないはず。実行に移れる。

実行

うまくいっていれば、下のコマンドで、実行可能。ブラウザが開かれる。

# app.pyの実行前に、環境変数設定も必要だった。指定しないと途中で下記のエラーが起こる。
# RuntimeError: use_libuv was requested but PyTorch was build without libuv support
$env:USE_LIBUV = "0"
# もう少し下の設定をした後に初期化と起動を行う
uv run .\initialize.py
uv run .\app.py

やったぜ、といいたい。

おわり

これを書くまでに、時間がたっていたせいで若干記憶が怪しかった。やはり都度メモしておくのが大事だ。特に外部モジュールは書き換えてもgitが捕捉してくれないので、どこを書き換えたか探すのが少し苦労した。

torch<2.4でも何かsafetensors関連らしいエラーを見かけたので、2.6にしたのだったような気もする。記憶違うかもしれないけど…

バージョン指定は大事ということがよくわかる。あとは、safetensorsファイルも大事。

2026年4月現在は、Irodori-TTSというものもあり、これは、参照音声から、学習なし(ゼロショット)でTTSできるもの。これを使うと、学習分の時間が浮く。しかし、自分の環境では1文当たり8秒ほどかかってしまい、StyleBertVits2では0.3秒ほどで済むので、学習分の時間込みではStyleBertVits2に分があった。合計推論回数が少ない場合では、役に立つかもしれない。品質も結構良かった。

以上です。


Amazonアソシエイト

https://amzn.to/4sh2dY9
https://amzn.to/4t8uhht
タイトルとURLをコピーしました