All checks were successful
Deploy Docusaurus Site / deploy (push) Successful in 28s
7.8 KiB
7.8 KiB
sidebar_position, title, description, hide_table_of_contents, displayed_sidebar, image
| sidebar_position | title | description | hide_table_of_contents | displayed_sidebar | image |
|---|---|---|---|---|---|
| 8 | DGX SparkでVibeVoice ASRを動かす — リアルタイム日本語音声認識 | Microsoft VibeVoice ASRをDGX Spark環境でDockerベースで動かし、バッチ処理とリアルタイム音声認識を実現する方法 | false | null | ./banner.png |
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 以上
ワンライナーでセットアップ
curl -sL https://docs.techswan.online/scripts/vibevoice-asr/setup.sh | bash -s build
これだけでダウンロード・ビルドが完了します。
その他のオプション
# ダウンロードのみ
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. ファイルをダウンロード
curl -sL https://docs.techswan.online/scripts/vibevoice-asr/setup.sh | bash
cd ~/vibevoice-asr
2. Docker イメージをビルド
docker build -t vibevoice-asr:dgx-spark .
ビルドには数分かかります(NGC PyTorch コンテナベース)。
3. サービスを起動
バッチ ASR(Gradio UI)のみ:
docker run --gpus all --ipc=host --network=host \
-v "$HOME/.cache/huggingface:/root/.cache/huggingface" \
vibevoice-asr:dgx-spark
→ http://localhost:7860 でアクセス
リアルタイム ASR のみ:
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
両方を同時起動:
docker run --gpus all --ipc=host --network=host \
-v "$HOME/.cache/huggingface:/root/.cache/huggingface" \
vibevoice-asr:dgx-spark ./run_all.sh
使い方
Gradio UI(バッチ処理)
- ブラウザで
http://<DGX_SPARK_IP>:7860にアクセス - 「Upload Audio」でファイルをアップロード、または「Record」でマイク録音
- 「Transcribe」をクリック
- 認識結果(テキスト、話者、タイムスタンプ)が表示される
対応フォーマット:WAV, MP3, M4A, FLAC, OGG, MKV, MP4
リアルタイム ASR(WebSocket)
ブラウザからマイク入力をストリーミングで認識:
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 |
エラー通知 |
レスポンス例
{
"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 を必要とします。メモリ不足の場合:
docker run --gpus all \
-e PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True \
-p 8000:8000 vibevoice-asr:dgx-spark \
python -m realtime.server
WebSocket 接続エラー
- ファイアウォールでポート 8000 が開いているか確認
- CORS の問題がある場合は同一オリジンからアクセス
wss://(HTTPS) 環境では別途 TLS 設定が必要
マイクが認識されない
ブラウザでマイクへのアクセス許可を確認してください。http://IPアドレス ではマイクが使えません。
→ ローカルサーバーでマイク・カメラを使う方法 を参照
性能の目安
| 項目 | 数値 |
|---|---|
| モデルサイズ | 約 8GB VRAM |
| 初回ロード | 10-20 秒 |
| リアルタイム遅延 | 150-850 ms |
| 対応サンプルレート | 16kHz |
参考リンク
- microsoft/VibeVoice — 公式リポジトリ
- NGC PyTorch Container — ベースイメージ
- DGX Spark セットアップガイド — NVIDIA 公式ドキュメント
ライセンス
VibeVoice ASR は Microsoft 社のオープンソースプロジェクトです。
ライセンスについては microsoft/VibeVoice を参照してください。