Skip to content

Add VibeVoice streaming ASR export - #723

Open
justinchuby wants to merge 2 commits into
justinchuby-add-vibevoice-ttsfrom
justinchuby-add-vibevoice-streaming-asr
Open

Add VibeVoice streaming ASR export#723
justinchuby wants to merge 2 commits into
justinchuby-add-vibevoice-ttsfrom
justinchuby-add-vibevoice-streaming-asr

Conversation

@justinchuby

Copy link
Copy Markdown
Member

Stack dependency

This PR is intentionally stacked on #714 (justinchuby-add-vibevoice-tts), at base commit 346988887d84a1964a3d7d286e4ff200f38d302e. It must merge only after #714; it does not enable auto-merge.

Implementation

  • Adds an architecture-discriminated VibeVoiceForASRStreamingTraining route for microsoft/VibeVoice-ASR-Streaming-7B, without changing the existing VibeVoice TTS route.
  • Exports the executable ASR pipeline as three truthful stages: audio_encoder (acoustic and semantic causal tokenizers plus connectors), embedding (speech embedding replacement), and decoder (Qwen2 with explicit KV caches).
  • Models both causal convolution cache sets and final-chunk stride padding as ONNX inputs/outputs. Streaming control tokens (<speech_start>, <speech_end>, forced <|text_chunk_end|>), chunk loop/sampling, hotword prompt assembly, and speaker JSON parsing remain host-owned.
  • Declares the decoder attention mask arbitrary through Add staged VibeVoice text-to-speech support #714's generic mobius.attention.requires_arbitrary_mask contract, preventing incorrect GQA fusion for left-padded ASR batches.
  • Routes all 901 executable checkpoint tensors exactly once and explicitly documents the 276 acoustic_tokenizer.decoder.* training-VAE tensors excluded from inference.
  • Emits graph-derived advisory metadata and processor assets, but marks ORT GenAI runtime orchestration unsupported rather than publishing a nonfunctional runnable claim.

Provenance and runtime boundary

  • Checkpoint: microsoft/VibeVoice-ASR-Streaming-7B@60d858b518b4e19d404af3737f848fc185b30177.
  • Executable reference: microsoft/VibeVoice@505653d3873b065a488aea551c6ee3dc51d3062f with transformers==4.51.3; ASR-critical blobs were checked unchanged through upstream 1541f590c7099820f10ea012f48d2399282df69f.
  • No local 17 GB real-weight download was attempted, so this PR makes no L4/L5 real-transcription claim. onnxruntime-ep-mlx 0.29.5 / ORT 1.29 also cannot execute the complete VibeVoice decoder due to CumSum cannot infer output shapes; this blocks local MLX real-runtime evidence.

Validation

  • Full pinned 28-layer configuration build and complete safetensors-index audit (1,177 tensors).
  • Exact-source synthetic two-chunk prefill/cached-decode parity, explicit convolution-cache updates, batch behavior, hotword/no-hotword, processor frame/left-padding contract, and speaker JSON normalization.
  • 9951 passed, 66 skipped full non-integration suite.
  • lintrunner f --output oneline --all-files and diff checks.
  • Two independent exact-diff GPT-5.6 Terra reviews; final review reported no findings.

@github-actions

github-actions Bot commented Sep 3, 2026

Copy link
Copy Markdown

Performance Comparison

Comparing 64f0d98e6c4950

Model Metric Baseline Current Delta
bert (feature-extraction) model_size_bytes 359 KB 359 KB +0.0%
bert (feature-extraction) num_nodes 68 68 +0.0%
falcon model_size_bytes 364 KB 364 KB +0.0%
falcon num_nodes 66 66 +0.0%
gemma2 model_size_bytes 428 KB 428 KB +0.0%
gemma2 num_nodes 105 105 +0.0%
gpt2 model_size_bytes 324 KB 324 KB +0.0%
gpt2 num_nodes 54 54 +0.0%
llama model_size_bytes 425 KB 425 KB +0.0%
llama num_nodes 60 60 +0.0%
llama (static-cache) model_size_bytes 425 KB 425 KB +0.0%
llama (static-cache) num_nodes 56 56 +0.0%
mamba (ssm-text-generation) model_size_bytes 296 KB 296 KB +0.0%
mamba (ssm-text-generation) num_nodes 94 94 +0.0%
phi3 model_size_bytes 421 KB 421 KB +0.0%
phi3 num_nodes 58 58 +0.0%
phi3 (static-cache) model_size_bytes 421 KB 421 KB +0.0%
phi3 (static-cache) num_nodes 54 54 +0.0%
qwen2 model_size_bytes 425 KB 425 KB +0.0%
qwen2 num_nodes 60 60 +0.0%
qwen2 (static-cache) model_size_bytes 425 KB 425 KB +0.0%
qwen2 (static-cache) num_nodes 56 56 +0.0%
qwen3_5_moe (hybrid-text-generation) model_size_bytes 506 KB 506 KB +0.0%
qwen3_5_moe (hybrid-text-generation) num_nodes 265 265 +0.0%
qwen3_5_text (hybrid-text-generation) model_size_bytes 458 KB 458 KB +0.0%
qwen3_5_text (hybrid-text-generation) num_nodes 127 127 +0.0%
qwen3_5_vl (hybrid-qwen-vl) model_size_bytes 977 KB 977 KB +0.0%
qwen3_5_vl (hybrid-qwen-vl) num_nodes 450 450 +0.0%
t5 (seq2seq) model_size_bytes 836 KB 836 KB +0.0%
t5 (seq2seq) num_nodes 176 176 +0.0%
whisper (speech-to-text) model_size_bytes 1008 KB 1008 KB +0.0%
whisper (speech-to-text) num_nodes 128 128 +0.0%

No performance regressions.

@github-actions

github-actions Bot commented Sep 3, 2026

Copy link
Copy Markdown

🏗️ Architecture Diff

Comparing 64f0d98e6c4950

Model Sub-model Changes Status
bert (feature-extraction) model 0
falcon model 0
gemma2 model 0
gemma4 (gemma4) decoder 0
gemma4 (gemma4) embedding 0
gemma4 (gemma4) vision_encoder 0
gemma4_text model 0
gpt2 model 0
llama model 0
llama (static-cache) model 0
mamba (ssm-text-generation) model 0
phi3 model 0
phi3 (static-cache) model 0
qwen model 0
qwen (static-cache) model 0
qwen2 model 0
qwen2 (static-cache) model 0
qwen2_moe model 0
qwen2_moe (static-cache) model 0
qwen3 model 0
qwen3 (static-cache) model 0
qwen3_5_moe (hybrid-text-generation) model 0
qwen3_5_text (hybrid-text-generation) model 0
qwen3_5_vl (hybrid-qwen-vl) decoder 0
qwen3_5_vl (hybrid-qwen-vl) embedding 0
qwen3_5_vl (hybrid-qwen-vl) vision_encoder 0
qwen3_moe model 0
qwen3_moe (static-cache) model 0
qwen3_next (hybrid-text-generation) model 0
t5 (seq2seq) decoder 0
t5 (seq2seq) encoder 0
whisper (speech-to-text) decoder 0
whisper (speech-to-text) encoder 0

No architecture changes detected.


Legend: ⚪ No change · 🔵 Minor (attrs/inits) · 🟡 Moderate (nodes added/removed) · 🔴 Major (interface changed)

@justinchuby
justinchuby force-pushed the justinchuby-add-vibevoice-streaming-asr branch from 9f1f808 to 87138b0 Compare September 3, 2026 22:56
justinchuby and others added 2 commits September 3, 2026 15:57
Implement an architecture-discriminated, staged ONNX export for the pinned VibeVoice ASR checkpoint, with explicit audio convolution and decoder cache contracts. Preserve the existing TTS path while recording unsupported ORT GenAI orchestration boundaries and validating source parity, processor behavior, and complete checkpoint routing.

Co-authored-by: Copilot App <[email protected]>
Signed-off-by: Justin Chu <[email protected]>
Apply the repository import and expression formatting rules after restacking the streaming ASR export on the finalized VibeVoice TTS base.

Co-authored-by: Copilot App <[email protected]>
Signed-off-by: Justin Chu <[email protected]>
@justinchuby
justinchuby force-pushed the justinchuby-add-vibevoice-streaming-asr branch from 87138b0 to e6c4950 Compare September 3, 2026 22:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant