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

## ワンライナーでセットアップ

```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://<DGX_SPARK_IP>: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) を参照してください。
