Skip to content

Encoder-Decoder Models

QAIC supports encoder-decoder architectures, primarily Whisper for audio transcription.

Whisper

OpenAI's Whisper model runs on QAIC for speech-to-text inference:

import librosa
from vllm import LLM, SamplingParams

llm = LLM(
    model="openai/whisper-tiny.en",
    max_num_seqs=1,
    max_model_len=150,
    max_num_batched_tokens=1500,
    quantization="mxfp6",
    enable_prefix_caching=False,
    limit_mm_per_prompt={"audio": 1},
    hf_overrides={"max_source_positions": 1500},
    additional_config={"device_group": [0]},
)

# Load audio file (any sample rate — librosa resamples automatically)
audio = librosa.load("audio.wav", sr=None)

# For Whisper on QAIC, only prefill length (PL) = 1 is supported.
# Continuous batching is not supported.
prompt = {
    "prompt": "<|startoftranscript|>",
    "multi_modal_data": {"audio": audio},
}

sampling_params = SamplingParams(temperature=0, top_p=1.0, max_tokens=200)

outputs = llm.generate(prompt, sampling_params)

for output in outputs:
    print(f"Generated text: {output.outputs[0].text!r}")

Configuration

Parameter Value Description
max_model_len ctx_len Decoder maximum output length in tokens
max_num_batched_tokens encoder_ctx_len Encoder context length (1500 for Whisper mel frames)
max_num_seqs 1 Batch size for concurrent transcriptions
hf_overrides {"max_source_positions": encoder_ctx_len} Override HF config to match compiled encoder length
limit_mm_per_prompt {"audio": 1} Limit to one audio input per prompt
enable_prefix_caching False Must be disabled for Whisper

Constraints

  • AOT mode only
  • Currently validated for Whisper family
  • Continuous batching not supported
  • Encoder context length determined at compilation time