Data Curation и Multi-stage Training
Data mixtures, ablation, synthetic data, multi-stage обучение. SmolLM3, Hermes 4, Kimi K2.
Data Curation и Multi-Stage Training — данные важнее архитектуры
Никакое количество вычислений не компенсирует тренировку на плохих данных. Data mixture (смесь данных), quality filtering и multi-stage scheduling определяют финальное поведение модели больше, чем архитектурные улучшения. SmolLM3 использует 3 стадии (8T, 2T, 1.1T токенов), Kimi K2 перефразирует корпуса для разнообразия, Hermes 4 генерирует синтетические данные через графовый pipeline DataForge.
Multi-Stage Training — зачем менять данные по ходу
Финальное поведение модели сильно зависит от данных в конце тренировки. Multi-stage training меняет состав данных по ходу обучения: начинаем с большого объёма разнообразных данных, заканчиваем высококачественными целевыми. Сигнал к смене стадии: если бенчмарки выходят на плато — пора вводить качественные данные для этого домена.
📊 SmolLM3 Multi-Stage Pipeline
Data Mixture — что и сколько
Для SmolLM3 Stage 1: English web собран из FineWeb-Edu + DCLM в пропорции 60/40 (ablation показал оптимальность). Мультиязычные данные: 5 европейских языков из FineWeb2-HQ (12% микса). Код: The Stack v2 + StarCoder2 — 16 языков, GitHub PRs, Jupyter и Kaggle ноутбуки. Математика: FineMath3+, InfiWebMath3+, MegaMath, OpenMathInstruct. Educationally-filtered Stack-Edu добавляется только на поздних стадиях.
Интересный момент: несмотря на исследования, показывающие что код улучшает языковую модель не только в программировании, HuggingFace наблюдали деградацию на English бенчмарках при рекомендованном количестве кода. Вывод: доверяй своим экспериментам, а не чужим выводам.
Ablation Methodology
- Architecture ablations → на маленьких моделях (e.g. 1B для 3B target). Быстро и дёшево
- Data mixture ablations → НА МАСШТАБЕ. Маленькие модели не имеют capacity для разнообразных доменов
- Annealing ablations → на checkpoints основного run (e.g. 7T из 11T) для определения когда вводить данные
- Золотое правило: меняй ОДНУ переменную за раз. Multi-variable edits = невоспроизводимые результаты
- Validation loss для оптимизации proportions часто converge к dataset size distribution — не лучше manual ablations
Token Utility — максимум сигнала из каждого токена
Kimi K2 использует перефразирование данных для увеличения разнообразия. Для текстовых корпусов: промпты с разным стилем и перспективой, chunk-wise генерация для длинных документов, проверка на сохранение смысла. Каждый корпус перефразируется максимум 2 раза. Для математики: перефразирование в стиле «учебных заметок» + перевод на другие языки для дополнительного разнообразия.
# Multi-stage data scheduling — пример конфигурации как в SmolLM3
training_stages = {
"stage_1": {
"tokens": "8T",
"lr": 2e-4,
"context": 4096,
"data_mix": {
"english_web": {"source": "FineWeb-Edu + DCLM", "ratio": 0.60},
"multilingual": {"source": "FineWeb2-HQ (5 langs)", "ratio": 0.12},
"code": {"source": "Stack v2 + StarCoder2", "ratio": 0.15},
"math": {"source": "FineMath3+ + InfiWebMath3+", "ratio": 0.08},
"science": {"source": "peS2o + Wikipedia", "ratio": 0.05},
},
},
"stage_2": { # Higher quality, less volume
"tokens": "2T",
"lr": 2e-4,
"context": 32768, # расширяем контекст через ABF
"data_mix": {
"english_web": {"source": "FineWeb-Edu (score>3)", "ratio": 0.40},
"code": {"source": "Stack-Edu + Kaggle notebooks", "ratio": 0.25},
"math": {"source": "MegaMath + OpenMathInstruct", "ratio": 0.20},
"long_docs": {"source": "books + arxiv + long web", "ratio": 0.15},
},
},
"stage_3": { # Best quality, reasoning focus
"tokens": "1.1T",
"lr": "cosine decay to 2e-5",
"context": 131072, # YaRN to 128K
"data_mix": {
"reasoning": {"source": "OpenMathReasoning + code contests", "ratio": 0.35},
"code": {"source": "high-quality filtered", "ratio": 0.25},
"instruction": {"source": "curated instruction pairs", "ratio": 0.20},
"long_context": {"source": "needle-in-haystack training data", "ratio": 0.20},
},
},
}
# Принцип: quantity↓ quality↑ по мере продвиженияHermes 4 DataForge — граф-based synthetic data
DataForge — генератор синтетических данных на основе графов. Это DAG (направленный ациклический граф), где каждый узел трансформирует данные из одного формата в другой. Случайное блуждание по графу создаёт пары вопрос-ответ с промежуточными трансформациями (например, статья из Wikipedia превращается в рэп-текст, а из него генерируется QA-пара). LLM-as-judge оценивает качество и инструкции, и ответа. Для покрытия доменов используется рекурсивная таксономия — поддомены генерируются автоматически, а листья дерева становятся промптами.
Tool-Use Data (Kimi K2)
Kimi K2 строит способности работы с инструментами через синтетический pipeline: 3K+ реальных MCP-инструментов из GitHub + 20K синтетических (финансовый трейдинг, софт, управление роботами). Процесс: генерация спецификации инструмента, затем генерация агента и задачи (различные системные промпты × комбинации инструментов), затем генерация траектории выполнения. Качество оценивает LLM judge по рубрикам. Это масштабируемый подход к agentic-способностям.
Pre-training Data Sources
- FineWeb2 — большой open web corpus с quality filtering
- The Pile — классический open dataset от EleutherAI
- FineMath3+ / InfiWebMath3+ — математический контент с quality threshold
- MegaMath — масштабный math dataset
- OpenMathInstruct / OpenMathReasoning — instruction/reasoning math datasets
- The Stack v2 + StarCoder2 — code данные (16 языков, PRs, notebooks, issues)
- FineWeb-Edu — educationally-filtered web data (STEM benchmarks)
- DCLM — common sense reasoning данные
Dedup и Contamination
Hermes 4 делает семантическую дедупликацию через эмбеддинги с порогом косинусного сходства 0.7 + LLM-as-judge для фильтрации неполных и плохо отформатированных сообщений. Contamination checks обязательны — без них метрики врут. Повторные данные вредны: при ограниченном бюджете качественные данные повторяются, снижая обобщающую способность. Баланс: включать и высококачественные, и менее качественные данные в микс.
💡 Takeaway