
Model Overview
Model Features
Model Capabilities
Use Cases
🚀 SmolLM3
SmolLM3はパラメータが30億の言語モデルで、小規模モデルの性能限界を突破することを目指しています。このモデルは6つの言語をサポートし、高度な推論能力と長文脈処理能力を備えており、完全にオープンソースのモデルで、30 - 40億パラメータ規模で優れた性能を発揮します。
🚀 クイックスタート
SmolLM3のモデリングコードはtransformers v4.53.0
バージョンで利用可能です。したがって、transformersのバージョンをアップグレードしてください。最新の vllm
を使用してモデルをロードすることもでき、これはtransformersをバックエンドとして使用します。
pip install -U transformers
from transformers import AutoModelForCausalLM, AutoTokenizer
model_name = "HuggingFaceTB/SmolLM3-3B"
device = "cuda" # GPUを使用する場合は "cuda"、CPUを使用する場合は "cpu"
# トークナイザーとモデルをロード
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(
model_name,
).to(device)
# モデル入力を準備
prompt = "Give me a brief explanation of gravity in simple terms."
messages_think = [
{"role": "user", "content": prompt}
]
text = tokenizer.apply_chat_template(
messages_think,
tokenize=False,
add_generation_prompt=True,
)
model_inputs = tokenizer([text], return_tensors="pt").to(model.device)
# 出力を生成
generated_ids = model.generate(**model_inputs, max_new_tokens=32768)
# 出力を取得してデコード
output_ids = generated_ids[0][len(model_inputs.input_ids[0]) :]
print(tokenizer.decode(output_ids, skip_special_tokens=True))
💡 使用アドバイス
サンプリングパラメータに
temperature=0.6
とtop_p=0.95
を設定することをおすすめします。
✨ 主な機能
- 混合推論に最適化された命令モデル
- 完全なオープンソースモデル:オープンな重みと完全なトレーニング詳細(公開されたデータミックスとトレーニング設定を含む)
- 長文脈処理:64kの文脈でトレーニングされ、YARN外挿を使用して最大128kのトークンをサポート
- 多言語対応:6つの言語(英語、フランス語、スペイン語、ドイツ語、イタリア語、ポルトガル語)をネイティブでサポート
詳細情報はこちらのブログ記事を参照してください:https://hf.co/blog/smollm3
📦 インストール
SmolLM3を使用するには、transformersのバージョンが v4.53.0
であることを確認し、以下のコマンドでアップグレードしてください。
pip install -U transformers
💻 使用例
基本的な使用法
from transformers import AutoModelForCausalLM, AutoTokenizer
model_name = "HuggingFaceTB/SmolLM3-3B"
device = "cuda" # GPUを使用する場合は "cuda"、CPUを使用する場合は "cpu"
# トークナイザーとモデルをロード
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(
model_name,
).to(device)
# モデル入力を準備
prompt = "Give me a brief explanation of gravity in simple terms."
messages_think = [
{"role": "user", "content": prompt}
]
text = tokenizer.apply_chat_template(
messages_think,
tokenize=False,
add_generation_prompt=True,
)
model_inputs = tokenizer([text], return_tensors="pt").to(model.device)
# 出力を生成
generated_ids = model.generate(**model_inputs, max_new_tokens=32768)
# 出力を取得してデコード
output_ids = generated_ids[0][len(model_inputs.input_ids[0]) :]
print(tokenizer.decode(output_ids, skip_special_tokens=True))
長文脈処理
現在の config.json
設定では、最大65,536トークンの文脈長をサポートしています。より長い入力(128kまたは256k)を処理するには、YaRNを使用し、max_position_embeddings
と rope_scaling
を以下のように変更してください。
{
...,
"rope_scaling": {
"factor": 2.0, #2x65536=131 072
"original_max_position_embeddings": 65536,
"type": "yarn"
}
}
拡張思考モードの有効化と無効化
デフォルトでは拡張思考モードが有効になっているため、上記の例では推論軌跡付きの出力が生成されます。拡張思考モードを有効にするかどうかを選択するには、システムプロンプトで /think
と /no_think
フラグを提供します。以下は拡張思考モードを無効にするコードの例です。
prompt = "Give me a brief explanation of gravity in simple terms."
messages = [
{"role": "system", "content": "/no_think"},
{"role": "user", "content": prompt}
]
text = tokenizer.apply_chat_template(
messages,
tokenize=False,
add_generation_prompt=True,
)
enable_thinking
キーワード引数を使用して、拡張思考モードを使用するかどうかを指定することもできます。以下はその例です。
prompt = "Give me a brief explanation of gravity in simple terms."
messages = [
{"role": "user", "content": prompt}
]
text = tokenizer.apply_chat_template(
messages,
tokenize=False,
add_generation_prompt=True,
enable_thinking=False
)
代理式使用
SmolLM3はツール呼び出しをサポートしています!ツールリストを渡すだけです。
xml_tools
パラメータで標準のツール呼び出しを行います。これらのツールはXMLタグ内のJSONブロックとして呼び出されます。例:<tool_call>{"name": "get_weather", "arguments": {"city": "Copenhagen"}}</tool_call>
- または
python_tools
パラメータで、モデルは<code>
コードスニペット内でPython関数のようにツールを呼び出します。例:<code>get_weather(city="Copenhagen")</code>
from transformers import AutoModelForCausalLM, AutoTokenizer
checkpoint = "HuggingFaceTB/SmolLM3-3B"
tokenizer = AutoTokenizer.from_pretrained(checkpoint)
model = AutoModelForCausalLM.from_pretrained(checkpoint)
tools = [
{
"name": "get_weather",
"description": "Get the weather in a city",
"parameters": {"type": "object", "properties": {"city": {"type": "string", "description": "The city to get the weather for"}}}}
]
messages = [
{
"role": "user",
"content": "Hello! How is the weather today in Copenhagen?"
}
]
inputs = tokenizer.apply_chat_template(
messages,
enable_thinking=False, # True でもOK、自由に選択できます!
xml_tools=tools,
add_generation_prompt=True,
tokenize=True,
return_tensors="pt"
)
outputs = model.generate(inputs)
print(tokenizer.decode(outputs[0]))
カスタムシステム命令の使用
システムプロンプトを使用してカスタム命令を指定し、拡張思考モードを制御することができます。例えば、以下のコードは拡張思考モードを有効にしながら、モデルに海賊のように話させる方法を示しています。
prompt = "Give me a brief explanation of gravity in simple terms."
messages = [
{"role": "system", "content": "Speak like a pirate./think"},
{"role": "user", "content": prompt}
]
text = tokenizer.apply_chat_template(
messages,
tokenize=False,
add_generation_prompt=True,
)
ローカル推論には、llama.cpp
、ONNX
、MLX
、MLC
を使用できます。量子化されたチェックポイントはこのコレクション(https://huggingface.co/collections/HuggingFaceTB/smollm3-686d33c1fdffe8e635317e23)で見つけることができます。
vLLMとSGLang
vLLMとSGLangを使用して、モデルをOpenAI形式と互換性のあるAPIとしてデプロイすることができます。
SGLang
python -m sglang.launch_server --model-path HuggingFaceTB/SmolLM3-3B
vLLM
vllm serve HuggingFaceTB/SmolLM3-3B
chat_template_kwargs
の設定
APIリクエストで chat_template_kwargs
パラメータを渡すことで、デプロイされたモデルに chat_template_kwargs
(例:enable_thinking
や xml_tools
)を指定できます。
curl http://localhost:8000/v1/chat/completions -H "Content-Type: application/json" -d '{
"model": "HuggingFaceTB/SmolLM3-3B",
"messages": [
{"role": "user", "content": "Give me a brief explanation of gravity in simple terms."}
],
"temperature": 0.6,
"top_p": 0.95,
"max_tokens": 16384,
"chat_template_kwargs": {"enable_thinking": false}
}'
📚 ドキュメント
評価
このセクションでは、SmolLM3モデルの評価結果を報告しています。特に明記しない限り、すべての評価はゼロショット評価であり、lighteval を使用して評価しています。
最高のスコアは太字で、2番目に良いスコアは下線で強調しています。
命令モデル
拡張思考モードなし
非推論モデルと推論モデルの思考モードなしでの評価結果です。最高と2番目に良いスコアを太字で強調しています。
カテゴリ | 指標 | SmoLLM3 - 3B | Qwen2.5 - 3B | Llama3.1 - 3B | Qwen3 - 1.7B | Qwen3 - 4B |
---|---|---|---|---|---|---|
高校数学コンテスト | AIME 2025 | 9.3 | 2.9 | 0.3 | 8.0 | 17.1 |
数学問題解決 | GSM - Plus | 72.8 | 74.1 | 59.2 | 68.3 | 82.1 |
コンテストプログラミング | LiveCodeBench v4 | 15.2 | 10.5 | 3.4 | 15.0 | 24.9 |
大学院レベルの推論 | GPQA Diamond | 35.7 | 32.2 | 29.4 | 31.8 | 44.4 |
命令遵守 | IFEval | 76.7 | 65.6 | 71.6 | 74.0 | 68.9 |
アライメント | MixEval Hard | 26.9 | 27.6 | 24.9 | 24.3 | 31.6 |
ツール呼び出し | BFCL | 92.3 | - | 92.3 * | 89.5 | 95.0 |
多言語質問応答 | Global MMLU | 53.5 | 50.54 | 46.8 | 49.5 | 65.1 |
(*): これはツール呼び出しの微調整モデルです。
拡張思考モード
SmolLM3とQwen3モデルの推論モードでの評価結果です。
カテゴリ | 指標 | SmoLLM3 - 3B | Qwen3 - 1.7B | Qwen3 - 4B |
---|---|---|---|---|
高校数学コンテスト | AIME 2025 | 36.7 | 30.7 | 58.8 |
数学問題解決 | GSM - Plus | 83.4 | 79.4 | 88.2 |
コンテストプログラミング | LiveCodeBench v4 | 30.0 | 34.4 | 52.9 |
大学院レベルの推論 | GPQA Diamond | 41.7 | 39.9 | 55.3 |
命令遵守 | IFEval | 71.2 | 74.2 | 85.4 |
アライメント | MixEval Hard | 30.8 | 33.9 | 38.0 |
ツール呼び出し | BFCL | 88.8 | 88.8 | 95.5 |
多言語質問応答 | Global MMLU | 64.1 | 62.3 | 73.3 |
基礎事前学習モデル
英語ベンチマークテスト
注意:特に明記しない限り、すべての評価はゼロショット評価です。Ruler 64k評価では、32k文脈のQwenモデルにYaRNを適用して文脈長を外挿しています。
カテゴリ | 指標 | SmolLM3 - 3B | Qwen2.5 - 3B | Llama3 - 3.2B | Qwen3 - 1.7B - Base | Qwen3 - 4B - Base |
---|---|---|---|---|---|---|
推論と常識 | HellaSwag | 76.15 | 74.19 | 75.52 | 60.52 | 74.37 |
ARC - CF (平均) | 65.61 | 59.81 | 58.58 | 55.88 | 62.11 | |
Winogrande | 58.88 | 61.41 | 58.72 | 57.06 | 59.59 | |
CommonsenseQA | 55.28 | 49.14 | 60.60 | 48.98 | 52.99 | |
知識と理解 | MMLU - CF (平均) | 44.13 | 42.93 | 41.32 | 39.11 | 47.65 |
MMLU Pro CF | 19.61 | 16.66 | 16.42 | 18.04 | 24.92 | |
MMLU Pro MCF | 32.70 | 31.32 | 25.07 | 30.39 | 41.07 | |
PIQA | 78.89 | 78.35 | 78.51 | 75.35 | 77.58 | |
OpenBookQA | 40.60 | 40.20 | 42.00 | 36.40 | 42.40 | |
BoolQ | 78.99 | 73.61 | 75.33 | 74.46 | 74.28 | |
数学とコード | ||||||
コーディングと数学 | HumanEval+ | 30.48 | 34.14 | 25.00 | 43.29 | 54.87 |
MBPP+ | 52.91 | 52.11 | 38.88 | 59.25 | 63.75 | |
MATH (4 - サンプル) | 46.10 | 40.10 | 7.44 | 41.64 | 51.20 | |
GSM8k (5 - サンプル) | 67.63 | 70.13 | 25.92 | 65.88 | 74.14 | |
長文脈 | ||||||
Ruler 32k | 76.35 | 75.93 | 77.58 | 70.63 | 83.98 | |
Ruler 64k | 67.85 | 64.90 | 72.93 | 57.18 | 60.29 | |
Ruler 128k | 61.03 | 62.23 | 71.30 | 43.03 | 47.23 |
多言語ベンチマークテスト
カテゴリ | 指標 | SmolLM3 3B Base | Qwen2.5 - 3B | Llama3.2 3B | Qwen3 1.7B Base | Qwen3 4B Base |
---|---|---|---|---|---|---|
主要サポート言語 | ||||||
フランス語 | MLMM Hellaswag | 63.94 | 57.47 | 57.66 | 51.26 | 61.00 |
Belebele | 51.00 | 51.55 | 49.22 | 49.44 | 55.00 | |
Global MMLU (CF) | 38.37 | 34.22 | 33.71 | 34.94 | 41.80 | |
Flores - 200 (5 - サンプル) | 62.85 | 61.38 | 62.89 | 58.68 | 65.76 | |
スペイン語 | MLMM Hellaswag | 65.85 | 58.25 | 59.39 | 52.40 | 61.85 |
Belebele | 47.00 | 48.88 | 47.00 | 47.56 | 50.33 | |
Global MMLU (CF) | 38.51 | 35.84 | 35.60 | 34.79 | 41.22 | |
Flores - 200 (5 - サンプル) | 48.25 | 50.00 | 44.45 | 46.93 | 50.16 | |
ドイツ語 | MLMM Hellaswag | 59.56 | 49.99 | 53.19 | 46.10 | 56.43 |
Belebele | 48.44 | 47.88 | 46.22 | 48.00 | 53.44 | |
Global MMLU (CF) | 35.10 | 33.19 | 32.60 | 32.73 | 38.70 | |
Flores - 200 (5 - サンプル) | 56.60 | 50.63 | 54.95 | 52.58 | 50.48 | |
イタリア語 | MLMM Hellaswag | 62.49 | 53.21 | 54.96 | 48.72 | 58.76 |
Belebele | 46.44 | 44.77 | 43.88 | 44.00 | 48.78 | |
Global MMLU (CF) | 36.99 | 33.91 | 32.79 | 35.37 | 39.26 | |
Flores - 200 (5 - サンプル) | 52.65 | 54.87 | 48.83 | 48.37 | 49.11 | |
ポルトガル語 | MLMM Hellaswag | 63.22 | 57.38 | 56.84 | 50.73 | 59.89 |
Belebele | 47.67 | 49.22 | 45.00 | 44.00 | 50.00 | |
Global MMLU (CF) | 36.88 | 34.72 | 33.05 | 35.26 | 40.66 | |
Flores - 200 (5 - サンプル) | 60.93 | 57.68 | 54.28 | 56.58 | 63.43 |
このモデルはアラビア語(標準)、中国語、ロシア語のデータでもトレーニングされていますが、上記の6つの言語と比較すると、これらの言語のトークン数は少ないです。これらの言語の性能は参考として報告しています。
カテゴリ | 指標 | SmolLM3 3B Base | Qwen2.5 - 3B | Llama3.2 3B | Qwen3 1.7B Base | Qwen3 4B Base |
---|---|---|---|---|---|---|
その他サポート言語 | ||||||
アラビア語 | Belebele | 40.22 | 44.22 | 45.33 | 42.33 | 51.78 |
Global MMLU (CF) | 28.57 | 28.81 | 27.67 | 29.37 | 31.85 | |
Flores - 200 (5 - サンプル) | 40.22 | 39.44 | 44.43 | 35.82 | 39.76 | |
中国語 | Belebele | 43.78 | 44.56 | 49.56 | 48.78 | 53.22 |
Global MMLU (CF) | 36.16 | 33.79 | 39.57 | 38.56 | 44.55 | |
Flores - 200 (5 - サンプル) | 29.17 | 33.21 | 31.89 | 25.70 | 32.50 | |
ロシア語 | Belebele | 47.44 | 45.89 | 47.44 | 45.22 | 51.44 |
Global MMLU (CF) | 36.51 | 32.47 | 34.52 | 34.83 | 38.80 | |
Flores - 200 (5 - サンプル) | 47.13 | 48.74 | 50.74 | 54.70 | 60.53 |
トレーニング
モデル
- アーキテクチャ:Transformerデコーダ
- 事前学習トークン:11T
- 精度:bfloat16
ソフトウェアとハードウェア
オープンリソース
以下はすべてのトレーニング詳細を含む情報グラフです。
- 事前学習に使用されるデータセットはこの コレクション で見つけることができ、トレーニング中とトレーニング後に使用されるデータセットは後でアップロードされます。
- トレーニングと評価の設定およびコードは huggingface/smollm リポジトリで見つけることができます。
🔧 技術詳細
SmolLM3はデコーダのみのTransformerモデルで、GQAとNoPE(比率3:1)を使用しています。11.2Tのトークンで事前学習され、Web、コード、数学、推論データを含む段階的なカリキュラムを採用しています。トレーニング後には、140Bの推論トークンで中期トレーニングを行い、その後に教師付き微調整を行い、アンカー付き嗜好最適化(APO)でアライメントを行っています。
📄 ライセンス
⚠️ 制限事項
SmolLM3は様々なトピックのテキストを生成することができますが、生成される内容は必ずしも事実的に正確であったり、論理的に一貫していたり、トレーニングデータに存在するバイアスの影響を受けないとは限りません。これらのモデルは補助ツールとして使用するべきであり、情報の最終的なソースではありません。ユーザーは常に重要な情報を検証し、生成された内容を批判的に評価する必要があります。



