inference/research
verifiedhigh · 0.90updated 2026-10-03

MiniCPM-o-2_6 (omni: vision + audio + speech)

dense 8.675B

Fields

id
models/minicpm-o-2-6
Family
minicpm-o
Vendor
OpenBMB (Tsinghua / ModelBest)
Release year
2025
Architecture
dense
Params (B)
8.675
Active params (B)
8.675
Hidden size
3,584
Layers
28
KV heads
4
Head dim
128
GQA ratio
7
Max context
32,768
Context scaling method
native
Activation
silu
Attention variant
GQA
KV cache (bytes/token)
57,344
FLOPs per active token
17,350,000,000
Open weights
yes
License
apache-2.0
notes
THREE-PART MODEL plus a speech SYNTHESISIZER -- the broadest I/O surface of any record here. (1) Vision: SigLIP vision tower, 27 layers, hidden 1152, 16 heads, patch 14, image_size 980 (top-level image_size 448), with the same LLaVA-STYLE DESIGN AS MiniCPM-V: slice_mode, query_num 64 perceiver resampler, batch_vision_input true, drop_vision_last_layer false. VISION TOKENS: 64 per slice + 1 global, i.e. ~128 for a small image. DOMINANCE: TEXT DOMINATES at default tiling; vision stays bounded by the resampler exactly as in MiniCPM-V. That LLaVA-lineage design is worth stating plainly: MiniCPM did not invent the SigLIP + resampler + tiled-slice scheme, it took it from LLaVA and made it cheap enough for a small model. (2) AUDIO: a Whisper encoder -- audio_config._name_or_path is literally 'openai/whisper-medium', architectures MiniCPMWhisperEncoder, d_model 1024, encoder_layers 24, encoder_attention_heads 16, encoder_ffn_dim 4096 (a Whisper-medium-sized encoder, not large). audio_pool_step 2 halves the audio token rate; audio_chunk_length 1.0. AUDIO TOKENS: a Whisper encoder emits 1,500 frames per 30s chunk; with audio_pool_step 2 that is ~750 audio tokens per 30 seconds. ASYMMETRY WORTH RECORDING: the Whisper DECODER fields are present in the config (decoder_layers 24, forced_decoder_ids, a 70-entry suppress_tokens list, decoder_start_token_id) but MiniCPM-o uses that decoder to produce SPEECH, not text. Audio-to-text goes through the main LLM; audio-to-speech goes through the bundled Whisper decoder. (3) SPEECH OUTPUT: tts_config model_type 'conditional_chattts' with llm_dim 3584, i.e. a ChatTTS conditional generator keyed to the same LLM width. This makes MiniCPM-o bidirectional in audio, which no other record in this slice is. (4) LLM: Qwen2-7B dense decoder, 28 layers, hidden 3584, 28 heads / 4 KV, head_dim 128, intermediate 18944, vocab 151,700, max_position 32,768, rope_theta 1e6, use_sliding_window false (sliding_window 131072 is declared but disabled). ARCHITECTURE = dense. KV CACHE: 28 * 4 * 128 * 2 * 2 = 57,344 B/token. The bundled Whisper-medium decoder is small enough not to move this number. params_b 8.675 = HF API safetensors total (8,674,997,028). SERVICEABILITY JOIN (added 2026-10-03; the architecture x engine matrix this record was missing, with a citation per cell in docs/13-model-compatibility.md): FAMILY=multimodal. REQUIRED KERNEL CLASS: an encoder tower (ViT / SigLIP / ConvNet / audio encoder) running on a SEPARATE schedule from the decoder, plus a projector into the decoder's embedding space, plus - for the mrope and DeepStack families - a multi-axis rotary scheme in the decoder rather than plain 1-D RoPE. Three engine-side consequences, all cited. (1) The encoder tower is a separate compute path, so its throughput is a different problem from decode throughput and engines that disclaim encoder throughput are disclaiming this. vLLM says so in its own words: 'We currently support pooling models primarily for convenience. This is not guaranteed to provide any performance improvements over using Hugging Face Transformers or Sentence Transformers directly' [[vllm-pooling-models]] - that is the general statement this class inherits. TRT-LLM's answer is a documented mechanism: a Multimodal Encoder Side Stream that prefetches encoder work on a separate CUDA stream plus a per-model Multimodal Embeddings Cache, currently available only for seven architectures (Gemma4, Gemma4Unified, Mistral3, Qwen3VL, Qwen3VLMoe, Qwen3_5, Qwen3_5Moe) [[mdl2-trtllm-supported-models]]. (2) Several towers carry hard external dependencies: Gemma3nForConditionalGeneration 'depends on timm>=1.0.17 to make use of its MobileNet-v5 vision backbone' and 'is only supported on V1 due to shared KV caching' [[mdl2-vllm-supported-models-2026-10]]; MiniCPM-V 4.6 requires transformers>=5.7.0 because it was upstreamed as a native model type [[mdl2-trtllm-supported-models]]. (3) Hybrid-only multimodal models expose a memory knob unique to this class: vLLM's --language-model-only flag sets all supported multimodal modalities to 0 so the multimodal modules are not loaded, 'to free up more GPU memory for KV cache' for Llama-4, Step3, Mistral-3 and Qwen-3.5 [[mdl2-vllm-supported-models-2026-10]].SUPPORTED BY (cited): vLLM native rows include InternVLChatModel and InternVLForConditionalGeneration, LlavaOnevisionForConditionalGeneration, LlavaNextForConditionalGeneration, MolmoForCausalLM and Molmo2ForConditionalGeneration, PaliGemmaForConditionalGeneration, SmolVLMForConditionalGeneration, Glm4vForConditionalGeneration, Qwen2VL/Qwen3VL, MiniCPMV, Mllama, Phi4MM, Gemma4, NemotronH_Nano_VL_V2, VoxtralForConditionalGeneration (which requires mistral-common[audio]) and Qwen3OmniMoeThinkerForConditionalGeneration [[mdl2-vllm-supported-models-2026-10]]. SGLang's multimodal table covers InternLM2-VL, LLaVA-OneVision, LLaVA-NeXT(-Video), Ling-3.0-flash-VL, LFM2.5-VL, MiniCPM-V-2, GLM-4.5V, GLM-OCR, Qwen3-VL 235B-A22B and 30B-A3B, Qwen3-Omni-30B-A3B, Kimi-VL-A3B, MiMo-VL-7B-RL, Step3-VL-10B, dots.ocr, PaddleOCR-VL, Cosmos3, deepseek-vl2, Janus-Pro-7B, NVILA-8B and gemma-3-4b-it, plus openai/whisper-large-v3 and Qwen3-ASR-1.7B on the audio route [[mdl2-sglang-multimodal-language-models]]. TRT-LLM's multimodal matrix covers a narrower set with an explicit per-row modality string and per-row Untested cells [[mdl2-trtllm-supported-models]]. Older GGUF-side engines reach the class through llama.cpp's projector graph, which llama.cpp-embedding-server states it cannot serve on the embedding route [[llama-cpp-embedding-server]]. PER-MODALITY CAVEATS CITED: TRT-LLM marks Gemma4Unified and MiniCPM-V 4.6 Untested for CUDA Graph / chunked prefill, MiniMax-M3 Untested for attention DP and KV cache reuse, Qwen4Exp Untested across the board, and notes audio requires a checkpoint with a sound_config and is supported only on the full non-disaggregated path [[mdl2-trtllm-supported-models]]. Step-3.7's vision tower runs in BF16 even when the text decoder is quantized [[mdl2-trtllm-supported-models]] - a precision asymmetry that silently costs memory. vLLM's fallback path accepts image inputs only, with video 'to be added in a future release' [[mdl2-vllm-supported-models-2026-10]].

Notes

THREE-PART MODEL plus a speech SYNTHESISIZER -- the broadest I/O surface of any record here. (1) Vision: SigLIP vision tower, 27 layers, hidden 1152, 16 heads, patch 14, image_size 980 (top-level image_size 448), with the same LLaVA-STYLE DESIGN AS MiniCPM-V: slice_mode, query_num 64 perceiver resampler, batch_vision_input true, drop_vision_last_layer false. VISION TOKENS: 64 per slice + 1 global, i.e. ~128 for a small image. DOMINANCE: TEXT DOMINATES at default tiling; vision stays bounded by the resampler exactly as in MiniCPM-V. That LLaVA-lineage design is worth stating plainly: MiniCPM did not invent the SigLIP + resampler + tiled-slice scheme, it took it from LLaVA and made it cheap enough for a small model. (2) AUDIO: a Whisper encoder -- audio_config._name_or_path is literally 'openai/whisper-medium', architectures MiniCPMWhisperEncoder, d_model 1024, encoder_layers 24, encoder_attention_heads 16, encoder_ffn_dim 4096 (a Whisper-medium-sized encoder, not large). audio_pool_step 2 halves the audio token rate; audio_chunk_length 1.0. AUDIO TOKENS: a Whisper encoder emits 1,500 frames per 30s chunk; with audio_pool_step 2 that is ~750 audio tokens per 30 seconds. ASYMMETRY WORTH RECORDING: the Whisper DECODER fields are present in the config (decoder_layers 24, forced_decoder_ids, a 70-entry suppress_tokens list, decoder_start_token_id) but MiniCPM-o uses that decoder to produce SPEECH, not text. Audio-to-text goes through the main LLM; audio-to-speech goes through the bundled Whisper decoder. (3) SPEECH OUTPUT: tts_config model_type 'conditional_chattts' with llm_dim 3584, i.e. a ChatTTS conditional generator keyed to the same LLM width. This makes MiniCPM-o bidirectional in audio, which no other record in this slice is. (4) LLM: Qwen2-7B dense decoder, 28 layers, hidden 3584, 28 heads / 4 KV, head_dim 128, intermediate 18944, vocab 151,700, max_position 32,768, rope_theta 1e6, use_sliding_window false (sliding_window 131072 is declared but disabled). ARCHITECTURE = dense. KV CACHE: 28 * 4 * 128 * 2 * 2 = 57,344 B/token. The bundled Whisper-medium decoder is small enough not to move this number. params_b 8.675 = HF API safetensors total (8,674,997,028).

SERVICEABILITY JOIN (added 2026-10-03; the architecture x engine matrix this record was missing, with a citation per cell in docs/13-model-compatibility.md): FAMILY=multimodal. REQUIRED KERNEL CLASS: an encoder tower (ViT / SigLIP / ConvNet / audio encoder) running on a SEPARATE schedule from the decoder, plus a projector into the decoder's embedding space, plus - for the mrope and DeepStack families - a multi-axis rotary scheme in the decoder rather than plain 1-D RoPE. Three engine-side consequences, all cited. (1) The encoder tower is a separate compute path, so its throughput is a different problem from decode throughput and engines that disclaim encoder throughput are disclaiming this. vLLM says so in its own words: 'We currently support pooling models primarily for convenience. This is not guaranteed to provide any performance improvements over using Hugging Face Transformers or Sentence Transformers directly' [[vllm-pooling-models]] - that is the general statement this class inherits. TRT-LLM's answer is a documented mechanism: a Multimodal Encoder Side Stream that prefetches encoder work on a separate CUDA stream plus a per-model Multimodal Embeddings Cache, currently available only for seven architectures (Gemma4, Gemma4Unified, Mistral3, Qwen3VL, Qwen3VLMoe, Qwen3_5, Qwen3_5Moe) [[mdl2-trtllm-supported-models]]. (2) Several towers carry hard external dependencies: Gemma3nForConditionalGeneration 'depends on timm>=1.0.17 to make use of its MobileNet-v5 vision backbone' and 'is only supported on V1 due to shared KV caching' [[mdl2-vllm-supported-models-2026-10]]; MiniCPM-V 4.6 requires transformers>=5.7.0 because it was upstreamed as a native model type [[mdl2-trtllm-supported-models]]. (3) Hybrid-only multimodal models expose a memory knob unique to this class: vLLM's --language-model-only flag sets all supported multimodal modalities to 0 so the multimodal modules are not loaded, 'to free up more GPU memory for KV cache' for Llama-4, Step3, Mistral-3 and Qwen-3.5 [[mdl2-vllm-supported-models-2026-10]].SUPPORTED BY (cited): vLLM native rows include InternVLChatModel and InternVLForConditionalGeneration, LlavaOnevisionForConditionalGeneration, LlavaNextForConditionalGeneration, MolmoForCausalLM and Molmo2ForConditionalGeneration, PaliGemmaForConditionalGeneration, SmolVLMForConditionalGeneration, Glm4vForConditionalGeneration, Qwen2VL/Qwen3VL, MiniCPMV, Mllama, Phi4MM, Gemma4, NemotronH_Nano_VL_V2, VoxtralForConditionalGeneration (which requires mistral-common[audio]) and Qwen3OmniMoeThinkerForConditionalGeneration [[mdl2-vllm-supported-models-2026-10]]. SGLang's multimodal table covers InternLM2-VL, LLaVA-OneVision, LLaVA-NeXT(-Video), Ling-3.0-flash-VL, LFM2.5-VL, MiniCPM-V-2, GLM-4.5V, GLM-OCR, Qwen3-VL 235B-A22B and 30B-A3B, Qwen3-Omni-30B-A3B, Kimi-VL-A3B, MiMo-VL-7B-RL, Step3-VL-10B, dots.ocr, PaddleOCR-VL, Cosmos3, deepseek-vl2, Janus-Pro-7B, NVILA-8B and gemma-3-4b-it, plus openai/whisper-large-v3 and Qwen3-ASR-1.7B on the audio route [[mdl2-sglang-multimodal-language-models]]. TRT-LLM's multimodal matrix covers a narrower set with an explicit per-row modality string and per-row Untested cells [[mdl2-trtllm-supported-models]]. Older GGUF-side engines reach the class through llama.cpp's projector graph, which llama.cpp-embedding-server states it cannot serve on the embedding route [[llama-cpp-embedding-server]]. PER-MODALITY CAVEATS CITED: TRT-LLM marks Gemma4Unified and MiniCPM-V 4.6 Untested for CUDA Graph / chunked prefill, MiniMax-M3 Untested for attention DP and KV cache reuse, Qwen4Exp Untested across the board, and notes audio requires a checkpoint with a sound_config and is supported only on the full non-disaggregated path [[mdl2-trtllm-supported-models]]. Step-3.7's vision tower runs in BF16 even when the text decoder is quantized [[mdl2-trtllm-supported-models]] - a precision asymmetry that silently costs memory. vLLM's fallback path accepts image inputs only, with video 'to be added in a future release' [[mdl2-vllm-supported-models-2026-10]].

Cross-references

This record references no other records — it is a leaf. It is cited by 0.