koide 2d753f114f
All checks were successful
Deploy Docusaurus Site / deploy (push) Successful in 26s
Add: DGX Spark VibeVoice ASR セットアップガイド
2026-02-24 01:06:01 +00:00

6.9 KiB
Raw Blame History

sidebar_position, title, description, hide_table_of_contents, displayed_sidebar
sidebar_position title description hide_table_of_contents displayed_sidebar
8 DGX SparkでVibeVoice ASRを動かす — リアルタイム日本語音声認識 Microsoft VibeVoice ASRをDGX Spark環境でDockerベースで動かし、バッチ処理とリアルタイム音声認識を実現する方法 false 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 以上

クイックスタート

1. リポジトリをクローン

cd ~
git clone https://github.com/YOUR_REPO/vibevoice-asr.git
cd vibevoice-asr

2. Docker イメージをビルド

./setup.sh build

ビルドには数分かかりますNGC PyTorch コンテナベース)。

3. サービスを起動

バッチ ASRGradio UIのみ

./setup.sh demo

http://localhost:7860 でアクセス

リアルタイム ASR のみ:

./setup.sh realtime

→ WebSocket: ws://localhost:8000/ws/asr/{session_id}
→ テストクライアント: http://localhost:8000/static/realtime_client.html

両方を同時起動:

./setup.sh serve

使い方

Gradio UIバッチ処理

  1. ブラウザで http://<DGX_SPARK_IP>:7860 にアクセス
  2. 「Upload Audio」でファイルをアップロード、または「Record」でマイク録音
  3. 「Transcribe」をクリック
  4. 認識結果(テキスト、話者、タイムスタンプ)が表示される

対応フォーマットWAV, MP3, M4A, FLAC, OGG, MKV, MP4

リアルタイム ASRWebSocket

ブラウザからマイク入力をストリーミングで認識:

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 - モデルの事前ロードを無効化

Docker 手動実行

バッチ ASR

docker run --gpus all -p 7860:7860 vibevoice-asr:dgx-spark

リアルタイム ASR

docker run --gpus all -p 8000:8000 vibevoice-asr:dgx-spark \
    python -m realtime.server --host 0.0.0.0 --port 8000

両方同時

docker run --gpus all -p 7860:7860 -p 8000:8000 vibevoice-asr:dgx-spark ./run_all.sh

トラブルシューティング

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 接続エラー

  1. ファイアウォールでポート 8000 が開いているか確認
  2. CORS の問題がある場合は同一オリジンからアクセス
  3. wss:// (HTTPS) 環境では別途 TLS 設定が必要

マイクが認識されない

ブラウザでマイクへのアクセス許可を確認してください。HTTPS または localhost からのアクセスが必要です。

性能の目安

項目 数値
モデルサイズ 約 8GB VRAM
初回ロード 10-20 秒
リアルタイム遅延 150-850 ms
対応サンプルレート 16kHz

参考リンク

ライセンス

VibeVoice ASR は Microsoft 社のオープンソースプロジェクトです。
ライセンスについては microsoft/VibeVoice を参照してください。