Андрей Карпаты (Andrej Karpathy): «от кода до модели» — минимализм, воспроизводимость и дисциплина инференса

Андрей Карпаты (Andrej Karpathy) — инженер и популяризатор практик глубокого обучения, который сделал «сквозной» подход к ИИ понятным и пригодным для продакшена. Его стиль: минимальный код → прозрачная механика → воспроизводимые эксперименты → аккуратная эксплуатация. В отличие от культуры «магических демо», подход Карпаты фокусируется на том, чтобы любая часть пайплайна была объяснимой и заменяемой: от загрузки данных и цикла обучения до вывода модели в сервис.

Андрей Карпаты (Andrej Karpathy)

Эта страница — не биография, а практическая призма для продуктовых, ML- и инфраструктурных команд 24k.ru. Мы разбираем, как «школа Карпаты» приземляется на повседневную работу с ML, крупными моделями LLM и их эксплуатацией в рамках целостного AI-стека. В блоках ниже — архитектурные решения, метрики «здоровья», чек-листы, таблицы анти-паттернов и FAQ. Для слоя инференса держите под рукой обзор LLM-inference-стека и базовую архитектуру трансформера.

Лид: зачем продуктовой команде «школа Карпаты»

  • Понять механизмы. Минимальные реализации/диаграммы делают поведение модели предсказуемым и обучаемым всей командой, а не только «ML-магами».
  • Повторяемость важнее разового рекорда. Код, данные, конфиги и метрики версионируются и воспроизводятся без «ручных ритуалов».
  • Экономика инференса и простые контракты. Чёткие форматы ответов (JSON/таблицы), короткие подсказки, кэшируемые этапы → стабильный P95 и «цена эпизода».

Суть: «сильный продукт = простая механика + измеримость + дисциплина изменений».

Архитектурная рамка: «от датасета до вывода»

Слой Вопрос Практика «в духе Карпаты» Артефакты
Данные Что именно учим и почему? Малошумные выборки, явные фильтры/дедуп, контроль смещений Манифест данных, версии, хэши
Тренировка Как добиться качества без магии? Малый работающий цикл (train loop), валидируемые гиперпараметры Конфиги, логи, чекпоинты
Оценка Что считать и как интерпретировать? «Золотой набор» задач, utility-скор, кривые ошибок Отчёты /plots, карточка релиза
Инференс Скольких токенов стоит ответ? Ограничители длины, ранние остановки, кэш префилла Правила маршрутизации
Оркестрация Как удержать P95/стоимость? Раздельные очереди, профили light/standard/heavy Политики маршрутов
Наблюдаемость Где «течёт» бюджет? TTFT, P95, неформат, «цена эпизода», error-mix Дешборды и алерты

Эта «лестница» описывает путь от сырого датасета к стабильной службе. Переходить на следующую ступень стоит только после фиксации артефактов и метрик на текущей.

Механика обучения: минимализм, который работает

Карпаты — сторонник минимального, но честного цикла обучения. Что это означает на практике:

  • Явные шаги. Загрузка батча → префорвард → лосс → бэквард → шаг оптимизатора. Никаких «скрытых магий» в коллбэках, которые усложняют дебаг.
  • Простые гиперпараметры. Линии инициализации, шаг обучения, расписание decay — всё в одном месте и под версионным контролем.
  • Малые прототипы → масштаб. Сначала «маленькая модель на маленьких данных», затем перенос рецепта на промышленный объём.
  • Контроль генерации. Температура, top-k/p, длина — не «искусство», а контракт качества/стоимости, который меняется осмысленно и фиксируется в карточке релиза.

Этот прагматизм и делает проекты воспроизводимыми: новая команда, получая репозиторий, может повторить результат без обратной инженерии.

Инференс как инженерный объект

Инференс — это продукт, а не «хвост тренировки». Чтобы он был предсказуемым:

  • Контракты ответа. Никакой «вольной речи», если этого не требует UX. По умолчанию — JSON/таблица, валидация до отдачи клиенту и строгий разбор ошибок.
  • Лимиты и ранние остановки. Сокращают «болтовню» модели, удерживают P95 и бюджет.
  • Профили вывода. *Light* для коротких ответов, *Standard* для диалогов, *Heavy* для отчётов (в отдельной очереди).
  • Кэш префилла/эмбеддингов. Повторно используем состояния и результаты поиска — дешевле и быстрее.
  • Маршрутизация очередей. Chat ≠ Long ≠ Offline. Смешивать — ломать P95.

Эти правила простые, но именно они отделяют демо от надёжной службы.

«Цена эпизода»: считать честно

Компонент Состав Как понизить
Контекст (ввод) История, инструкции, примеры Резюмирование, короткие шаблоны, внешние факты
Префилл Переиспользуемые состояния/кэш Тёплые пулы, кэширование, дедуп
Генерация Токены/сек, длина Ограничители, ранние остановки, профили
Инструменты Ретривер, эмбеддинги, классификаторы Кэш результатов, объединение шагов
Ретраи Неформат/тайм-ауты Пред-валидация, строгие схемы JSON
Пост-обработка Валидация/логирование Лёгкие артефакты, единые форматы логов

Управляя «ценой эпизода», вы управляете маржой продукта на ИИ.

Наблюдаемость и «здоровье» сервиса

Главные метрики:

  • TTFT — время до первого токена; влияет на отмены.
  • P95 задержек — «длинный хвост», определяет UX при пиках.
  • Доля неформата — процент невыполнения контракта JSON/таблицы.
  • Utility-скор — полезность на «золотом наборе» задач.
  • Цена эпизода — итоговая стоимость полезного ответа.

Минимум раз в неделю команда смотрит отчёт «до/после» изменений, а любые ухудшения выше порога запускают автоматический откат.

Инженерные принципы «школы Карпаты»

1) От простого к надёжному. Малый рабочий прототип лучше «идеальной» архитектуры без воспроизводимости.

2) Публичный код и артефакты. Репозитории с минимальными примерами/блоками снижают входной барьер и повышают культуру «читаемости» стека.

3) Учим представления, а не «красоту текста». Лучшие эмбеддинги и краткие подсказки ↓ контекстные токены и ↓ задержки.

4) Версии и карточки релиза. Каждый релиз — это набор версий (модель, ретривер, шаблоны, лимиты) с влиянием на TTFT/P95/utility.

5) Отладка через визуализацию. Лоссы, распределения длин, доля неформата, диаграммы маршрутов — всё рисуется и хранится рядом с кодом.

Чек-листы внедрения

A) Минимум за 7 дней (любой LLM-продукт)

  • Введите контракт вывода (JSON/таблица) и пред-валидатор.
  • Поставьте дешборды: TTFT, P95, неформат, utility, цена эпизода.
  • Разведите очереди: chat / long / offline.
  • Включите кэш префилла и кэш эмбеддингов.
  • Введите ограничители длины и ранние остановки.

B) Минимум по данным/обучению

  • Опишите манифест данных: источники, фильтры, дедуп, лицензии.
  • Заведите золотой набор и скрипты оценки utility.
  • Версионируйте чекпоинты и конфиги; сохраните контрольные суммы.

C) Безопасность/риски

  • Политики ввода/вывода и фразы отказа.
  • Процедуры rollback/канареек; журнал инцидентов.
  • Правила хранения логов и PII; анонимизация по умолчанию.

Таблица: анти-паттерны и исправления

Анти-паттерн Симптом Что делать
«Одна очередь на всё» Пики P95, жалобы на задержки Развести chat/long/offline, ввести профили
«Свободный текст всегда» Неформат, ретраи Контракты JSON, пред-валидация
«Только увеличим модель» Дорого и нестабильно Сократить ввод, кэш, профили, короткие шаблоны
«Ритуальная отладка» Неповторяемые результаты Мини-репро, фиксированные конфиги, версии
«Нет карточки релиза» Нельзя объяснить регресс Ввести карточки и пороги автo-отката

Таблица: профили инференса

Профиль Где применять Сильные стороны Риски
Light Короткий Q&A, инструменты Низкий TTFT/цена Возможна потеря «литературности»
Standard Основной диалог Баланс качества/цены Нужен динамический batching
Heavy Отчёты/аналитика Длина/детальность Отдельная очередь, удар по P95

Практические сценарии

1) Корпоративный ассистент. Короткие промпты, строгий JSON, ретривер по проверенным витринам, кэш префилла. Профили: *light* для FAQ, *standard* для диалога, *heavy* для отчётов.

2) Экстрактор → отчёт. Два шага: (а) извлечение фактов в JSON; (б) формирование читаемого ответа. Контракты и валидация снижают ретраи и ручной труд.

3) Разметка и классификация. Кодировщик/эмбеддинги + «тонкие головы»; обучение в коротких циклах, контроль смещений. Экономная эксплуатация с предсказуемым P95.

4) Инструментальные агенты. Чёткий список доступных инструментов, лимит глубины планов, трейсинг шагов и fallback-ответы. Агенты — не «магия», а управляемый пайплайн.

Данные: от манифеста к пользе

  • Источник и лицензии. Фиксируйте происхождение и ограничения на использование.
  • Фильтры и дедуп. Снижайте шум до обучения.
  • Обновления. Дорожная карта пересборок, чтобы не ловить «дрейф» фактов.
  • Справедливость. Баланс доменов/языков; прозрачные отчёты по распределениям.

Оценка и «золотые наборы»

Золотой набор — это фиксированная, репрезентативная выборка задач вашего домена. Любая смена модели/шаблонов должна показывать полезность на нём; улучшение «на бенчмарке» без роста utility считается недостаточным для релиза.

Диагностика «длинного хвоста»

  • Разделите трейсинг по маршрутам (chat/long/offline).
  • Смотрите распределение длины ввода/вывода.
  • Сопоставляйте пиковые задержки с событиями (обновление шаблонов, кэш, профили).
  • Вводите авто-либо-ручной откат при выходе P95 за порог.

Мини-плейбуки (1–2 недели)

A) −30% P95 Развести очереди, включить ранние остановки и кэш префилла, замерить до/после.

B) −20% «цены эпизода» Сократить ввод, внедрить строгие контракты и пред-валидацию, объединить шаги ретривера.

C) «Нулевая толерантность к неформату» JSON-схемы, валидатор до отдачи, авто-ретраи с мягким тайм-аутом, ежедневный отчёт по неформату.

Часто задаваемые вопросы (FAQ)

Почему так много про минимальные примеры и простые петли обучения? Потому что они делают систему объяснимой и облегчают передачу знаний между разработчиками. Это снижает стоимость сопровождения и ускоряет онбординг.

Большая модель решит всё? Нет. Часто больше выигрыша дают короткие подсказки, кэш, профили и контракты вывода, чем рост параметров.

Нужны ли агенты для каждого кейса? Нет. Агенты полезны там, где есть инструменты/шаги. Ими нужно управлять политиками, трейсингом и лимитами глубины.

Как убедить бизнес вкладываться в наблюдаемость? Покажите корреляцию P95/TTFT/неформат → отмены/удержание. Это прямой драйвер выручки и маржи.

Зачем «жёсткий» JSON, если пользователи любят свободный текст? Контракты не отменяют «человеческий» вывод — они страхуют пайплайн и экономят на ретраях/ручных правках.

Словарь терминов

  • Минимальная реализация — краткий, но полный пример механизма без «магии» и скрытых зависимостей.
  • Контракт вывода — заранее заданная схема ответа (JSON/таблица) с валидацией до отдачи.
  • TTFT — время до первого токена; чувствительная UX-метрика.
  • P95 — 95-й перцентиль задержек; показывает «длинный хвост».
  • Utility-скор — полезность по «золотому набору» задач домена.
  • Цена эпизода — суммарная стоимость полезного ответа модели.
  • Профили инференса — режимы *light/standard/heavy* с разными SLO и бюджетами.
  • Кэш префилла — сохранение промежуточных состояний для ускорения повторов.

См. также

Task Runner