0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Style-BERT-VITS2をBlackwell世代GPUのWindowsで完全動作させる

0
Posted at

この記事の対象読者

  • RTX 50シリーズ(5070 Ti / 5080 / 5090)を購入したが、AI音声合成ツールが動かなくて困っている方
  • Style-BERT-VITS2やBert-VITS2に興味があるが、最新GPUでの動作環境構築に不安がある方
  • Pythonの基本的な操作(pip install、仮想環境の作成)ができる方
  • WindowsでローカルAI音声合成環境を構築したい方

この記事で得られること

  • RTX 5090(Blackwell / sm_120)でStyle-BERT-VITS2をGPU動作させる方法
  • PyTorch nightly + triton-windowsによる環境構築の完全手順
  • 依存関係の罠と正しいインストール順序の理解
  • トラブルシューティングと自動フォールバック機構の実装

この記事で扱わないこと

  • Style-BERT-VITS2の基本的な使い方(学習、音声合成の操作方法)
  • RTX 40シリーズ以前のGPUでの環境構築
  • Linux/WSL環境での構築(本記事はWindows 11ネイティブ環境が対象)
  • 音声データの準備や学習データセットの作成方法

1. RTX 5090との出会い、そして絶望

「RTX 5090が届いた!これでAI音声合成も爆速になるぞ!」

2026年1月、私はそう意気込んでいた。32GB VRAM、CUDA 12.8対応、Blackwellアーキテクチャ。スペックシートを眺めるだけでワクワクした。

さっそくStyle-BERT-VITS2をインストール。python app.pyを実行。そして——

NVIDIA GeForce RTX 5090 with CUDA capability sm_120 is not compatible 
with the current PyTorch installation.
The current PyTorch install supports CUDA capabilities sm_50 sm_60 sm_61 sm_70 sm_75 sm_80 sm_86 sm_90.

動かない。

50万円のグラボが、ただの暖房器具と化した瞬間だった。

調べてみると、PyTorchの安定版はBlackwell世代(sm_120)をサポートしていない。さらにTritonはLinux専用。Windowsユーザーは完全に置き去りだった。

「これ、誰かが解決策を出してくれるまで待つしかないのか...?」

いや、待てない。だから自分でフォーク版を作った。それがStyle-BERT-VITS2 GeneLab-Blackwell Editionだ。

この記事では、RTX 5090でStyle-BERT-VITS2を完全動作させるまでの技術的な課題と、その解決策を詳しく解説する。

ここまでで、なぜこの記事が必要なのかがイメージできたと思う。次は、この問題の背景となる技術的な文脈を見ていこう。


2. 前提知識の確認

本題に入る前に、この記事で使う用語を整理しておく。

2.1 Style-BERT-VITS2とは

Style-BERT-VITS2は、テキストから自然な音声を生成するTTS(Text-to-Speech)システムだ。従来のVITSにBERT(自然言語処理モデル)を組み合わせることで、文脈を理解した感情豊かな音声合成が可能になる。

オリジナルはlitagin02氏のリポジトリで公開されており、日本語音声合成コミュニティで広く使われている。

2.2 CUDA Compute Capability(sm_XX)とは

NVIDIAのGPUアーキテクチャごとに割り当てられた識別子。PyTorchやCUDAライブラリは、この識別子を見て「このGPUに対応しているか」を判断する。

GPU世代 アーキテクチャ Compute Capability
RTX 30シリーズ Ampere sm_86
RTX 40シリーズ Ada Lovelace sm_89, sm_90
RTX 50シリーズ Blackwell sm_120

PyTorch 2.6.0(安定版)はsm_90までしかサポートしていない。つまり、RTX 5090(sm_120)は「未知のGPU」として認識され、動作を拒否される。

2.3 Tritonとは

Tritonは、PyTorchの高速化に使われるコンパイラフレームワークだ。特にTransformerベースのモデルで、Attention計算を最適化する。

問題は、公式TritonはLinux専用ということ。PyTorchが依存関係として自動インストールするため、Windowsでは必ず衝突エラーが発生する。

2.4 PyTorch nightlyとは

PyTorchの開発版(毎晩ビルドされる最新版)。安定版より先に新しいGPUやCUDAバージョンに対応する。

  • 安定版:テスト済みで安定しているが、最新GPUへの対応が遅い
  • nightly版:最新機能が使えるが、バグが含まれる可能性がある

RTX 5090を使うには、CUDA 12.8対応のnightly版(cu128)が必要になる。

これらの用語が押さえられたら、次に進もう。


3. なぜRTX 5090で動かすのが難しいのか?

ここでは、オリジナル版Style-BERT-VITS2をRTX 5090で動かそうとしたときに遭遇する4つの壁を説明する。

3.1 壁①:CUDA Compute Capability未対応

最も根本的な問題。PyTorch安定版はsm_120(Blackwell)をコンパイルターゲットに含めていない。

# エラーの再現コード
import torch
print(torch.cuda.is_available())  # True
print(torch.cuda.get_device_name(0))  # NVIDIA GeForce RTX 5090
# ここで実際にCUDA演算を実行すると...
x = torch.randn(100, 100).cuda()  # → sm_120 is not compatible エラー

3.2 壁②:Triton衝突

PyTorchが依存関係でTriton(Linux専用)をインストールしてしまう。

triton.runtime.errors.OutOfResources: out of resource: shared memory...

Windows版の代替としてtriton-windowsパッケージが存在するが、正しい順序でインストールしないと衝突する。

3.3 壁③:インストール順序の罠

requirements.txtを普通にpip installすると、以下の順序で処理される:

  1. PyTorch nightly cu128をインストール(正しい)
  2. 他のパッケージの依存解決でPyTorch安定版に上書きされる(死)

これが「さっきまで動いていたのに急に動かなくなった」の原因。

3.4 壁④:FlashAttention未対応

FlashAttention 2はLinux専用。Windowsでは使えないため、SDPA(Scaled Dot-Product Attention)へのフォールバックが必要。

これらの課題がクリアになったところで、抽象的な問題から具体的な解決策の実装に進もう。


4. 技術的な解決アプローチ

4.1 解決策の全体像

┌─────────────────────────────────────────────────────────────┐
│                    Style-Bert-VITS2                         │
├─────────────────────────────────────────────────────────────┤
│  Gradio UI  │  TTS Engine  │  BERT Models  │  Audio I/O    │
├─────────────────────────────────────────────────────────────┤
│                      PyTorch Layer                          │
│  torch 2.11.0.dev+cu128  │  torchaudio  │  torchvision     │
├─────────────────────────────────────────────────────────────┤
│                    GPU Acceleration                         │
│  triton-windows 3.5.x  │  CUDA 12.8 (bundled)              │
├─────────────────────────────────────────────────────────────┤
│                    NVIDIA Driver                            │
│  Driver 580.x+  │  CUDA Capability sm_120 (Blackwell)      │
└─────────────────────────────────────────────────────────────┘

ポイントは以下の3つ:

  1. PyTorch nightly cu128:sm_120をサポートする唯一のPyTorchバージョン
  2. triton-windows:Linux専用Tritonの代わりに使うWindows対応版
  3. インストール順序の固定:依存解決による上書きを防ぐ

4.2 なぜフォーク版が必要なのか

「pip installの順序を変えるだけじゃダメなの?」と思うかもしれない。

確かに、手動で正しい順序でインストールすれば動く。しかし:

  • 手順を一箇所でも間違えると動かない
  • アップデート時に再び壊れるリスクがある
  • トラブルシューティングの情報が散逸している

フォーク版では、これらの問題を解決し、クローンして手順通りにコマンドを実行するだけで動く状態を目指した。

抽象的なアーキテクチャを理解したところで、具体的なインストール手順を見ていこう。


5. 実際に使ってみよう(インストール手順)

5.1 環境構築の前提条件

項目 要件
OS Windows 11
GPU NVIDIA RTX 5090(他の50シリーズでも動作する可能性あり)
ドライバ 580.x以降
Python 3.10.x(3.11以降は未検証)
Git インストール済み

5.2 設定ファイルの準備

以下の3種類の設定ファイルを用意している。用途に応じて選択してほしい。

開発環境用(config.yml - 開発・テスト向け)

# config.yml - 開発環境用(このままコピーして使える)
# Style-BERT-VITS2 GeneLab-Blackwell Edition

# デバイス設定
device: "cuda"  # GPUを使用。CPUにフォールバックしたい場合は "cpu"

# モデル設定
model:
  # 使用するモデルのパス
  assets_root: "./model_assets"
  
  # 推論時の設定
  inference:
    # バッチサイズ(VRAMに余裕があれば増やす)
    batch_size: 1
    # 音声の長さ上限(秒)
    max_length: 30

# サーバー設定(APIサーバー用)
server:
  host: "127.0.0.1"
  port: 5000
  # 入力文字数の上限
  limit: 100
  # CORS設定(開発時は全許可)
  origins:
    - "*"

# ログ設定
logging:
  level: "DEBUG"  # 開発時は詳細ログ
  file: null      # ファイル出力なし

本番環境用(config.production.yml - 安定運用向け)

# config.production.yml - 本番環境用(このままコピーして使える)
# Style-BERT-VITS2 GeneLab-Blackwell Edition

# デバイス設定
device: "cuda"

# モデル設定
model:
  assets_root: "./model_assets"
  
  inference:
    batch_size: 4        # 本番では効率重視
    max_length: 60       # より長い音声に対応

# サーバー設定
server:
  host: "0.0.0.0"        # 外部からのアクセスを許可
  port: 8080
  limit: 500             # 本番では文字数上限を緩和
  # CORS設定(信頼できるドメインのみ)
  origins:
    - "https://your-domain.com"
    - "https://app.your-domain.com"

# ログ設定
logging:
  level: "INFO"          # 本番は重要なログのみ
  file: "./logs/app.log" # ファイル出力あり

CI/テスト環境用(config.test.yml - 自動テスト向け)

# config.test.yml - CI/テスト環境用(このままコピーして使える)
# Style-BERT-VITS2 GeneLab-Blackwell Edition

# デバイス設定(CIではGPUがない場合も考慮)
device: "cpu"  # テスト時はCPUで実行

# モデル設定
model:
  assets_root: "./model_assets"
  
  inference:
    batch_size: 1
    max_length: 5  # テスト用に短く

# サーバー設定
server:
  host: "127.0.0.1"
  port: 5001       # 開発環境とポートを分ける
  limit: 50        # テスト用に制限
  origins:
    - "http://localhost:*"

# ログ設定
logging:
  level: "WARNING"  # テスト時は警告以上のみ
  file: null

5.3 インストール手順(完全版)

# 1. リポジトリをクローン
git clone https://github.com/hiroki-abe-58/Style-BERT-VITS2-GeneLab-Blackwell.git
cd Style-BERT-VITS2-GeneLab-Blackwell

# 2. 仮想環境を作成
python -m venv venv
.\venv\Scripts\Activate.ps1

# 3. pipをアップグレード
pip install --upgrade pip

# 4. 【重要】triton-windowsを先にインストール
# この順序を間違えると衝突エラーが発生する
pip install triton-windows

# 5. 【重要】PyTorch nightly cu128をインストール
# --preフラグでnightly版を指定
pip install --pre torch torchvision torchaudio --index-url https://download.pytorch.org/whl/nightly/cu128

# 6. その他の依存関係をインストール
pip install -r requirements.txt

# 7. 初期化(必要なモデルをダウンロード)
python initialize.py

5.4 動作確認

インストールが完了したら、以下のコマンドで動作確認を行う。

python -c "import torch; print('PyTorch:', torch.__version__); print('CUDA:', torch.cuda.is_available()); print('GPU:', torch.cuda.get_device_name(0) if torch.cuda.is_available() else 'N/A')"

期待される出力:

PyTorch: 2.11.0.dev20260119+cu128
CUDA: True
GPU: NVIDIA GeForce RTX 5090

5.5 音声合成エディターの起動

python server_editor.py --inbrowser

ブラウザが自動で開き、音声合成エディターが表示されれば成功だ。

5.6 よくあるエラーと対処法

エラー 原因 対処法
sm_120 is not compatible PyTorch安定版を使用している venvを削除して再作成し、手順5のnightly版をインストール
triton.runtime.errors Tritonの衝突 pip uninstall tritonpip install triton-windows
DLL load failed CUDA/PyTorchの不整合 venvを削除して最初からやり直す
CUDA out of memory VRAM不足 --device cpuオプションで起動、またはバッチサイズを下げる
ModuleNotFoundError: No module named 'xxx' 依存関係の欠落 pip install -r requirements.txtを再実行

基本的な使い方をマスターしたので、次は具体的なユースケースを見ていこう。


6. ユースケース別ガイド

6.1 ユースケース1: 推論(音声合成)のみを行いたい

想定読者: 既存のモデルを使って音声合成したい人。学習は不要。

推奨構成:

  • GPU: RTX 5090(または50シリーズ)
  • VRAM使用量: 約4-8GB
  • 設定: config.yml(開発環境用)

サンプルコード:

"""
Style-BERT-VITS2 推論サンプル
RTX 5090 (Blackwell) 対応版

使い方: python inference_sample.py
"""
import torch
from pathlib import Path

# GPUの確認
def check_gpu():
    """GPU環境をチェックし、利用可能なデバイスを返す"""
    if torch.cuda.is_available():
        gpu_name = torch.cuda.get_device_name(0)
        print(f"GPU検出: {gpu_name}")
        print(f"CUDA Version: {torch.version.cuda}")
        return "cuda"
    else:
        print("GPUが利用できません。CPUモードで実行します。")
        return "cpu"

def main():
    device = check_gpu()
    
    # Style-BERT-VITS2のインポート(環境構築後に利用可能)
    from style_bert_vits2.nlp import bert_models
    from style_bert_vits2.constants import Languages
    from style_bert_vits2.tts_model import TTSModel
    
    # BERTモデルのロード
    bert_models.load_model(Languages.JP, "ku-nlp/deberta-v2-large-japanese-char-wwm")
    bert_models.load_tokenizer(Languages.JP, "ku-nlp/deberta-v2-large-japanese-char-wwm")
    
    # TTSモデルのロード
    model_path = Path("model_assets/jvnv-F1-jp/jvnv-F1-jp_e160_s14000.safetensors")
    config_path = Path("model_assets/jvnv-F1-jp/config.json")
    style_path = Path("model_assets/jvnv-F1-jp/style_vectors.npy")
    
    model = TTSModel(
        model_path=model_path,
        config_path=config_path,
        style_vec_path=style_path,
        device=device,
    )
    
    # 音声合成
    text = "こんにちは、Style-BERT-VITS2のRTX 5090対応版です。"
    sr, audio = model.infer(text=text)
    
    # 保存
    import scipy.io.wavfile as wavfile
    wavfile.write("output.wav", sr, audio)
    print("output.wav に保存しました")

if __name__ == "__main__":
    main()

6.2 ユースケース2: APIサーバーとして運用したい

想定読者: 他のアプリケーションから音声合成APIを呼び出したい人。

推奨構成:

  • GPU: RTX 5090
  • 設定: config.production.yml(本番環境用)
  • 推奨: systemdやpm2での常時起動

サンプルコード:

"""
Style-BERT-VITS2 APIクライアント サンプル
RTX 5090 (Blackwell) 対応版

使い方: 
1. サーバー起動: python server_fastapi.py
2. クライアント実行: python api_client_sample.py
"""
import requests
import base64
from pathlib import Path

# APIエンドポイント
API_BASE = "http://127.0.0.1:5000"

def synthesize_speech(text: str, model_name: str = "jvnv-F1-jp") -> bytes:
    """
    APIを呼び出して音声を合成する
    
    Args:
        text: 合成するテキスト
        model_name: 使用するモデル名
    
    Returns:
        WAV形式の音声データ(bytes)
    """
    response = requests.post(
        f"{API_BASE}/voice",
        json={
            "text": text,
            "model_name": model_name,
            "speaker_id": 0,
            "style": "Neutral",
            "style_weight": 1.0,
        }
    )
    
    if response.status_code != 200:
        raise Exception(f"API Error: {response.status_code} - {response.text}")
    
    return response.content

def main():
    # テキストを音声に変換
    text = "RTX 5090で動作するAPIサーバーです。"
    
    print(f"テキスト: {text}")
    print("音声合成中...")
    
    audio_data = synthesize_speech(text)
    
    # ファイルに保存
    output_path = Path("api_output.wav")
    output_path.write_bytes(audio_data)
    
    print(f"保存完了: {output_path}")
    print(f"ファイルサイズ: {len(audio_data):,} bytes")

if __name__ == "__main__":
    main()

6.3 ユースケース3: 自分のモデルを学習したい

想定読者: 自分の声や特定のキャラクターの声を学習したい人。

推奨構成:

  • GPU: RTX 5090(32GB VRAMを活用)
  • VRAM使用量: 12-24GB
  • 設定: デフォルト設定 + バッチサイズ調整

サンプルコード:

"""
Style-BERT-VITS2 学習パイプライン サンプル
RTX 5090 (Blackwell) 対応版

注意: 実際の学習には音声データと書き起こしデータが必要です
"""
import subprocess
import sys
from pathlib import Path

def check_environment():
    """学習環境のチェック"""
    import torch
    
    print("=== 環境チェック ===")
    print(f"Python: {sys.version}")
    print(f"PyTorch: {torch.__version__}")
    print(f"CUDA Available: {torch.cuda.is_available()}")
    
    if torch.cuda.is_available():
        print(f"GPU: {torch.cuda.get_device_name(0)}")
        print(f"VRAM: {torch.cuda.get_device_properties(0).total_memory / 1e9:.1f} GB")
        
        # RTX 5090の場合、バッチサイズを大きくできる
        vram_gb = torch.cuda.get_device_properties(0).total_memory / 1e9
        if vram_gb >= 24:
            recommended_batch = 8
        elif vram_gb >= 16:
            recommended_batch = 4
        else:
            recommended_batch = 2
        
        print(f"推奨バッチサイズ: {recommended_batch}")
        return recommended_batch
    
    return 1

def prepare_dataset(data_dir: Path, model_name: str):
    """
    データセットの前処理
    
    Args:
        data_dir: 音声ファイルが格納されたディレクトリ
        model_name: モデル名(出力ディレクトリ名になる)
    """
    # 1. 音声ファイルのリサンプリング
    print("\n=== 1. リサンプリング ===")
    subprocess.run([
        sys.executable, "resample.py",
        "--model_name", model_name,
        "--sr", "44100"
    ], check=True)
    
    # 2. 書き起こしの前処理
    print("\n=== 2. テキスト前処理 ===")
    subprocess.run([
        sys.executable, "preprocess_text.py",
        "--model_name", model_name
    ], check=True)
    
    # 3. BERT特徴量の抽出
    print("\n=== 3. BERT特徴量抽出 ===")
    subprocess.run([
        sys.executable, "bert_gen.py",
        "--model_name", model_name
    ], check=True)
    
    print("\n前処理完了!")

def start_training(model_name: str, batch_size: int = 4):
    """
    学習を開始
    
    Args:
        model_name: モデル名
        batch_size: バッチサイズ
    """
    print(f"\n=== 学習開始 (batch_size={batch_size}) ===")
    subprocess.run([
        sys.executable, "train_ms.py",
        "--model_name", model_name,
        "--batch_size", str(batch_size)
    ], check=True)

def main():
    # 環境チェック
    recommended_batch = check_environment()
    
    # 設定
    model_name = "my_voice_model"
    data_dir = Path("Data") / model_name / "raw"
    
    print(f"\n学習するモデル: {model_name}")
    print(f"データディレクトリ: {data_dir}")
    
    # データディレクトリの確認
    if not data_dir.exists():
        print(f"\nエラー: {data_dir} が存在しません")
        print("音声ファイルを配置してから再実行してください")
        return
    
    # 前処理
    prepare_dataset(data_dir, model_name)
    
    # 学習
    start_training(model_name, batch_size=recommended_batch)

if __name__ == "__main__":
    main()

ユースケースが把握できたところで、この記事を読んだ後の学習パスを確認しよう。


7. 学習ロードマップ

この記事を読んだ後、次のステップとして以下をおすすめする。

初級者向け(まずはここから)

  1. デフォルトモデルで音声合成を試す

    • python server_editor.py --inbrowserを実行
    • 付属のデモモデルでテキストを入力して音声を生成
  2. 公式チュートリアル動画を視聴

  3. Colabで学習を体験

    • Google Colab
    • ローカルGPUがなくても学習の流れを理解できる

中級者向け(実践に進む)

  1. 自分のデータセットで学習

    • 音声データの準備(2-14秒の音声ファイルを複数)
    • 書き起こしデータの作成
    • App.batのデータセット作成タブを活用
  2. スタイル制御を学ぶ

    • style_vectors.npyの仕組みを理解
    • 複数スタイル(喜び、悲しみなど)の作成
  3. APIサーバーとしての運用

上級者向け(さらに深く)

  1. モデルのマージ・カスタマイズ

  2. ONNX変換と外部連携

  3. PyTorchのカスタムビルド

    • ソースからのビルドに挑戦
    • さらなる最適化の追求

8. まとめ

この記事では、RTX 5090(Blackwell / sm_120)でStyle-BERT-VITS2を完全動作させる方法を解説した。

ポイントの振り返り

  1. なぜ動かないのか: PyTorch安定版がsm_120をサポートしていない、TritonがWindows非対応
  2. 解決策: PyTorch nightly cu128 + triton-windows + 正しいインストール順序
  3. フォーク版の価値: 試行錯誤を省略し、クローン→手順実行で動く状態を提供

私の所感

正直なところ、最初は「PyTorchがnightly版で対応するまで待てばいいや」と思っていた。しかし、実際に自分で環境構築してみると、依存関係の罠やTritonの衝突など、nightly版だけでは解決しない問題が山積みだった。

RTX 5090は間違いなく素晴らしいGPUだ。32GB VRAMは、従来は不可能だった大きなバッチサイズでの学習を可能にする。しかし、最新ハードウェアは常にソフトウェアの対応を待つ必要があるという現実も思い知らされた。

この記事とフォーク版が、同じ苦労をする人を一人でも減らせれば幸いだ。(役に立ったらぜひGitHubにスターをもらえると嬉しい!)

フォーク版はGitHubで公開している。フィードバックやプルリクエストは大歓迎だ。


参考文献

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?