記事一覧に戻る

この記事は中国語版もご覧いただけます 简体中文

TLDR

SmolVLM ファミリーに 2 つの新モデル、SmolVLM-256M と SmolVLM-500M を追加することを発表します。256M パラメータという、世界最小の Vision Language Model が誕生しました!

SmolVLM 2B で得た知見を基に、効率性、データ構成、新しい設計上のトレードオフに重点を置いて開発しました。非常に小さなモデルサイズでありながら、高いマルチモーダル性能を維持するモデルペアの登場です。

今回のリリースでは 4 つのチェックポイントを提供します。ベースモデル 2 つと、256M および 500M パラメータの指示チューニング済みモデル 2 つです。これらのモデルは transformers、MLX、ONNX に直接読み込め、transformers および WebGPU(ONNX 版)のデモも用意しています。すべてのモデルとデモはこちらからご覧いただけます。

Benchmarks

目次

概要

  • SmolVLM-256M – 世界最小の VLM!
  • SmolVLM-500M – 5 億パラメータの兄弟モデル。メモリ使用量を抑えつつ、大幅な性能向上を実現。
  • 新しいビジョンエンコーダーの選択肢 – SmolVLM 2B や他の大規模 VLM で使用されている SigLIP 400M SO と、より小型の SigLIP base patch-16/512 を比較しました。大型エンコーダーは性能向上幅がわずかだったため、93M パラメータの SigLIP base patch-16/512 を採用しました。
  • 画像解像度の向上 – 小型ビジョンエンコーダーはより高解像度で画像を処理します(Apple の VLM 研究や Google の PaliGemma に着想を得ています)。これにより、パラメータ数の増加を最小限に抑えつつ、画像理解の精度が向上します。
  • 学習の最適化 – 新しいトークン化手法により、実世界のベンチマークが大幅に向上しました(学習損失の数値上は悪化しているように見えますが)。

これにより SmolLM2 ファミリー(135M、360M、1.7B)と同等のモデルサイズが揃い、小型 LLM と VLM の組み合わせを自由に試せるようになりました。

なぜさらに小型化するのか?

SmolVLM 2B のリリースに対するコミュニティの反応は非常に好意的でした。軽量でオープンソースかつ寛容なライセンス、既存のワークフローへの統合のしやすさが評価されました。しかし、制約のあるデバイスやコンシューマーラップトップ、さらにはブラウザ上での推論を想定するユーザーに向けて、さらに小型化を進めたいと考えました。そこで登場したのが、新たな 256M および 500M モデルです。一方で、大量のデータを処理したいユーザーにとっては、2B モデルに比べて大幅に低コストで動作します。

昨年、私たちは 80B の VLM を 2 つ学習し、それを 8B まで縮小しました。その後、SmolVLM では 2B へのさらなる縮小に挑戦しました。そこで得た学びは、限界をさらに押し広げられるということでした。256M と 500M というサイズでも優れた性能が得られることを示すことができ、嬉しく思います。新たな 256M モデルはこれまでで最小の VLM でありながら、わずか 17 か月前にリリースした Idefics 80B モデルを性能で上回っています。

Benchmarks

256M パラメータの巨人

わずか 2 億 5,600 万パラメータというサイズでありながら、これまでで最も小さな VLM となりました。小さいながらも、多くのマルチモーダルタスクで驚くべき性能を発揮します。

  • キャプション生成: 画像や短い動画の説明。
  • ドキュメント Q&A: PDF やスキャンされたテキストに関する質問への回答。
  • 基本的な視覚的推論: グラフや図に関する質問への回答。

ステップアップ:500M

メモリ使用量を抑えつつ、より高い性能を求める場合に適したのが、5 億パラメータの SmolVLM-500M です。従来の 2B モデルより大幅に小さく、DocVQA や MMMU などのタスクでより大きなモデルに近いスコアを達成しています。また、プロンプトに対する頑健性も高く、そのまま本番環境で使いやすいモデルです。どちらのモデルもファインチューニングでさらに性能を向上させられます。

さまざまなバッチサイズにおけるスループットの向上を下のグラフで可視化しています。数値は A100 上で計測したスループットベンチマークです。

Benchmarks

SmolVLM 2B からの変更点

1. ビジョンエンコーダーの選択 従来は多くの VLM アーキテクチャで使用されている標準的な SigLIP 400M SO ビジョンバックボーンを採用していました。小型モデルでは以下の 2 つの設定を比較しました。

  • SigLIP 400M SO: 高い容量と優れた性能。
  • SigLIP base patch-16/512 (93M): より小型で、性能は驚くほど近い。

256M および 500M モデルでは、性能差が大きいエンコーダーを使用するほどの差がなかったため、小型ビジョンエンコーダーを採用しました。副次的な利点として、小型エンコーダーはより高解像度で画像を処理でき、AppleGoogle の研究でも示されているように、パラメータ数を増やさずに視覚理解の精度を向上させることができます。

2. データ構成の更新

前回のリリースと同様に、The CauldronDocmatix を使用し、MathWriting を新たに追加しました。

Data mixture

データセットの割合を調整し、ドキュメント理解(41%)と画像キャプション(14%)に重点を置きつつ、視覚的推論、チャート理解、一般的な指示追従などの他の重要分野とのバランスも維持しました。この更新により、モデルは強力なドキュメント理解の基盤を持ちつつ、特定のタスク向けにファインチューニングできる柔軟性も確保しています。

3. トークン化の最適化

ピクセルシャッフルをさらに強化しました。新モデルでは 1 トークンあたり 4096 ピクセルで画像をエンコードします(2B モデルでは 1820 ピクセル/トークン)。

トークン化をさらに効率化するため、サブイメージセパレータを表す特別なトークンを追加しました。これにより、従来 <row_1_col_1> のような文字列が 7 トークンにマッピングされていたのが、1 トークンで表現できるようになりました。同様に <row_6_col_6> までの文字列にも適用しました。この変更により、学習中のモデルの安定性と結果の品質が大幅に向上しました。詳細はこちらの LinkedIn 投稿に記載されています。

4. SmolLM2-SmolVLM ファミリーの完成

SmolLM2 は 135M、360M、1.7B の 3 サイズで提供されていました。今回の 2 モデルにより、小型 LLM と VLM の完全な組み合わせが揃いました。

小型マルチモーダル検索:ColSmolVLM 256M & 500M

また、ファインチューニングや実験が非常に容易であることもわかりました。ColBERT 類似の検索モデルを担当するチームが ColSmolVLM を学習し、サイズの 10 倍のモデルに匹敵する性能で、SOTA のマルチモーダル検索速度を実現しました。SmolVLM により、検索可能なデータベースの構築がより高速かつ低コストになります。256M モデルは多くのタスクで優れた専用モデルになると考えています。新しい ColSmolVLM を新しい SmolVLM モデルと併用する方法は、次のステップでご確認ください。

Benchmarks

SmolDocling

IBM と協力し、Docling 向けのモデルを構築しました。256M モデルを用いた初期結果は非常に印象的です。以下に彼らから共有された初期の例を示します。今後のアップデートにご期待ください!

Benchmarks Benchmarks

新しい SmolVLM は既存の SmolVLM コードとそのまま動作するため、transformers と MLX で推論・ファインチューニングが可能で、TRL によるアライメントにも対応しています🚀。さらに、ONNX チェックポイントも提供しています。

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,
)

MLX で SmolVLM を使用するには、以下の CLI コマンドを実行します。

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-Instruct および SmolVLM-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}
}

次のステップ

ColSmolVLM の学習を担当してくださった ViDoRe チーム:Tony WuManuel Faysse、ONNX 変換と WebGPU デモを担当してくださった Joshua Lochner、本リリースの支援をしてくださった Vaibhav Srivastav に感謝いたします。