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

248 lines
6.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
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 以上
## クイックスタート
### 1. リポジトリをクローン
```bash
cd ~
git clone https://github.com/YOUR_REPO/vibevoice-asr.git
cd vibevoice-asr
```
### 2. Docker イメージをビルド
```bash
./setup.sh build
```
ビルドには数分かかりますNGC PyTorch コンテナベース)。
### 3. サービスを起動
**バッチ ASRGradio UIのみ**
```bash
./setup.sh demo
```
`http://localhost:7860` でアクセス
**リアルタイム ASR のみ:**
```bash
./setup.sh realtime
```
→ WebSocket: `ws://localhost:8000/ws/asr/{session_id}`
→ テストクライアント: `http://localhost:8000/static/realtime_client.html`
**両方を同時起動:**
```bash
./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
ブラウザからマイク入力をストリーミングで認識:
```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` | - | モデルの事前ロードを無効化 |
## Docker 手動実行
### バッチ ASR
```bash
docker run --gpus all -p 7860:7860 vibevoice-asr:dgx-spark
```
### リアルタイム ASR
```bash
docker run --gpus all -p 8000:8000 vibevoice-asr:dgx-spark \
python -m realtime.server --host 0.0.0.0 --port 8000
```
### 両方同時
```bash
docker run --gpus all -p 7860:7860 -p 8000:8000 vibevoice-asr:dgx-spark ./run_all.sh
```
## トラブルシューティング
### 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 設定が必要
### マイクが認識されない
ブラウザでマイクへのアクセス許可を確認してください。HTTPS または `localhost` からのアクセスが必要です。
## 性能の目安
| 項目 | 数値 |
|------|------|
| モデルサイズ | 約 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) を参照してください。