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アソシエイト

