Последние полгода я обучал свою небольшую нейросеть с нуля на одной rtx 4060. Сжег кучу времени, перебрал кучу данных и в итоге дошел до версии 2.1 — это крошечная LLM всего на 260 млн параметров.
Зачем вообще было это делать? Мне просто стало интересно, можно ли научить такую микроскопическую нейронку (а более большую я обучить и не мог) хоть какой‑то логике.
Что в итоге вышло:
Во‑первых, она умеет считать по разрядам. Она может считать большие числа, которые другие модели того же размера считают неверно.

Во‑вторых, она умеет разбивать слова по буквам, считать количество букв в словах. Например, может сказать сколько букв «r» в слове «strawberry».



Ну и базово понимает русский, английский и французский. Может переводить простые фразы и поддерживать простой диалог.

что под капотом:
Архитектура: Llama 3 (20 слоев, размерность 1024, 16 голов). Контекст 4096, словарь 16384.
На претрейне скормил ей 11.8 млрд токенов (батч 512k).
На SFT ушло больше 16.5 млн токенов качественной синтетики, которую я сам генерировал через Gemma 4, Qwen 3.5 и DeepSeek v4.
Немного о процессе обучения и данных: Обучать с нуля даже 260М модель на домашней RTX 4060 (с её 8 ГБ видеопамяти) — то еще удовольствие. Чтобы впихнуть невпихуемое, пришлось повозиться с размером батча (накапливал градиенты) и оптимизаторами. Сам претрейн занял у меня около 3 недель. Изначально модель должна была быть немного больше, на ~300м параметров, но из‑за того что не хватало памяти был включен gradient_checkpoint, который замедлял обучение, чтобы ускорить его я отрезал нейросети 4 слоя (изначально было 24) и продолжил учить намного быстрее.
Отдельная история — это данные. Для базового обучения (11.8 млрд токенов) я взял википедию на ru/en/fr, датасет culturaX, Cosmopedia и код. А чтобы научить её нормально считать и бить слова по буквам, я сгенерировал скриптом поразрядную математику и спеллинг в формате ChatML и учил ее считать и писать так сразу еще на претрейне. В предыдущих версиях я на претрейне давал ей сырые примеры, без формата чата, и в итоге после файнтюнинга когда формат менялся она ломалась и считала неверно.
Для файнтюнинга я не брал готовые датасеты, а сгенерировал свои при помощи локальной Gemma 4, Qwen 3.5, и для сложных запросов Deepseek 4 flash по апи. На сбор и генерацию данных в сумме ушло около месяца.
Модель можно запустить через Lm Studio, как чат версию так и базовую модель.
Название модели: dpp‑gptV2.1 Pro.
Ссылка на чат версию: https://huggingface.co/dikiyplayerpig/dpp‑gpt‑V2.1-Pro-260m
Ссылка на base версию (просто продолжает текст): https://huggingface.co/dikiyplayerpig/dpp‑gpt‑V2.1-base-260m
Кстати, сейчас я обучаю flash версию на ~90м параметров. Она почти в 3 раза меньше, посмотрим сможет ли она считать. Буду очень рад любым советам и критике от тех, кто глубоко шарит в ML и обучении моделей. Если у вас есть идеи, как лучше фильтровать датасеты, оптимизировать процесс или улучшить математику у таких малюток — добро пожаловать в комменты!



Оговорюсь: изначально я написал этот пост для Пикабу, но там сугубо технические детали мало кому интересны. Поэтому решил прийти в Песочницу Хабра, чтобы получить реальный фидбек и советы от профильного сообщества.
