Вы серьёзно решили обучить свою модель?
Берите попкорн. Истории о том, как кто-то запустил train скрипт и нажал Enter — враньё. Тот, кто это сделал, точно не спал несколько ночей, переставлял CUDA версии и рыдал над логами потерь. На Reddit (r/LocalLLaMA) появился анонимный пользователь с ником Icy_Log_9912, который выложил подробный пост о своём опыте предобучения и дообучения 500M языковой модели и 330M генератора изображений. Это не очередной «я взял LLaMA и дообучил на своих данных». Это реальный pretrain с нуля, со всеми шишками и граблями.
Дисклеймер: все цифры и конфигурации из поста оригинальны. Мы лишь структурировали опыт и добавили контекст на 2026 год. И да — автор не выкладывал веса, только рассказ.
500 миллионов — это вам не игрушки
Многие думают: «500M параметров? Да это же меньше, чем GPT-2 Medium!». В теории — да. На практике — чтобы обучить такую модель с нуля, нужно владеть искусством балансировки между эпохами, забыванием и перекосом данных. Автор выбрал архитектуру Decoder-only Transformer с 12 слоями, 16 головами внимания, embedding dimension 1024. Почти стандартный LLaMA-лайк, но без фатальной ошибки — он нормализовал стейты перед слоями внимания, а не после (pre-norm с RMSNorm). Мелочь, которая экономит вашу видеопамять при длинной последовательности.
Для сравнения: в статье о MicroGPT Playground я показывал, как архитектура трансформера выглядит визуально — вот примерно то же самое, только масштабом больше.
Размер контекста — 2048 токенов. Автор честно пишет: пытался расширить до 4096, но потери резко поползли вверх. Спасибо тому, кто выложил код Rotary Position Embedding с константой 10000 — иначе long-range dependencies были бы грустными.
Данные: где взял и как чистил
Самый интригующий пункт. Icy_Log_9912 не имеет доступа к дата-центрам и контрактам с новостными агентствами. Он собрал датасет из трёх источников:
- CulturaX (около 240 ГБ отфильтрованного текста на английском и русском)
- The Pile (классика, но только учебники и научные статьи — 30 ГБ)
- Собственный сгенерированный синтетический корпус (промптами через GPT-4o-mini и Claude 3.5 Sonnet — ещё 50 ГБ).
Итого — 320 ГБ сырого текста. После дедупликации (MinHash, 95% порог) осталось 198 ГБ. Автор отмечает, что синтетические данные улучшили качество ответов на логические задачи, но ухудшили на творческих — модель стала слишком «сухой». Пришлось миксовать с живыми текстами.
Токенизатор — свой BPE словарь на 32 000 токенов (SentencePiece, unigram с потерей 0.1). Учили на подмножестве данных: 10% от всего корпуса, 1 день на 8×A100 80GB.
Железо и бюджет: когда соседи спрашивают про майнинг
Обучение проводилось на сервере с 8× NVIDIA A100 80GB (аренда, около $30 в час). Для 500M модели потребовалось 12 дней train. Автор использовал DeepSpeed ZeRO Stage 2 (ZeRO Stage 3 приводит к просадке скорости без необходимости — он это проверил). Оптимизатор — AdamW с β1=0.9, β2=0.95, weight decay 0.1. Градиентный клиппинг 1.0. Batch size — 1 млн токенов на шаг (состоящий из градиентной аккумуляции).
Итоговый счёт за электричество: $8 640. Согласитесь, для предобучения с нуля — не так больно? Если бы он пытался обучить 7B модель, как, например, в статье «Создание LLM с нуля», цена выросла бы на порядок.
Отдельная боль — loss функция. Автор поймал spike в 7.2 на 10-м дне из-за непредвиденного батча с аномально высокой энтропией. Пришлось снэпшот откатить назад на 2000 шагов. Backup each checkpoint — не опция, это жизнь.
330M генератор изображений: как трансформер научился рисовать
Вторая часть опыта — 330M модель для генерации изображений. Она использовала архитектуру DiT (Diffusion Transformer), где каждый токен это патч 2×2 пикселя. Сначала автор пытался взять готовый VAE из Stable Diffusion 3 (который на 21.06.2026 уже имеет версию 3.5?), но не смог загрузить его из-за несовместимости torch.compile. Пришлось обучить свой маленький VAE с 8× downsampling на датасете из 12 миллионов изображений (CC12M + LAION-400M отфильтрованный).
DiT использовал 24 слоя, 12 голов, embedding dimension 768. Кондиционирование — Cross-attention с текстовым эмбеддингом (из той же 500M LLM, которая играла роль энкодера). Да, он объединил обе модели в пайплайн: текст → LLM (последний скрытый слой, усреднённый) → линейный проектор → DiT.
Обучение шло на 4×A100 80GB (аренда), 5 дней. Loss — видоизменённая squared form of the denoising objective с эмпирической поправкой на равномерный шум.
Результат: качество картинок — в духе «ранний DALL-E 2». Не ультрареалистично, но узнаваемо. Автор выложил примеры — корова в космосе, собака в шляпе, странные сюрреалистичные вещи. Главная проблема — нестабильность при длинных промптах (более 20 слов). LLM всё ещё страдает от плохой контекстуализации длинных запросов.
Типичные ошибки и что с ними делали
Давайте честно: обучение с нуля похоже на квест «найди 10 отличий между кодом и моей психикой». Вот что пошло не по плану и как это решали.
- Loss не падает после 3 эпох — оказалось, learning rate scheduler был cosine с warmup, но не сбросился после достижения нуля. Решение: прикрутили reset на 80% от тренировки (re-warmup).
- Модель копирует фрагменты датасета дословно — пришлось увеличить dropout в attention (с 0.0 до 0.1) и добавить небольшой Label Smoothing.
- Генерация изображений выдаёт чёрные квадраты — баг с выходным слоем DiT: активация Tanh в последнем Linear убивала градиенты. Заменили на SiLU.
- Огромный разрыв между train и val loss — data leakage (из-за того, что в датасете были повторяющиеся URL в LAION). Фильтр исключил дубликаты.
Важно: автор подчеркивает, что использовал 16-bit mixed precision, но для части операций (LayerNorm, Softmax) пришлось включить full precision — иначе loss расходился. Проверяйте свои операции.
Что в сухом остатке
Этот опыт доказывает: обучить адекватно работающую модель с нуля возможно одному человеку с доступом к облаку на пару недель. Не нужно быть DeepMind или OpenAI. Нужен талант к инженерной гигиене (логирование, чекпоинты) и готовность перезапускать тренировку, когда проморгал баг в DataLoader.
Но есть и горькая правда. 500M LLM по качеству всё ещё уступает Llama 4 16x17B — это как сравнивать филиппинскую авиакомпанию с Emirates. Однако для узких задач (генерация специфичных текстов, упрощённый ассистент) такая модель может быть дешевле и быстрее гигантов. А в паре с генератором изображений (330M) получается компактный инструмент для контент-мейкеров.
Кстати, если вы хотите собрать железо для подобного обучения, гляньте гайд по сборке станции за $15 000 — на ней можно обучить модель подобного размера за месяц-два без аренды облака.
Спойлер от Icy_Log_9912: «Если бы я начал сейчас, я бы сначала обучил 330M генератор, а LLM использовал бы как энкодер. Это сэкономило бы кучу времени на полном обучении текстовой модели». Иногда самая важная правда — та, которая скрывается в последних строчках Reddit-поста. Подумайте, может быть, и вы используете не ту последовательность шагов.