SmolVLM 體積再創新低——隆重推出 2.5 億和 5 億引數模型!

釋出於 2025 年 1 月 23 日
在 GitHub 上更新

TLDR (太長不看)

我們激動地宣佈 SmolVLM 家族迎來兩位新成員:SmolVLM-256M 和 SmolVLM-500M。沒錯,僅有 2.56 億引數,使其成為全球最小的視覺語言模型!

我們基於從 SmolVLM 2B 中學到的一切,同時專注於效率、資料混合和新的設計權衡。我們很高興能推出這樣一對模型,它們在極小的體量下依然保持了強大的多模態效能。

本次釋出包含四個 checkpoints:兩個基礎模型和兩個指令微調模型,引數量分別為 2.56 億和 5 億。這些模型可直接載入到 transformers、MLX 和 ONNX 中,我們還提供了 transformers 和 WebGPU (使用 ONNX) 的演示。您可以在此處找到本次釋出的所有模型和演示。

Benchmarks

目錄

概覽

  • SmolVLM-256M – 全球最小的 VLM!
  • SmolVLM-500M – 一個擁有 5 億引數的同系列模型,效能顯著提升,同時保持超輕量級。
  • 新的視覺編碼器選擇 – 我們比較了 SigLIP 400M SO (用於 SmolVLM 2B 和許多其他大型 VLM) 與一個更小的 SigLIP base patch-16/512。令人驚訝的是,更大的編碼器僅帶來了微不足道的效能提升,因此在這些新版本中我們選擇了 9300 萬引數的 SigLIP base patch-16/512。
  • 更高的影像解析度 – 我們的小型視覺編碼器能處理更高解析度的影像 (靈感來自蘋果的 VLM 研究和谷歌的 PaliGemma)。這以極小的開銷帶來了更清晰的影像理解能力。
  • 訓練最佳化 – 一個新的分詞技巧顯著提升了真實世界基準測試的成績,儘管它在紙面上讓訓練損失看起來更差了。

我們現在正努力讓模型與 SmolLM2 家族 (1.35 億、3.6 億、17 億引數) 保持一致,這樣您就有一套完整的更小型的 LLM + VLM 組合可供使用。

為何要追求更小的模型?

當我們釋出 SmolVLM 2B 時,社群反響熱烈:模型非常輕量、開源且寬鬆許可,並且易於整合到現有工作流程中。但我們希望為那些在受限裝置、消費級筆記型電腦,甚至可能在瀏覽器中進行推理的使用者,將這種方法推向極致。這就是我們新的 2.56 億和 5 億引數模型的由來。另一方面,對於需要處理海量資料的人來說,這些模型的執行成本僅為 2B 模型的一小部分。

在過去的一年裡,我們訓練了兩個 800 億引數的 VLM,並將它們縮小到 80 億。然後,對於 SmolVLM,我們接受了將其縮小到 20 億的挑戰。我們學到的是,我們可以將極限推得更遠!我們很高興地展示,在 2.56 億和 5 億引數下,我們仍然可以獲得出色的效能。我們新的 2.56 億引數模型是有史以來發布的最小 VLM,但其效能甚至超過了我們僅在 17 個月前釋出的 Idefics 80B 模型。

Benchmarks

認識 2.56 億引數的“小巨人”

該模型僅有 2.56 億引數,是迄今為止最小的 VLM。儘管體積小,但它的能力卻出人意料地強大。它在許多多模態任務上都表現出色,包括

  • 影像/影片描述 (Captioning):描述影像或短影片。
  • 文件問答 (Document Q&A):回答關於 PDF 或掃描文字的問題。
  • 基礎視覺推理:回答關於圖表或示意圖的問題。

更進一步:5 億引數模型

如果您需要更高的效能空間,同時仍希望保持低記憶體佔用,SmolVLM-500M 是我們推出的 5 億引數折衷方案。它比之前的 2B 版本小得多,但在 DocVQA 和 MMMU 等任務上的得分更接近於更大的模型。我們還發現這個模型對提示詞 (prompt) 的魯棒性更強,這使得它開箱即用,更適合生產環境。當然,兩個模型在微調後都表現出色。

我們在下圖中可視化了不同批次大小下的吞吐量增益。以下資料是在 A100 上執行的吞吐量基準測試。

Benchmarks

自 SmolVLM 2B 以來有何變化?

1. 視覺編碼器選擇 之前,我們使用了標準的 SigLIP 400M SO 視覺骨幹網路,這與許多 VLM 架構中的相同。對於這些更小的模型,我們實驗了兩種設定:

  • SigLIP 400M SO:容量更高,效能出色。
  • SigLIP base patch-16/512 (93M):體積小得多,效能驚人地接近。

我們發現,對於我們的 2.56 億和 5 億引數模型來說,效能差距不足以證明使用更重的編碼器是合理的。因此,我們決定在視覺編碼器上也選擇小型化。另外一個好處是,較小的編碼器能以更高的解析度處理影像,根據 蘋果谷歌 的研究,這通常可以在不增加引數數量的情況下帶來更好的視覺理解能力。

2. 資料混合更新

與我們之前的版本類似,我們依賴於 The CauldronDocmatix,並在此基礎上加入了 MathWriting

Data mixture

我們調整了資料集的比例,更側重於文件理解 (41%) 和影像描述 (14%),同時仍然保持對視覺推理、圖表理解和通用指令遵循等其他關鍵領域的均衡關注。透過這次更新,模型建立在強大的文件理解基礎上,併為後續透過微調來調整其對特定任務的理解能力敞開了大門。

3. 分詞最佳化

我們進一步增加了畫素洗牌 (pixel shuffle)!我們的新模型以每 token 4096 畫素的速率對影像進行編碼,而 2B 模型的速率為每 token 1820 畫素。

為了進一步最佳化分詞,我們添加了特殊 token 來更高效地表示我們的子影像分隔符。這意味著像 <row_1_col_1> 這樣的字串現在被對映為單個 token,而不是 7 個 token。我們對最多到 <row_6_col_6> 的字串也做了同樣的處理。這大大提高了模型在訓練期間的穩定性和結果的質量。更多細節記錄在這篇 LinkedIn 帖子中。

4. 完善 SmolLM2-SmolVLM 家族

SmolLM2 有三種尺寸:1.35 億、3.6 億和 17 億。隨著我們今天釋出的這兩款模型,我們現在有了一套完整的更小型的 LLM + VLM 組合可供使用。

更小的多模態檢索模型:ColSmolVLM 256M 和 500M

我們還發現,微調和實驗出奇地容易。ColBERT-like 檢索模型背後的團隊已經訓練了 ColSmolVLM,實現了 SOTA (State-of-the-Art,最先進) 的多模態檢索速度,其效能可與體積大 10 倍的模型相媲美。SmolVLM 使構建可搜尋資料庫更快、更便宜。我們認為 2.56 億引數模型可以成為許多工的優秀專用模型。請在後續步驟部分找到如何使用新的 ColSmolVLM 和 SmolVLM 模型的連結。

Benchmarks

SmolDocling

我們與 IBM 合作,為 Docling 構建模型。他們使用 2.56 億引數模型的早期結果令人印象深刻。以下是他們與我們分享的一些早期示例。敬請關注更多相關更新!

Benchmarks Benchmarks

使用更小的 SmolVLM

新的 SmolVLM 模型開箱即用,與舊的 SmolVLM 程式碼相容,因此您可以使用 transformers 和 MLX 進行推理和微調,使用 TRL 進行對齊 🚀 此外,此版本還附帶 ONNX checkpoints。

像下面這樣開始使用 transformers 和 SmolVLM。

import torch
from transformers import AutoProcessor, AutoModelForVision2Seq

# Initialize processor and model
processor = AutoProcessor.from_pretrained("HuggingFaceTB/SmolVLM-500M-Instruct")
model = AutoModelForVision2Seq.from_pretrained(
    "HuggingFaceTB/SmolVLM-500M-Instruct",
    torch_dtype=torch.bfloat16,
    _attn_implementation="flash_attention_2" if DEVICE == "cuda" else "eager",
)

# Create input messages
messages = [
    {
        "role": "user",
        "content": [
            {"type": "image"},
            {"type": "text", "text": "Can you describe this image?"}
        ]
    },
]

# Preprocess
prompt = processor.apply_chat_template(messages, add_generation_prompt=True)
inputs = processor(text=prompt, images=[image], return_tensors="pt")

# Generate
generated_ids = model.generate(**inputs, max_new_tokens=500)
generated_texts = processor.batch_decode(
    generated_ids,
    skip_special_tokens=True,
)

透過執行以下 CLI 命令來使用 MLX 和 SmolVLM

python3 -m mlx_vlm.generate --model HuggingfaceTB/SmolVLM-500M-Instruct --max-tokens 400 --temp 0.0 --image https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/vlm_example.jpg --prompt "What is in this image?"
MLX

您可以試用 SmolVLM-256M-InstructSmolVLM-500M-Instruct 的 WebGPU 演示。

請在後續步驟中查詢有關使用 ColSmolVLM 進行微調和多模態 RAG 的連結。

引用資訊

您可以按以下方式引用我們

@article{marafioti2025smolvlm,
  title={SmolVLM: Redefining small and efficient multimodal models}, 
  author={Andrés Marafioti and Orr Zohar and Miquel Farré and Merve Noyan and Elie Bakouch and Pedro Cuenca and Cyril Zakka and Loubna Ben Allal and Anton Lozhkov and Nouamane Tazi and Vaibhav Srivastav and Joshua Lochner and Hugo Larcher and Mathieu Morlon and Lewis Tunstall and Leandro von Werra and Thomas Wolf},
  journal={arXiv preprint arXiv:2504.05299},
  year={2025}
}

後續步驟

我們要感謝 ViDoRe 團隊訓練了 ColSmolVLM:Tony WuManuel Faysse,以及 Joshua Lochner 的 ONNX 轉換和 WebGPU 演示,還有 Vaibhav Srivastav 對本次釋出的幫助。

社群

看好這個!

很棒的部落格文章!恭喜釋出。

個人而言,我認為在單語基準測試中將單語模型與多語模型進行比較是不公平的。再說了,在 2025 年,單語模型還有那麼重要嗎?現實世界中已經沒有單語模型的用例了。

·

我開始覺得,在某些用例中,如果一個單語(因此很小)模型能夠完成一個特定的細分任務,並且我們想在一個智慧體工作流中連結或並行化許多這樣的小模型,那麼預先由一個多語模型翻譯原始提示甚至是合理的。

❤️

你們把 ColSmal 和微調的連結弄反了
很棒的工作

未提供描述。
此評論已被隱藏

註冊登入 以發表評論

© . This site is unofficial and not affiliated with Hugging Face, Inc.