Add: DGX Spark VibeVoice ASR セットアップガイド
All checks were successful
Deploy Docusaurus Site / deploy (push) Successful in 26s
All checks were successful
Deploy Docusaurus Site / deploy (push) Successful in 26s
This commit is contained in:
parent
6d5178a6ea
commit
2d753f114f
247
docs-tech/dgx-spark-vibevoice-asr/index.md
Normal file
247
docs-tech/dgx-spark-vibevoice-asr/index.md
Normal file
@ -0,0 +1,247 @@
|
|||||||
|
---
|
||||||
|
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. サービスを起動
|
||||||
|
|
||||||
|
**バッチ ASR(Gradio 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
|
||||||
|
|
||||||
|
### リアルタイム 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` | - | モデルの事前ロードを無効化 |
|
||||||
|
|
||||||
|
## 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) を参照してください。
|
||||||
Loading…
x
Reference in New Issue
Block a user