HuggingFace/Dense

SmolLM2 1.7B

chatTool Use
1.71B
Parameters
8K
Context length
8
Benchmarks
4
Quantizations
400K
HF downloads
Architecture
Dense
Released
2024-11-21
Layers
24
KV Heads
32
Head Dim
64
Family
smollm

SmolLM2

Table of Contents

  1. Model Summary
  2. Evaluation
  3. Examples
  4. Limitations
  5. Training
  6. License
  7. Citation

Model Summary

SmolLM2 is a family of compact language models available in three size: 135M, 360M, and 1.7B parameters. They are capable of solving a wide range of tasks while being lightweight enough to run on-device. More details in our paper: https://arxiv.org/abs/2502.02737v1

The 1.7B variant demonstrates significant advances over its predecessor SmolLM1-1.7B, particularly in instruction following, knowledge, reasoning, and mathematics. It was trained on 11 trillion tokens using a diverse dataset combination: FineWeb-Edu, DCLM, The Stack, along with new mathematics and coding datasets that we curated and will release soon. We developed the instruct version through supervised fine-tuning (SFT) using a combination of public datasets and our own curated datasets. We then applied Direct Preference Optimization (DPO) using UltraFeedback.

The instruct model additionally supports tasks such as text rewriting, summarization and function calling thanks to datasets developed by Argilla such as Synth-APIGen-v0.1. You can find the SFT dataset here: https://huggingface.co/datasets/HuggingFaceTB/smoltalk.

For more details refer to: https://github.com/huggingface/smollm. You will find pre-training, post-training, evaluation and local inference code.

How to use

Transformers

pip install transformers
from transformers import AutoModelForCausalLM, AutoTokenizer
checkpoint = "HuggingFaceTB/SmolLM2-1.7B-Instruct"

device = "cuda" # for GPU usage or "cpu" for CPU usage
tokenizer = AutoTokenizer.from_pretrained(checkpoint)
# for multiple GPUs install accelerate and do `model = AutoModelForCausalLM.from_pretrained(checkpoint, device_map="auto")`
model = AutoModelForCausalLM.from_pretrained(checkpoint).to(device)

messages = [{"role": "user", "content": "What is the capital of France."}]
input_text=tokenizer.apply_chat_template(messages, tokenize=False)
inputs = tokenizer.encode(input_text, return_tensors="pt").to(device)
outputs = model.generate(inputs, max_new_tokens=50, temperature=0.2, top_p=0.9, do_sample=True)
print(tokenizer.decode(outputs[0]))

Chat in TRL

You can also use the TRL CLI to chat with the model from the terminal:

pip install trl
trl chat --model_name_or_path HuggingFaceTB/SmolLM2-1.7B-Instruct --device cpu

Transformers.js

npm i @huggingface/transformers
import { pipeline } from "@huggingface/transformers";

// Create a text generation pipeline
const generator = await pipeline(
  "text-generation",
  "HuggingFaceTB/SmolLM2-1.7B-Instruct",
);

// Define the list of messages
const messages = [
  { role: "system", content: "You are a helpful assistant." },
  { role: "user", content: "Tell me a joke." },
];

// Generate a response
const output = await generator(messages, { max_new_tokens: 128 });
console.log(output[0].generated_text.at(-1).content);
// "Why don't scientists trust atoms?\n\nBecause they make up everything!"

Evaluation

In this section, we report the evaluation results of SmolLM2. All evaluations are zero-shot unless stated otherwise, and we use lighteval to run them.

Base Pre-Trained Model

MetricSmolLM2-1.7BLlama-1BQwen2.5-1.5BSmolLM1-1.7B
HellaSwag68.761.266.462.9
ARC (Average)60.549.258.559.9
PIQA77.674.876.176.0
MMLU-Pro (MCF)19.411.713.710.8
CommonsenseQA43.641.234.138.0
TriviaQA36.728.120.922.5
Winogrande59.457.859.354.7
OpenBookQA42.238.440.042.4
GSM8K (5-shot)31.07.261.35.5

Instruction Model

MetricSmolLM2-1.7B-InstructLlama-1B-InstructQwen2.5-1.5B-InstructSmolLM1-1.7B-Instruct
IFEval (Average prompt/inst)56.753.547.423.1
MT-Bench6.135.486.524.33
OpenRewrite-Eval (micro_avg RougeL)44.939.246.9NaN
HellaSwag66.156.160.955.5
ARC (Average)51.741.646.243.7
PIQA74.472.373.271.6
MMLU-Pro (MCF)19.312.724.211.7
BBH (3-shot)32.227.635.325.7
GSM8K (5-shot)48.226.842.84.62

Examples

Below are some system and instruct prompts that work well for special tasks

Text rewriting

system_prompt_rewrite = "You are an AI writing assistant. Your task is to rewrite the user's email to make it more professional and approachable while maintaining its main points and key message. Do not return any text other than the rewritten message."
user_prompt_rewrite = "Rewrite the message below to make it more friendly and approachable while maintaining its main points and key message. Do not add any new information or return any text other than the rewritten message\nThe message:"
messages = [{"role": "system", "content": system_prompt_rewrite}, {"role": "user", "content":f"{user_prompt_rewrite} The CI is failing after your last commit!"}]
input_text=tokenizer.apply_chat_template(messages, tokenize=False)
inputs = tokenizer.encode(input_text, return_tensors="pt").to(device)
outputs = model.generate(inputs, max_new_tokens=50, temperature=0.2, top_p=0.9, do_sample=True)
print(tokenizer.decode(outputs[0]))
Hey there! I noticed that the CI isn't passing after your latest commit. Could you take a look and let me know what's going on? Thanks so much for your help!

Summarization

system_prompt_summarize = "Provide a concise, objective summary of the input text in up to three sentences, focusing on key actions and intentions without using second or third person pronouns."
messages = [{"role": "system", "content": system_prompt_summarize}, {"role": "user", "content": INSERT_LONG_EMAIL}]
input_text=tokenizer.apply_chat_template(messages, tokenize=False)
inputs = tokenizer.encode(input_text, return_tensors="pt").to(device)
outputs = model.generate(inputs, max_new_tokens=50, temperature=0.2, top_p=0.9, do_sample=True)
print(tokenizer.decode(outputs[0]))

Function calling

SmolLM2-1.7B-Instruct can handle function calling, it scores 27% on the BFCL Leaderboard. Here's how you can leverage it:

import json
import re
from typing import Optional

...

Quantizations & VRAM

Q4_K_M4.5 bpw
1.4 GB
VRAM required
94%
Quality
Q6_K6.5 bpw
1.8 GB
VRAM required
97%
Quality
Q8_08 bpw
2.1 GB
VRAM required
100%
Quality
FP1616 bpw
3.9 GB
VRAM required
100%
Quality

Benchmarks (8)

Arena Elo1062
IFEval55.0
HumanEval22.0
MMLU-PRO11.7
BBH10.9
MATH5.8
MUSR4.1
GPQA3.9

Run with Ollama

$ollama run smollm2:1.7b

GPUs that can run this model

At Q4_K_M quantization. Sorted by minimum VRAM.

Find the best GPU for SmolLM2 1.7B

Build Hardware for SmolLM2 1.7B