Skip to content

Latest commit

 

History

History
181 lines (139 loc) · 10 KB

migration-guide.ja.md

File metadata and controls

181 lines (139 loc) · 10 KB

Migration Guide(日本語)

English | 日本語

ONNX Runtime・whisper.cpp・sherpa-onnx ですでに音声推論パイプ ラインを組んでいる方向けに、Vokra への切替時に何が変わるか、API 対応 表、モデル変換、パフォーマンスの目安をまとめます。

1. 概念レベルで変わること

観点 ONNX Runtime / sherpa-onnx whisper.cpp Vokra
ロードするファイル形式 ONNX(Protobuf) ggml model file(ggml-*.bin) GGUF(vokra.* 音声 chunk)
音声 op(STFT / iSTFT / mel / VAD 状態 / Flow Matching sampler / KV cache) モデル固有のgraphとホスト処理 Whisper固有の実装 native operatorとruntime function
バックエンドの継目 Execution Providers(op カバレッジが非対称) CPU + オプションで CUDA/Metal CPU + opt-in の Metal / CUDA / Vulkan / WebGPU、experimental CoreML whole-submodel delegate、SDK gate 下の QNN scaffold
backend配置 execution provider・session設定を確認 モデル・backend設定を確認 未対応演算は明示エラー(FR-EX-08)
ランタイムに ONNX あり なし なし — ONNX はオフライン変換のみ
weight ライセンス強制 外部 外部 内蔵の vokra.provenance.* ゲート(research flag なしで CC-BY-NC を拒否)
配布形態 ORT バイナリ + アプリ 単一バイナリ 単一バイナリ。root Cargo.lock に vokra-* crate のみ

音声固有の関心事(フレーム精度の STFT、レイヤーごとの KV cache、スト リーミング状態、bit-exact frontend)をアプリコードからランタイムへ移す ことが設計目標です。

2. ONNX Runtime / sherpa-onnx から

2.1 API 対応

ONNX Runtime Vokra
Ort::Session(env, "model.onnx", ...) vokra_session_create_from_file("model.gguf", &s)
session.Run(inputs, outputs) vokra_asr_transcribe(s, pcm, n, sr, &out)(vokra.model.arch からタスク自動選択)
SessionOptions::SetExecutionProviderCUDA(...) vokra_session_options_create() で opaque options handle を取得し、vokra_session_options_set_backend(..., VOKRA_BACKEND_CUDA) を呼び、vokra_session_create_from_file_with_options(...) に渡した後で vokra_session_options_destroy(...) を呼ぶ(--features cuda でビルド)
Custom op 登録 すでに第一級化されているか、明示エラーで拒否
sherpa_onnx_offline_recognizer_* vokra_session_create_from_file(Whisper GGUF)+ vokra_asr_transcribe
sherpa_onnx_online_recognizer_* vokra_stream_open + vokra_stream_push_pcm + vokra_stream_poll

2.2 モデル変換

Vokra は GGUF のみをロードします。ONNX モデルはオフラインで変換し、 ランタイムは onnxruntime / protobuf / abseil にリンクしません (FR-LD-05):

# Silero VAD v5
vokra-cli convert --model silero-vad --input silero_vad.onnx --output silero_vad.gguf

# piper-plus voice
vokra-cli convert --model piper-plus \
  --input voice.onnx --config voice.config.json --output voice.gguf

# CAM++ speaker encoder
vokra-cli convert --model campplus --input campplus.onnx --output campplus.gguf

Whisper は safetensors 経路(upstream openai/whisper-*)を推奨:

vokra-cli convert --model whisper \
  --input model.safetensors --output whisper.gguf

2.3 ONNX を離れて得られるもの

  • STFT / iSTFTの明示的な契約: window・hop・normalization・RFFTはnative属性で、 モデル固有のfrontend検査につながります。
  • モデルに属するstreaming状態: 対応実装はcacheと状態をruntimeで管理します。 全経路の完了を仮定せず、選んだモデルの実際のstreaming契約を確認してください。
  • runtimeでONNX export契約を必要としない: 対応converterがcheckpointの重みと設定を オフラインで抽出し、native実装はVokra GGUFを読み込みます。その経路でONNX exportを 省けますが、未対応architectureを重みだけで実行できるという意味ではありません。

2.4 折り合いをつけるべき点

  • Custom ONNX op(contrib operators、com.microsoft.* 等)は 移行しません。必要な場合は op シグネチャを添えて issue を上げて ください(第一級化を検討します)、あるいはその手順だけホストコード に残してください。
  • Windows Bitcode など ORT 特有のパッケージ話は消えます — Vokra は単一の libvokra.dll / .dylib / .so を配布します。

3. whisper.cpp から

3.1 API 対応

whisper.cpp Vokra
whisper_init_from_file("model.bin") vokra_session_create_from_file("whisper.gguf", &s)
whisper_full_default_params(WHISPER_SAMPLING_GREEDY) + whisper_full vokra_asr_transcribe(s, pcm, n, 16000, &out)
whisper_full_get_segment_text 全テキストが 1 本の char* で返る(セグメント別 API は今後)
チャンク間で whisper_state を再利用 vokra_stream_open + vokra_stream_push_pcm(streaming ASR は v0.5+)
whisper.cpp のmodel file 直接の互換なし — 対応するupstream safetensors converterで、必要なvokra.* metadataを持つVokra GGUFを生成してください。

3.2 モデル変換

# Hugging Face safetensors から — base / small / medium / large-v3 / turbo 対応
vokra-cli convert --model whisper \
  --input openai_whisper-large-v3/model.safetensors \
  --output whisper-large-v3.gguf

量子化プリセット: --quantize q4_k / q5_k / q6_k(それぞれ --policy-preset whisper_q4_k 等のエイリアス)。層別ポリシーの詳細は docs/design/quantization-policy.md 参照。

3.3 パフォーマンスの目安

  • Whisper base CPU: RTF < 0.3 が目標(whisper.cpp と同 CPU で同等。 両者とも K-quant と手書きカーネルを使います)。
  • 日付付き CUDA reference(現在の保証ではない): docs/bench-baselines/vast-2026-07-10/ の report は 2026-07-10、Whisper large-v3、NVIDIA RTX 4090(driver 560.35.03)、/root/jfk-30s.wav の 11 秒入力、10 samples という構成。 decomposed path の RTF sample は 0.735571〜0.786904、gated FA v2 は 0.753041〜0.820891 だった。これは exact setup の reference 測定であり、 whisper.cpp との比較や一般的な GPU 性能主張、formal <0.10 gate ではない。

3.4 折り合いをつけるべき点

  • 言語自動判定は現状 Whisper prompt 経由。detect_language() の 第一級ショートカットは今後。
  • 単語レベルのタイムスタンプは C ABI から未提供。当面は Rust API の beam_search op 経路を使ってください。

4. faster-whisper(Python)から

source Python packageはSessionをexportし、生成済みctypes tableも現行C header の現行 function set をすべて覆います。安定版 v0.3.0 の GitHub release には4 platform wheel assetが含まれますが、PyPIとTestPyPIは未公開です。 より新しい 0.4.0-rc.1 のsource系列はdesktop previewで、Python wheel release はありません。binding statusを参照してください。 source checkoutでの評価は可能ですが、特定のregistry releaseが公開・検証される まではproductionのfaster-whisper依存をregistry上のvokra packageへ置換しないでください。

現在文書化されている HTTP クライアントのドロップイン置換は integrations/vokra-server を起動して ください。OpenAI Whisper の /v1/audio/transcriptions(faster-whisper 互換)、vLLM の /v1/completions + /v1/chat/completions、piper-plus HTTP /api/tts、および Home Assistant 用の Wyoming Protocol を公開しま す。クライアントコードは URL だけ変えれば動きます。

5. piper / piper-plus から

Vokra の piper-plus 統合は piper-plus の推論スタック(MB-iSTFT-VITS2) をネイティブ再実装したものです。Voice model は上流の ONNX + config.json からオフラインで変換され、ランタイムは onnxruntime に依存しません:

vokra-cli convert --model piper-plus \
  --input voice.onnx --config voice.config.json --output voice.gguf

piper-plus の 8 言語 G2P(JA/EN/ZH/ES/FR/PT/SV/KO)は前処理レイヤとし て流用します。Rust 移植は roadmap にありますが、Vokra ネイティブ TTS 経路の利用には必須ではありません。

6. コンプライアンス上の変化

パイプラインで CC-BY-NC / CC-BY-NC-SA weight(F5-TTS、Fish-Speech、 EnCodec)を直接使っていた場合、Vokra はデフォルトで拒否します。 ComplianceLevel に明示的な research_flag: true(または CLI の等価 スイッチ)で opt-in してください。ランタイムの商用利用者を保護する設 計判断です — 詳細は docs/legal-compliance.md。

7. Vokra が(まだ)できないこと

  • Speaker diarization(pyannote 相当): v1.0 GA(M5)で予定。v1.0-rc では非対応。
  • Bark / StyleTTS 2: ライセンス audit 後、v1.0 GA より後(post-v1.0 GA)で対応予定。
  • Voice cloning(RVC v2 / GPT-SoVITS): 法務上の理由(ELVIS Act / NO FAKES Act)で別リポジトリ vokra-voiceclone-experimental に意図的 に分離しています。
  • ランタイムでの ONNX: 対応しません。詳細な調査記録は docs/onnx-alternative-research.md(gitignore-local)です。

次のステップ