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

SmolVLM2-2.2B-Instruct

dense 2.247B

Fields

id
models/smolvlm2-2-2b-instruct
Family
smolvlm2
Vendor
Hugging Face (HuggingFaceTB)
Release year
2025
Architecture
dense
Params (B)
2.247
Active params (B)
2.247
Hidden size
2,048
Layers
24
KV heads
32
Head dim
64
GQA ratio
1
Max context
8,192
Context scaling method
native
Activation
silu
Attention variant
MHA (no GQA)
KV cache (bytes/token)
196,608
FLOPs per active token
4,494,000,000
Open weights
yes
License
apache-2.0
notes
CONTEXT SCALING: null is a VERIFIED value, checked against config rather than left blank. config.json declares rope_scaling null, rope_theta 130000, max_position_embeddings 8192. TWO-PART MODEL. Same efficiency thesis as SmolVLM, smaller text tower. (1) Vision: model_type smolvlm_vision, 27 layers, patch 14, image_size 384, use_base_siglip false (a trained-from-scratch vision tower rather than a frozen SigLIP), with pixel_shuffle_factor 3 and the same 64-latent perceiver resampler (resampler_depth 6, resampler_head_dim 96, resampler_n_heads 16, resampler_n_latents 64). VISION TOKENS = FIXED AT 64 PER IMAGE regardless of resolution, inherited from the Idefics3 design. DOMINANCE: TEXT DOMINATES -- 64 vision tokens. (2) LLM: VLlama3 dense decoder. text_config OMITS num_attention_heads, num_key_value_heads and hidden_act, so those were read from safetensors tensor shapes in the repo: q_proj/k_proj/v_proj/o_proj all [2048,2048] at layers 0 and 23, mlp gate/up [8192,2048], down [2048,8192] -> hidden 2048, intermediate 8192, 24 layers, MHA with 32 heads of head_dim 64 (head_dim 64 is stated in config), lm_head [49280,2048], vocab 49,280, max_position 8,192. ARCHITECTURE = dense. Method note: the [2048,2048] K-projection confirms 32 KV heads x 64 head_dim; the same tensor-shape method was validated against Qwen2.5-VL-7B (k_proj [512,3584] = 4 x 128, exactly matching num_key_value_heads 4, head_dim 128) before being trusted here. KV CACHE: 24 * 32 * 64 * 2 * 2 = 196,608 B/token -- identical to SmolVLM-2.2B, still MHA. params_b 2.247 = HF API safetensors total (2,246,784,880). 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]]. CONTEXT_SCALING_METHOD (native): rope_scaling null at theta 130000 over 8192.

Notes

CONTEXT SCALING: null is a VERIFIED value, checked against config rather than left blank. config.json declares rope_scaling null, rope_theta 130000, max_position_embeddings 8192. TWO-PART MODEL. Same efficiency thesis as SmolVLM, smaller text tower. (1) Vision: model_type smolvlm_vision, 27 layers, patch 14, image_size 384, use_base_siglip false (a trained-from-scratch vision tower rather than a frozen SigLIP), with pixel_shuffle_factor 3 and the same 64-latent perceiver resampler (resampler_depth 6, resampler_head_dim 96, resampler_n_heads 16, resampler_n_latents 64). VISION TOKENS = FIXED AT 64 PER IMAGE regardless of resolution, inherited from the Idefics3 design. DOMINANCE: TEXT DOMINATES -- 64 vision tokens. (2) LLM: VLlama3 dense decoder. text_config OMITS num_attention_heads, num_key_value_heads and hidden_act, so those were read from safetensors tensor shapes in the repo: q_proj/k_proj/v_proj/o_proj all [2048,2048] at layers 0 and 23, mlp gate/up [8192,2048], down [2048,8192] -> hidden 2048, intermediate 8192, 24 layers, MHA with 32 heads of head_dim 64 (head_dim 64 is stated in config), lm_head [49280,2048], vocab 49,280, max_position 8,192. ARCHITECTURE = dense. Method note: the [2048,2048] K-projection confirms 32 KV heads x 64 head_dim; the same tensor-shape method was validated against Qwen2.5-VL-7B (k_proj [512,3584] = 4 x 128, exactly matching num_key_value_heads 4, head_dim 128) before being trusted here. KV CACHE: 24 * 32 * 64 * 2 * 2 = 196,608 B/token -- identical to SmolVLM-2.2B, still MHA. params_b 2.247 = HF API safetensors total (2,246,784,880).

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]].

CONTEXT_SCALING_METHOD (native): rope_scaling null at theta 130000 over 8192.

Cross-references

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