English | 日本語
ONNX Runtime・whisper.cpp・sherpa-onnx ですでに音声推論パイプ ラインを組んでいる方向けに、Vokra への切替時に何が変わるか、API 対応 表、モデル変換、パフォーマンスの目安をまとめます。
| 観点 | 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)をアプリコードからランタイムへ移す ことが設計目標です。
| 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 |
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.ggufWhisper は safetensors 経路(upstream openai/whisper-*)を推奨:
vokra-cli convert --model whisper \
--input model.safetensors --output whisper.gguf- STFT / iSTFTの明示的な契約: window・hop・normalization・RFFTはnative属性で、 モデル固有のfrontend検査につながります。
- モデルに属するstreaming状態: 対応実装はcacheと状態をruntimeで管理します。 全経路の完了を仮定せず、選んだモデルの実際のstreaming契約を確認してください。
- runtimeでONNX export契約を必要としない: 対応converterがcheckpointの重みと設定を オフラインで抽出し、native実装はVokra GGUFを読み込みます。その経路でONNX exportを 省けますが、未対応architectureを重みだけで実行できるという意味ではありません。
- Custom ONNX op(contrib operators、
com.microsoft.*等)は 移行しません。必要な場合は op シグネチャを添えて issue を上げて ください(第一級化を検討します)、あるいはその手順だけホストコード に残してください。 - Windows Bitcode など ORT 特有のパッケージ話は消えます — Vokra
は単一の
libvokra.dll/.dylib/.soを配布します。
| 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を生成してください。 |
# 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 参照。
- 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(driver560.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.10gate ではない。
- 言語自動判定は現状 Whisper prompt 経由。
detect_language()の 第一級ショートカットは今後。 - 単語レベルのタイムスタンプは C ABI から未提供。当面は Rust API
の
beam_searchop 経路を使ってください。
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 だけ変えれば動きます。
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.ggufpiper-plus の 8 言語 G2P(JA/EN/ZH/ES/FR/PT/SV/KO)は前処理レイヤとし て流用します。Rust 移植は roadmap にありますが、Vokra ネイティブ TTS 経路の利用には必須ではありません。
パイプラインで 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。
- 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)です。
- Getting Started — ソースbuildと変換レシピ
- Tutorials — Unity / iOS / Python 統合
- License audit — 全 weight ライセンス一覧