Последние полгода я обучал свою небольшую нейросеть с нуля на одной 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 и обучении моделей. Если у вас есть идеи, как лучше фильтровать датасеты, оптимизировать процесс или улучшить математику у таких малюток — добро пожаловать в комменты!



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

linux-over
19.06.2026 10:31Вот как учат модель понимать слова - я понимаю. Берём много текстов и заставляем предсказывать удалённое слово.
а вот как потом после этого доучивают её считать - этого я пока не понял. у Вас в статье написано что это разные фазы. Можете в двух словах пояснить?PS: спасибо за интересную статью

dikiyplayerpig Автор
19.06.2026 10:31Так, я вроде бы не писал, что это разные фазы, возможно, я выразился двусмысленно или вы что-то не так поняли, но, по сути, я не учил ее считать как-то необычно.
Как делают с другими нейросетями, я не знаю, но я вливал в нее математику сразу еще на претрейне точно так же, как и обычный текст, но в формате диалога, так же, как на файнтюнинге в ChatML. В предыдущих версиях я либо не учил ее считать на претрейне, либо учил считать в другом формате, но в результате этого она либо вообще не умела считать, либо в момент файнтюнинга ломала все знания соответственно. Так что теперь я просто учу ее сразу с ее первого шага в формате диалога математике, параллельно с текстом без какого-либо формата.

wintermute2025
19.06.2026 10:31Есть пословица: "один в поле не воин, а путник". Вы же доказали обратное. Пусть размер LLM-ки маленький, но начало положено - моделька на хагинфейсе, поддерживает Ollama & LM Studio. Вам бы ещё датасет покачественнее раздобыть бы, да кластер из пользованных V100 сделать - того гляди и модель на миллиард параметров осилили бы.
Но даже в её нынешнем состоянии эта LLM-ка выглядит как добротный прототип, который показать не стыдно ;)

dikiyplayerpig Автор
19.06.2026 10:31Спасибо за отзыв!
Кластер из V100 это конечно круто... Но пока что у меня есть лишь одна 4060. В будущем 5070 ti купить планирую, наверно выйдет обучить 500-700м.
А датасет качественнее 100% станет в будущем!
Weron2
19.06.2026 10:31Если сделать gguf то сразу больше пользователей будет)
А вообще было бы интересно само описание процесса. Вы говорите берете llama3 открываете ее в какой-то программе, в этой программе указываете датасет, и нажимаете кнопку учись? Или как это происходит? Какая программа? Почему бы не взять за основу ту же gemma4 - более современная
Хотя кажется я вообще не так все понял и llama3 это просто архитектура и от нее ничего не было от готовой. Тогда все еще интереснее - что и как сделать в домашних условиях.

dikiyplayerpig Автор
19.06.2026 10:31Архитектура llama3, а веса инициализированы рандомные. И нет, gemma 4 не лучше для таких микро моделей, во первых она мультимодальна, что мне не нужно пока, во вторых там другая функция активации, и для такого размера модели это может быть хуже. Хотя это только теория, а мультимодальность можно вырезать, основная причина в том что ллама3 итак одна из лучших архитектур, и нет смысла менять.
И нет никакой программы, есть python и терпение, а датасет я беру с хагингфейса, вики, culturaX, код, и еще по мелочи, для файнтюнинга датасет сам генерировал, нигде не брал готовый.А .gguf уже есть, на том же хагингфейсе.

debagger
19.06.2026 10:31Поищи 2080 ti с 22gb vram, их можно найти за 35-40т.р.

dikiyplayerpig Автор
19.06.2026 10:31а она точно быстрее будет? Она уже старая же очень. Я планирую 5070 ti купить, вот она точно будет быстрее намного.

debagger
19.06.2026 10:31Если скорость важнее объёма vram, то 5070 ti будет конечно быстрее. Просто на 16 гб быстро станет тесно.

dikiyplayerpig Автор
19.06.2026 10:31просто если ии такого размера, который занимает 22 гб претрейнить на 2080 ти, то сколько он будет учится? пол года? сделать его поменьше но обучить за 2 недели конечно лучше

debagger
19.06.2026 10:31По скорости (это моя оценка, исходя из пропускной скорости памяти и бенчмарков) 5070 ti будет 30-50% быстрее чем 2080 ti. Просто на 22гб врам уже реально запустить кванты хороших локальных ллм типа qwen3.6 или gemma4, а на 16гб не получится (можно попробовать moe с выгрузкой экспертов в ram, но это все равно будет сильно медленнее). В общем то решать вам, я просто подсветил, что есть такой вариант на рынке и можно его рассмотреть.

dikiyplayerpig Автор
19.06.2026 10:31Мне вроде запускать ллм особо не надо, я обучаю ее. А запускается у меня на 4060 с выгрузкой на цпу квен 3.6 35б с 30 ток/c, так как он MoE. Вроде норм скорость.
А еще скорость скорее всего на 5070 ti относительно 2080 ti будет все же выше чем на 30-50% быстрее, у нее не только пропускная способность памяти выше, у нее также более новые тензорные ядра. 5070 ti выдает в 4 раза больше терафлопс чем 2080 ti.

debagger
19.06.2026 10:31Упор идет в память. На 2080ti qwen3.6-35b грузит cuda-ядра на 60-70%, при этом дает 70т/с. У 5070ti пропускная способность примерно на 30% выше (память быстрее, но шина более узкая). Поэтому я так оцениваю. Gpu быстрее, но при генерации он простаивает из-за того что память не успевает подгружать новые данные. Вот prefill может быть значительно быстрее, поскольку он обрабатывает токены пачками.

morginalium8
19.06.2026 10:31Получилось супер. Я обычно более мелкие модели тренирую, но могу добавить немного важной инфы:
Используй датасеты с HF. Там уже куча синтетических диалогов и много датасетов для претрейна.
Размерность 1024 - ну, как будто много... Можно было глянуть тесты на 512 и 768.
Сравнивать такую маленькую модель на бенчах бесполезно. Попробуй измерить PPL и тд, они много инфы дадут.
А что касается самое статьи - было интересно почитать про архитектуру. Какие именно 20 слоев, что по активациям и линейным слоям, какой тип внимания, что с остаточными связями и другие моменты.
Если хочешь - напиши мне в личку, вместе можем что-нибудь классное придумать. Вторую версию сделать, например. Или эту доработать.

dikiyplayerpig Автор
19.06.2026 10:31Это уже не первая версия, и следущая версия будет в будущемю А с эмбедингом 512 модель значительно хуже факты запоминает (по моему опыту), она и так то особо ничо не знает, но если еще понижать то еще хуже. А размер хотел сделать 260-300м, если бы я эмбединг ставил 512 или 768 слоев было бы слишком много.
Для претрейна я с хг и качал, но я не знаю какой датасет брать для файнтюнинга, и вроде сам я сделал нормально.
Насчет вопросов, архитектура вроде llama3 особо без изменений.
morginalium8
19.06.2026 10:31дле претрейна zyda очень хорош. там и статьи, и код, и инет. вышел пару месяцев назад, очень хорошо отфильтрован.
есть ру-диалоги, глянь у гусева или у вихрей. они там 4о дистилили, так что качество хорошее. если есть желание ризонинг прокачать - OpenThoughts, там 1М диалогов (но на англ).
llama3 это база. что с головами в gqa, как распределил K и V?

art3012
19.06.2026 10:31Последние полгода я обучал свою небольшую нейросеть с нуля на одной rtx 4060.
Во‑первых, она умеет считать по разрядам. Она может считать большие числа
Во‑вторых, она умеет разбивать слова по буквам, считать количество букв в словах.
ZX-Spectrum, Basic, 1991 год, потратил субботний вечер.
Я нисколько не хочу приуменьшить Ваш эксперимент. Любой эксперимент, доведенный до результата и описанный заслуживает уважения.
Я о том, что последние года четыре в ИТ-лексиконе понятие «алгоритм» постепенно вытесняется понятием ИИ/LLM.

dikiyplayerpig Автор
19.06.2026 10:31Я не понял в чем проблема с алгоритмом и как это противоречит LLM

dikiyplayerpig Автор
19.06.2026 10:31Алгоритм это хорошо, но 30 летний алгоритм может написать стих? Или понять по текстовой задаче что надо сделать, вычесть или сложить?

art3012
19.06.2026 10:31Нейросеть - это также алгоритм. Просто тенденция последних лет это чрезмерное обобщение существующих десятилетия различных алгоритмов под одной аббревиатурой ИИ/LLM, что вводит многих людей в заблуждение касательно реального предназначения нейросетей.

dikiyplayerpig Автор
19.06.2026 10:31А какое реальное предназначение нейросетей? Я вроде не называл никакие десятилетние алгоритмы LLM.

avshkol
19.06.2026 10:31LLM отличаются алгоритмом/механизмом трансформера и внимания, а они существуют далеко не десятилетия, а (одно) десятилетие. Поэтому когда говорим LLM, а не "нейросеть" вообще, речь идёт о новой технологии.

avshkol
19.06.2026 10:31Интересно, вы обучали на русском, английском и французском?
Интересный был бы эксперимент, если бы только на русском - да, не могла бы переводить с английского, но насколько лучше или хуже отвечала бы по-русски?
И французский - возможно в такой маленькой модели, он только отнимал время обучения, но не давал прироста качества ответа (по сравнению со связкой русский-английски)? Но это предположение.

dikiyplayerpig Автор
19.06.2026 10:31Качества французский и русский язык может не давал, но он давал ей возможность говорить на русском и французском, а не только на английском. Я хотел сделать ее мультиязычной, и в планах было добавить еще пару языков, хотя есть сомнения.
А вообще французский у нее хуже всего, видимо его в датасете было меньше, это тоже надо бы будет исправить.
Bardakan
что если агенту с нейросетью, которая не умеет это делать, в промпт добавить что-нибудь вроде "используй python"?
dikiyplayerpig Автор
Тогда она, конечно, сможет это сделать. Я даже проверял это: давал локальной Gemma 4 доступ к исполнению кода и просил разбить слова по буквам. Версия 4B отлично справляется с использованием кода, а 2B - хуже. Она почему-то часто запускает код, получает правильную строку, но вместо того чтобы просто вывести её, начинает сама разбивать слово по буквам (и делает это неправильно). Но вообще это рабочий подход, особенно с большими моделями.
Но в рамках моего проекта мне было интересно научить именно саму нейросеть разбивать слова по буквам "в уме". Ну и чтобы вызывать инструменты моя ии пока слишком глупая :)