SmolLM3- smol, đa ngôn ngữ, lý luận theo ngữ cảnh dài

  • 6 min read
SmolLM3- smol, đa ngôn ngữ, lý luận theo ngữ cảnh dài

SmolLM3: smol, multilingual, long-context reasoner

SmolLM3: smol, multilingual, long-context reasoner

Bài viết này giới thiệu SmolLM3, một mô hình ngôn ngữ nhỏ, đa ngôn ngữ, có khả năng xử lý ngữ cảnh dài.

Các mô hình:

Tóm tắt:

  • Mô hình 3B, SoTA ở quy mô 3B và cạnh tranh với các mô hình 4B.
  • Mô hình Instruct hỗ trợ lý luận đa chế độ (think/no_think).
  • Hỗ trợ đa ngôn ngữ (6 ngôn ngữ).
  • Ngữ cảnh dài lên đến 128k (NoPE và YaRN).

Chúng tôi chia sẻ bản thiết kế kỹ thuật chi tiết, bao gồm chi tiết kiến trúc, hỗn hợp dữ liệu chính xác và phương pháp xây dựng mô hình lý luận lai.

Dưới đây là quy trình huấn luyện của mô hình:

Pretraining

SmolLM3 đã thay đổi kiến trúc và hỗn hợp dữ liệu so với các phiên bản trước.

Architecture and training details

  • Grouped Query Attention (GQA): Thay thế multi-head attention bằng GQA (4 nhóm).
  • NoPE: Loại bỏ có chọn lọc rotary position embeddings từ mỗi lớp thứ 4.
  • Intra-Document Masking: Sử dụng attention masking để đảm bảo các token từ các tài liệu khác nhau không chú ý lẫn nhau.
  • Training Stability: Loại bỏ weight decay khỏi các lớp embedding.

Cấu hình huấn luyện: batch size toàn cầu 2.36M tokens, độ dài chuỗi 4096, learning rate 2e-4, AdamW optimizer (beta1: 0.9, beta2: 0.95), weight decay 0.1, gradient clipping 1. Sử dụng WSD scheduler (Warmup-Stable-Decay). Sử dụng nanotron, datatrove và lighteval. Mô hình được huấn luyện trên 384 GPU H100 trong 24 ngày.

Data mixture and training stages

SmolLM3 được huấn luyện trên 11.2T tokens bằng cách sử dụng chiến lược huấn luyện ba giai đoạn kết hợp dữ liệu web, toán học và mã.

  • Giai đoạn 1 (0T → 8T tokens):
    • Web: 85% (12% đa ngôn ngữ) - FineWeb-Edu, DCLM, FineWeb2 và FineWeb2-HQ
    • Code: 12% - The Stack v2, StarCoder2 pull requests, Jupyter và Kaggle notebooks, GitHub issues, và StackExchange.
    • Math: 3% - FineMath3+ và InfiWebMath3+
  • Giai đoạn 2 (8T → 10T tokens):
    • Web: 75% (12% đa ngôn ngữ)
    • Code: 15% - Stack-Edu
    • Math: 10% - FineMath4+, InfiWebMath4+, và MegaMath
  • Giai đoạn 3 (10T → 11.1T tokens):
    • Web: 63% (12% đa ngôn ngữ)
    • Code: 24%
    • Math: 13%

Mid-training

Điều chỉnh cho ngữ cảnh dài và khả năng lý luận.

Long Context extension

Huấn luyện SmolLM3 trên 100B tokens bổ sung để mở rộng độ dài ngữ cảnh. Mở rộng độ dài ngữ cảnh theo hai giai đoạn (50B tokens mỗi giai đoạn): 4k → 32k (RoPE theta = 1.5M), sau đó 32k → 64k (RoPE theta = 5M). Sử dụng YARN để ngoại suy vượt quá độ dài ngữ cảnh huấn luyện. Mô hình có thể xử lý ngữ cảnh lên đến 128k trong quá trình suy luận.

Reasoning Mid-training

Huấn luyện mô hình để kết hợp khả năng lý luận. Dữ liệu huấn luyện chứa 35B tokens từ Open Thoughts và một tập hợp con từ Llama-Nemotron-Post-Training-Dataset. Sử dụng ChatML chat template và wrapped packing. Huấn luyện mô hình trong 4 epochs (~140B tokens).

Post-training

Xây dựng mô hình dual instruction hỗ trợ cả chế độ lý luận và không lý luận.

Building the Chat Template

Cho phép người dùng kiểm soát chế độ lý luận trong cuộc trò chuyện bằng cách bao gồm các flag /think/no_think trong system prompt.

Supervised Finetuning

Sau giai đoạn lý luận mid-training, chúng tôi tiến hành Supervised Finetuning (SFT) để kết hợp các khả năng ở cả chế độ lý luận và không lý luận cho toán học, mã, lý luận chung, tuân theo hướng dẫn, đa ngôn ngữ và tool calling.

Dữ liệu SFT chứa 1.8B tokens (1B ở chế độ không lý luận và 0.8B ở chế độ lý luận). Chúng tôi đã huấn luyện trong 4 epochs (~8B tokens).

Off-policy model alignment with Anchored Preference Optimization (APO)

Thực hiện model alignment bằng cách sử dụng kết hợp Tulu3 preference dataset (chế độ không lý luận) và synthetic preference pairs mới (chế độ lý luận). Sử dụng Anchored Preference Optimization (APO).

Công thức phần thưởng trong APO:

DPO loss function:

APO objective:

Model Merging

Model merging kết hợp các điểm mạnh của các mô hình khác nhau. Sử dụng MergeKit library.

  • Tạo một model soup từ mỗi APO checkpoint.
  • Kết hợp model soup với mid-training checkpoint (long-context). Linear merge (APO model soup: 0.9, mid-training checkpoint: 0.1).

Evaluation

Đánh giá base model và instruct model (lý luận và không lý luận).

Base model

SmolLM3 vượt trội so với các mô hình 3B khác và đạt hiệu suất cạnh tranh với các mô hình 4B lớn hơn.

Mô hình thể hiện hiệu suất đa ngôn ngữ mạnh mẽ trên năm ngôn ngữ châu Âu chính.

Dual Instruct / Reasoning model

Đánh giá trong cả hai chế độ (instruct và reasoning).

No extending thinking evaluation

SmolLM3 vượt trội so với các mô hình không lý luận 3B khác.

Extending thinking evaluation

SmolLM3 cho thấy sự cải thiện đáng kể so với phiên bản không lý luận.

How to run locally

Mã mô hình hóa có sẵn trong transformers v4.53.0.

from transformers import AutoModelForCausalLM, AutoTokenizer

model_name = "HuggingFaceTB/SmolLM3-3B"
device = "cuda"  # for GPU usage or "cpu" for CPU usage

# load the tokenizer and the model
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(
    model_name,
).to(device)

# prepare the model input
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=False,
)
model_inputs = tokenizer([text], return_tensors="pt").to(model.device)

# Generate the output
generated_ids = model.generate(**model_inputs, max_new_tokens=32768)

# Get and decode the output
output_ids = generated_ids[0][len(model_inputs.input_ids[0]):]
print(tokenizer.decode(output_ids, skip_special_tokens=True))

Khuyến nghị: temperature=0.6top_p=0.95.

Enabling and Disabling Extended Thinking Mode

Sử dụng flag /think/no_think trong system prompt.

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

Agentic Usage

SmolLM3 hỗ trợ tool calling! Truyền danh sách các tool dưới dạng xml_tools hoặc python_tools.

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 works as well, your choice!
    xml_tools=tools,
    add_generation_prompt=True,
    tokenize=True,
    return_tensors="pt"
)

outputs = model.generate(inputs)
print(tokenizer.decode(outputs[0]))

Conclusion

SmolLM3 là một mô hình nhỏ, có ngữ cảnh dài, đa ngôn ngữ, có khả năng lý luận với ngữ cảnh lên đến 128k.

Resources

Recommended for You

Ba cảnh báo mạnh mẽ hỗ trợ cơ sở hạ tầng sản xuất của Hugging Face

Ba cảnh báo mạnh mẽ hỗ trợ cơ sở hạ tầng sản xuất của Hugging Face

Bài viết này thảo luận về ba cảnh báo quan trọng giúp hỗ trợ cơ sở hạ tầng sản xuất của Hugging Face.

Quy trình dữ liệu đa phương thức hiệu quả

Quy trình dữ liệu đa phương thức hiệu quả

Bài viết này thảo luận về một quy trình dữ liệu đa phương thức hiệu quả.