koide 8c109a1d9a
All checks were successful
Deploy Docusaurus Site / deploy (push) Successful in 28s
Add: OGPバナー画像自動生成 (node-canvas) + 全記事一括生成
2026-02-28 01:03:39 +00:00

257 lines
7.8 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
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. サービスを起動
**バッチ ASRGradio 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
### リアルタイム 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` | - | モデルの事前ロードを無効化 |
## トラブルシューティング
### 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) を参照してください。