--- sidebar_position: 8 title: DGX SparkでVibeVoice ASRを動かす — リアルタイム日本語音声認識 description: Microsoft VibeVoice ASRをDGX Spark環境でDockerベースで動かし、バッチ処理とリアルタイム音声認識を実現する方法 hide_table_of_contents: false displayed_sidebar: null --- # DGX Spark で VibeVoice ASR を動かす — リアルタイム日本語音声認識 ## はじめに Microsoft の **VibeVoice ASR** を DGX Spark 環境で動作させるための Docker ベースのセットアップ手順です。 ### VibeVoice ASR とは VibeVoice は Microsoft が開発したオープンソースの音声認識モデルで、以下の特徴があります: - **高精度な日本語認識** — 日本語を含む多言語対応 - **話者分離(Diarization)** — 複数話者を区別 - **タイムスタンプ** — 発話区間を正確に記録 - **ストリーミング対応** — リアルタイム音声認識 ### 本セットアップの機能 | 機能 | 説明 | ポート | |------|------|--------| | **バッチASR (Gradio)** | ファイルアップロード・マイク録音からの認識 | 7860 | | **リアルタイムASR** | WebSocket によるストリーミング認識 | 8000 | 追加で以下をサポート: - MKV/MP4 動画ファイルからの音声抽出 - 話者分離(Speaker Diarization) - タイムスタンプ付き出力 ## 必要環境 - **NVIDIA GPU** — CUDA 13.1 対応(DGX Spark / Blackwell GB10) - **Docker** — NVIDIA Container Toolkit 導入済み - **VRAM** — 約 8GB 以上 ## ワンライナーでセットアップ ```bash curl -sL https://docs.techswan.online/scripts/vibevoice-asr/setup.sh | bash -s build ``` これだけでダウンロード・ビルドが完了します。 ### その他のオプション ```bash # ダウンロードのみ curl -sL https://docs.techswan.online/scripts/vibevoice-asr/setup.sh | bash # ダウンロード・ビルド・Gradioデモ起動まで一気に curl -sL https://docs.techswan.online/scripts/vibevoice-asr/setup.sh | bash -s demo # 両方のサービスを起動(Gradio + Realtime ASR) curl -sL https://docs.techswan.online/scripts/vibevoice-asr/setup.sh | bash -s serve ``` ## 手動セットアップ ### 1. ファイルをダウンロード ```bash curl -sL https://docs.techswan.online/scripts/vibevoice-asr/setup.sh | bash cd ~/vibevoice-asr ``` ### 2. Docker イメージをビルド ```bash docker build -t vibevoice-asr:dgx-spark . ``` ビルドには数分かかります(NGC PyTorch コンテナベース)。 ### 3. サービスを起動 **バッチ ASR(Gradio UI)のみ:** ```bash docker run --gpus all --ipc=host --network=host \ -v "$HOME/.cache/huggingface:/root/.cache/huggingface" \ vibevoice-asr:dgx-spark ``` → `http://localhost:7860` でアクセス **リアルタイム ASR のみ:** ```bash docker run --gpus all --ipc=host --network=host \ -v "$HOME/.cache/huggingface:/root/.cache/huggingface" \ vibevoice-asr:dgx-spark \ python -m realtime.server --host 0.0.0.0 --port 8000 ``` → WebSocket: `ws://localhost:8000/ws/asr/{session_id}` → テストクライアント: `http://localhost:8000/static/realtime_client.html` **両方を同時起動:** ```bash docker run --gpus all --ipc=host --network=host \ -v "$HOME/.cache/huggingface:/root/.cache/huggingface" \ vibevoice-asr:dgx-spark ./run_all.sh ``` ## 使い方 ### Gradio UI(バッチ処理) 1. ブラウザで `http://:7860` にアクセス 2. 「Upload Audio」でファイルをアップロード、または「Record」でマイク録音 3. 「Transcribe」をクリック 4. 認識結果(テキスト、話者、タイムスタンプ)が表示される 対応フォーマット:WAV, MP3, M4A, FLAC, OGG, MKV, MP4 ### リアルタイム ASR(WebSocket) ブラウザからマイク入力をストリーミングで認識: ```javascript const ws = new WebSocket('ws://localhost:8000/ws/asr/demo'); ws.onopen = () => { console.log('Connected'); startAudioCapture(); }; ws.onmessage = (event) => { const data = JSON.parse(event.data); if (data.type === 'final_result') { console.log('認識結果:', data.text); } else if (data.type === 'partial_result') { console.log('認識中:', data.text); } }; // 音声送信 (16kHz, 16-bit PCM) function sendAudio(pcmData) { ws.send(pcmData.buffer); } ``` ## WebSocket プロトコル ### クライアント → サーバー | 種類 | 形式 | 内容 | |------|------|------| | 音声データ | Binary | PCM 16-bit, 16kHz, モノラル | | 設定変更 | JSON | `{"type": "config", "config": {...}}` | | 停止 | JSON | `{"type": "stop"}` | ### サーバー → クライアント | type | 説明 | |------|------| | `status` | 接続状態の通知 | | `partial_result` | 認識中の中間結果 | | `final_result` | 確定した認識結果(タイムスタンプ・話者ID付き) | | `vad_event` | 発話開始/終了イベント | | `error` | エラー通知 | ### レスポンス例 ```json { "type": "final_result", "text": "こんにちは、今日の天気はいいですね。", "is_final": true, "segments": [ { "start_time": 0.5, "end_time": 3.2, "speaker_id": "SPEAKER_00", "text": "こんにちは、今日の天気はいいですね。" } ], "latency_ms": 850 } ``` ## 設定オプション ### 環境変数 | 変数 | デフォルト | 説明 | |------|------------|------| | `VIBEVOICE_HOST` | `0.0.0.0` | バインドするホスト | | `VIBEVOICE_PORT` | `8000` | ポート番号 | | `VIBEVOICE_MODEL_PATH` | `microsoft/VibeVoice-ASR` | モデルパス | | `VIBEVOICE_DEVICE` | `cuda` | デバイス (cuda/cpu) | | `VIBEVOICE_MAX_SESSIONS` | `10` | 最大同時接続数 | ### コマンドラインオプション | オプション | デフォルト | 説明 | |------------|------------|------| | `--host` | `0.0.0.0` | バインドするホスト | | `--port` | `8000` | ポート番号 | | `--model-path` | `microsoft/VibeVoice-ASR` | モデルパス | | `--device` | `cuda` | デバイス | | `--max-sessions` | `10` | 最大同時接続数 | | `--no-preload` | - | モデルの事前ロードを無効化 | ## トラブルシューティング ### GPU メモリ不足 モデルは約 8GB 以上の VRAM を必要とします。メモリ不足の場合: ```bash docker run --gpus all \ -e PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True \ -p 8000:8000 vibevoice-asr:dgx-spark \ python -m realtime.server ``` ### WebSocket 接続エラー 1. ファイアウォールでポート 8000 が開いているか確認 2. CORS の問題がある場合は同一オリジンからアクセス 3. `wss://` (HTTPS) 環境では別途 TLS 設定が必要 ### マイクが認識されない ブラウザでマイクへのアクセス許可を確認してください。`http://IPアドレス` ではマイクが使えません。 → **[ローカルサーバーでマイク・カメラを使う方法](/tech/browser-secure-context/)** を参照 ## 性能の目安 | 項目 | 数値 | |------|------| | モデルサイズ | 約 8GB VRAM | | 初回ロード | 10-20 秒 | | リアルタイム遅延 | 150-850 ms | | 対応サンプルレート | 16kHz | ## 参考リンク - [microsoft/VibeVoice](https://github.com/microsoft/VibeVoice) — 公式リポジトリ - [NGC PyTorch Container](https://catalog.ngc.nvidia.com/orgs/nvidia/containers/pytorch) — ベースイメージ - [DGX Spark セットアップガイド](https://docs.nvidia.com/dgx/) — NVIDIA 公式ドキュメント ## ライセンス VibeVoice ASR は Microsoft 社のオープンソースプロジェクトです。 ライセンスについては [microsoft/VibeVoice](https://github.com/microsoft/VibeVoice) を参照してください。