Коротко
- Андрей Карпати (экс-Tesla AI, сооснователь OpenAI, ныне — основатель школы Eureka Labs) выпустил nanochat — минималистичный, «с нуля» собранный стек для обучения и инференса небольшого диалогового LLM.
- ~8000 строк кода, один репозиторий, минимум зависимостей. От запуска скрипта до веб‑интерфейса в стиле ChatGPT — за 4–12 часов на облачной машине с 8×H100.
- Себестоимость «спидрана» — порядка $100 (около 4 часов), расширенный прогон ~ $1000 (≈42 часа) дает заметный прирост качества.
- После ~12 часов предобучения модель по интегральной метрике CORE обходит GPT‑2; при 24–42 часах появляются зачатки математики/кода и приличные результаты на выборочных тестах.
Репозиторий: GitHub: karpathy/nanochat
Гайд: Discussions/1 (быстрый старт)
Анонс: X (Karpathy)
Что это за проект
Nanochat — это «учебно-боевой» full‑stack:
- собственный токенайзер на Rust (скорость, прозрачность), совместимый по качеству с классическими BPE; при инференсе можно использовать tiktoken;
- предобучение Transformer на FineWeb‑EDU (перепакован в «плоские» случайные партиции для простоты I/O);
- «midtrain» на диалогах (SmolTalk) + адаптация к многошаговым разговорам и форматам спец‑токенов, обучение решать multiple‑choice;
- SFT (supervised fine‑tuning) для подтяжки качества ответа и соответствия чат‑формату;
- опциональный RL на GSM8K через упрощенный GRPO‑контур (по сути REINFORCE‑стиль с «group-relative» нормировкой), чтобы подтянуть элементарную математику;
- inference‑движок с KV‑кэшем, предзаполнением/декодированием, встроенным мини‑инструментарием (Python‑интерпретатор в «песочнице»), CLI и веб‑UI (FastAPI);
- единый отчет report.md с метриками, «геймификацией» прогресса и конфигурацией прогона.
Архитектурно ближе к LLaMA, местами вдохновлен modded‑nanoGPT, но радикально упрощен и «рукотворен»: Карпати подчеркивает, что почти все написано вручную — попытки позвать код-агентов (Claude/Codex) не помогли из‑за нетипичной структуры репозитория.
Результаты и метрики
- CORE (интегральная метрика автодополнения на 20+ датасетах типа HellaSwag, ARC, LAMBADA, BoolQ и т. п.) растет по мере FLOPs; около 12 часов тренировки — уже выше GPT‑2 (large).
- При бюджете ~$1000 (≈41.6 часа) появляются существенные улучшения: простая математика/код, уверенные multiple‑choice.
- Пример при depth=30 (порядка 560M параметров при рассматриваемой конфигурации, сравнимо с GPT‑3 Small 125M по вычислительным затратам, но с другой архитектурой/контекстом):
- MMLU: 40+ баллов (выше рандома 25%)
- ARC‑Easy: 70+%
- GSM8K: 20+%
- После midtrain+SFT модель уверенно держит базовые факты, диалоговые форматы, начинает решать MCQ; RL на GSM8K добавляет еще немного в арифметике.
Важно: это «сильная базовая линия», а не предел. Карпати прямо пишет, что оптимизация далека от исчерпывающей: есть запас в данных, архитектуре, оптимизаторах, пайплайне, инженерии памяти и т. д.
Как это работает шаг за шагом
- Окружение и данные
- Быстрый старт через скрипт speedrun.sh на чистой машине.
- Токенайзер: Rust/Cargo билд; цель — скорость и контроль. В словаре по умолчанию 65 536 токенов (часть — спец‑токены для чата).
- Данные: FineWeb‑EDU (перешинкован в parquet‑шарды ~0.25M символов, gzip ~100MB, всего 1822, из них для depth≈20 достаточно ~240). Скачивание в ~/.cache/nanochat.
- Eval bundle (CORE) — отдельный архив 22 датасетов, кладется в ~/.cache/nanochat/eval_bundle.
- Мониторинг: wandb по желанию.
- Предобучение (base_train.py)
- Типичная конфигурация: 20–30 слоев, d_model ~1280, ~10 голов, контекст 2048, общий размер ~0.5–0.6B параметров.
- На 8×H100 шаг ≈0.5 c, пакет на шаг ~0.5M токенов (через батч и градиентное накопление).
- Целевой объём токенов следует эвристикам Chinchilla (параметры×20).
- Оптимизация: Muon для матриц, AdamW для эмбеддингов/деэмбеддингов, bfloat16, MFU близко к 50% — неплохо для «учебного» стека.
- Лосс в bits-per-byte (bpb) — сравнимый поперёк разных токенизаторов.
- Midtrain (диалоги, MCQ, инструменты)
- Обучение формату чата и спец‑токенам (<|bos|>, <|assistant|>, <|user|>, <|python_start|>…).
- Впрыск MCQ‑задач (MMLU aux) — критично для маленьких моделей, чтобы «понять», как работать с множественным выбором.
- Обучение вызывать инструменты (простые вызовы Python в песочнице) — помогает на GSM8K.
- SFT
- Короткая стадия донастройки на диалогах с имитацией «тестового» формата (без склейки примеров в длинные строки) — уменьшает разрыв дистрибуций между train и inference.
- RL (опционально)
- Упрощенный GRPO/REINFORCE для GSM8K: сэмплинг решений, оценка вознаграждения по правильности ответа, обновление по токен‑уровневым преимуществам.
- Без тяжелых трюков PPO (без trust region/KL), зато достаточно для небольшого прироста на четко формализуемой задаче.
- Инференс и UI
- Движок с KV‑кэшем и легковесным «орудием труда» (Python).
- Доступ через CLI или FastAPI веб‑UI (адрес узла + порт).
Зачем это сообществу
- Учебный стек, который действительно можно «прочитать за выходные» и модифицировать: отличный вход для ML‑инженеров, курсов и лабораторных.
- Базис для исследований: сравнение токенизаторов, стратегий оптимизации, данных, расписаний LR, sparsity/quant, длинного контекста — без «черных ящиков».
- Демократизация экспериментов: показать, что «маленький ChatGPT» достижим за сотни долларов, а не за миллионы. Это снижает барьеры для стартапов и академии.
- Репликация и бенчмаркинг: единые скрипты, единая отчетность (report.md) — проще воспроизводить и сравнивать.
Практические советы, если хотите «пробежать спидран»
- Железо: 8×H100 в облаке (например, Lambda) ~ $24/час — ваш «метроном». Следите за шагом/временем/метриками.
- Данные: берите «shuffle»-версии FineWeb‑EDU от автора — проще I/O и случайность.
- Токенайзер: по умолчанию ок; для многоязычия/кода можно экспериментировать с размером словаря и правилами regex‑разбиений.
- Гиперпараметры: depth — главный «мастер-слайдер». Увеличили глубину — уменьшайте per‑device batch, включайте градиентное накопление.
- Мониторинг: настраивайте wandb сразу — экономит время и деньги, помогает вовремя остановиться.
- RL: имеет смысл только под четкий reward (как GSM8K). Для «общей осмысленности» и безопасности это не замена RLHF с человеческими предпочтениями.
Контекст: почему это важно сейчас
На фоне гонки за 10+ ГВт и кастомными чипами у гиперскейлеров, nanochat напоминает о другой стороне прогресса — инженерной ясности и доступности. Как когда‑то nanoGPT стал «карманным учебником» для autoregressive‑моделей, nanochat может стать практическим «LLM 101n»: от токенайзера до веб‑чата — без магии и «вендор-специфик».
Для индустрии это полезный эталон «разумной достаточности»: где минимальные средства дают максимальную обучающую ценность. Для сообщества — способ быстро прокачать навыки и продемонстрировать компетенцию: «пробежал спидран, понял узкие места, улучшил X и Y» — уже строчка в резюме ML Engineer.
Впереди — оптимизация и рост: длинные контексты, качественный RLHF, мультимодальность, более агрессивные режимы обучения и эффективные архитектурные трюки. Но старт дан: минималистичный, прозрачный и вдохновляющий.
Хотите создать уникальный и успешный продукт? СМС – ваш надежный партнер в мире инноваций! Закажи разработки ИИ-решений, LLM-чат-ботов, моделей генерации изображений и автоматизации бизнес-процессов у профессионалов.
ИИ сегодня — ваше конкурентное преимущество завтра!
Тел. +7 (985) 982-70-55
E-mail sms_systems@inbox.ru