- BrainTools - https://www.braintools.ru -

Дообучил pretrain ruGPT3 XL 1.3B до уровня LLM (~2020 год, ChatGPT выйдет через 2 года). Сравнение с Gemma3 1B 2025 года

Дообучил pretrain ruGPT3 XL 1.3B до уровня LLM (~2020 год, ChatGPT выйдет через 2 года). Сравнение с Gemma3 1B 2025 года - 1

Древняя модель ruGPT-3 XL 1.3B конца 2020 – начала 2021. Модели тех времён не умели выполнять инструкции или вести диалог в чате, они умели только продолжать текст. С помощью современных методов дообучения SFT и DPO можно ли сделать из старого pretrain современную LLM? Получившийся результат сравним с Gemma3 1B, моделью 2025 года. И немного продолжения HabrGPT 0.5B с дообучением на большом датасете.

Содержание

Этапы обучения LLM

Обучение [20] LLM имеет 3 основных этапа:

  • pretrain – это base модель. Неразмеченный сырой текст, модель учится продолжать.

  • SFT – это instruct модель. Требует качественный, размеченный датасет.

  • DPO – выравниваем ответы модели на ещё более качественном датасете.

Pretrain – обучение с нуля начинается со случайных параметров, на вход необученной модели подается сырой текст, модель шаг за шагом пытается предсказать новые токены на основе предыдущего текста – цель настроить параметры так, чтобы модель могла уверенно продолжать текст. Есть различные стратегии как заполнять pretrain для улучшения результата.

Вначале pretrain веса случайны, но по мере обучения начинают проявляться структуры:

Из хаоса в структуру

Из хаоса в структуру

SFT из продолжателя текста, создает модель, которая может проводить размышления, создавать стратегию ответа, отвечать на вопросы, выполнять задания. DPO, современный метод, который упростил и заметил RLHF, позволяет выровнять модель повышая её качество.

Детальнее про этапы обучения модели с нуля можно найти в моей предыдущей статье:

habrGPT. Обучим LLM 0.5B с нуля на статьях Хабра с помощью nanochat от Карпатого. Обучение fp8 дома и сравнение с bf16 [21]

Дообучил pretrain ruGPT3 XL 1.3B до уровня LLM (~2020 год, ChatGPT выйдет через 2 года). Сравнение с Gemma3 1B 2025 года - 3

ruGPT-3. Как было до SFT

Семейство ruGPT-3 это pretrain модели представленные в различных размерах. Версия XL 1.3B обучалась ~10 дней на 256 Tesla V100, размер датасета 80B токенов, 4 эпохи на контексте длиной 512 токенов и 1 эпоха файнтюна, расширяющая контекст до 2048. Умелец @efreelancer [22] проделал работу, чтобы конвертировать старую модель в современный формат, к которому можно применять привычные скрипты. Подробности в его статье: https://habr.com/ru/articles/1016148/ [23]

В 2020 году ещё не придумали способ обучение на instruct, SFT появилось только к 2022 году, когда первая SFT-модель InstructGPT, вышедшая в январе 2022 года, продемонстрировала новые горизонты для LLM.

До этого момента модели были тем, что сейчас называют pretrain, они не понимали концепцию вопроса или задания, любой текст они просто продолжали.

Например, вопрос как часть повествования:

Дообучил pretrain ruGPT3 XL 1.3B до уровня LLM (~2020 год, ChatGPT выйдет через 2 года). Сравнение с Gemma3 1B 2025 года - 4

Или вопрос как часть диалога:

Дообучил pretrain ruGPT3 XL 1.3B до уровня LLM (~2020 год, ChatGPT выйдет через 2 года). Сравнение с Gemma3 1B 2025 года - 5

Pretrain не может понять, что от неё хотят, она умеет только продолжать текст:

Дообучил pretrain ruGPT3 XL 1.3B до уровня LLM (~2020 год, ChatGPT выйдет через 2 года). Сравнение с Gemma3 1B 2025 года - 6

Как управлять pretrain-моделью

Можно управлять тем, что и как именно будет продолжать pretrain, для этого нужно начать фразу правильным образом, создать “затравку”.

Например, для задачи перевода можно начать перечислять пары слов и последнюю пару оставить без перевода. Или нужно задать вопрос и начать ответ:

Дообучил pretrain ruGPT3 XL 1.3B до уровня LLM (~2020 год, ChatGPT выйдет через 2 года). Сравнение с Gemma3 1B 2025 года - 7

Но такое управление моделью не стабильное, у модели нет понимания как должен выглядеть ответ, как красиво и информативно заполнить шаблон. Сами ответы раз от раза будут хаотичными, неполными или перескакивать на другую тему.

Начали с Чебурашки, модель подумала, что речь про чебуреки, и ответила уже про вкус [24], и кажется, что модель ни на что не способна как генерировать случайные вещи:

Дообучил pretrain ruGPT3 XL 1.3B до уровня LLM (~2020 год, ChatGPT выйдет через 2 года). Сравнение с Gemma3 1B 2025 года - 8

Чем тут поможет SFT

Если показать pretrain как здороваться, как отвечать на вопросы, как выполнять задания, то модель очень быстро усвоит шаблон. Но у LLM нет возможности работать ни с чем, кроме сплошного текста, поэтому нужно показать модели как отделять свои ответы от запросов пользователя, для этого создают шаблон, например, формат ChatML:

<|im_start|>system
Ты — полезный и вежливый AI-ассистент. Отвечай кратко и по делу.<|im_end|>
<|im_start|>user
Привет! Какое расстояние от Земли до Луны?<|im_end|>
<|im_start|>assistant
Привет! Среднее расстояние от Земли до Луны составляет около 384 400 километров.<|im_end|>
<|im_start|>user
А сколько лететь туда на обычном самолете?<|im_end|>
<|im_start|>assistant

Для простого понимания шаблона вопрос-ответ достаточно 100-200 примеров, который будут заполнять такой шаблон и отправляться модели на вход. Каждый раз новый ответ или запрос будет добавляться к такому шаблону и модели на вход будет подаваться сформированный новый текст целиком.

Пример датасета вопрос-ответ

Пример датасета вопрос-ответ
Дообучение на вопрос-ответ, модель быстро распознает структуру

Дообучение на вопрос-ответ, модель быстро распознает структуру

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

После дообучения на вопрос-ответ модель отвечает и завершает генерацию

После дообучения на вопрос-ответ модель отвечает и завершает генерацию

ruGPT-3. Как стало после SFT

Для создания универсальной LLM не хватит 100-200 примеров, так как датасет должен содержать в себе не только вопрос-ответ, но и весь спектр возможных сценариев. Поэтому возьмём готовый датасет, который хорошо сбалансирован.

DPO датасет IlyaGusev/saiga_preferences [25] от @Takagi [26] имеет 30к записей, они хорошо подобраны, но это DPO датасет, поэтому для SFT он будет не полным, но достаточным для демонстрации. Чтобы из DPO сделать SFT, нужно не учитывать rejected ответы.

Обучение стандартным huggingface SFTTrainer, для ускорения компиляции model = torch.compile(model, ...). Для windows нужно установить triton-windows, возможно flash-attn. Датасет не очень большой, 1 эпоха занимает ~1.5 часа. Можно обучать как full finetune, так и LoRA, DoRA, QLoRA, в зависимости от того, сколько есть VRAM.

Датасет маленький, всего 42M токенов:

saiga_preferences, 31к записей, 42M токенов

saiga_preferences, 31к записей, 42M токенов

Обучение занимает несколько часов, так как датасет маленький, то 2 полные эпохи. Ппо ходу обучения снижается loss, что говорит о том, что шаблоны усваиваются, и вместе с ними усваивается немного новой информации из датасета, но так как это всего 42M токенов, то это не существенно повлияет на pretrain, который обучался на 80B токенах.

Дообучение завершено, и теперь модель отвечает как и ожидается. Понимает вопрос, дает корректный ответ, соблюдает шаблон и форму. Генерация завершается сама, токен EOS генерируется корректно.

Про Чебурашку ответ теперь выглядит нормально:

"Каждый год 31 октября на экраны выходит новый фильм про Чебурашку"

“Каждый год 31 октября на экраны выходит новый фильм про Чебурашку”

Чтобы было удобнее, конвертируем модель в gguf и перейдем на llama.cpp.

Дообучение на датасете Сайги, там были записи о том, как модель должна представляться, поэтому в ответ на “кто ты” модель пишет, что она Сайга:

Дообучил pretrain ruGPT3 XL 1.3B до уровня LLM (~2020 год, ChatGPT выйдет через 2 года). Сравнение с Gemma3 1B 2025 года - 14

Но при этом в другой раз она уверена, что она создана Claude от Anthropic:

Дообучил pretrain ruGPT3 XL 1.3B до уровня LLM (~2020 год, ChatGPT выйдет через 2 года). Сравнение с Gemma3 1B 2025 года - 15

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

Дообучил pretrain ruGPT3 XL 1.3B до уровня LLM (~2020 год, ChatGPT выйдет через 2 года). Сравнение с Gemma3 1B 2025 года - 16

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

Перевод после дообучения на другом SFT

Перевод после дообучения на другом SFT

Тестирование получившейся SFT-модели в llama.cpp

Чтобы оценить на сколько pretrain стал походить на современную LLM, прогоним несколько сценариев. Так как pretrain не обучался на задачах программирования, то проверять будем только творчество [27], логику [28], креатив.

Первое, то что модель теперь хорошо распознает вопрос и отвечает ожидаемо:

Дообучил pretrain ruGPT3 XL 1.3B до уровня LLM (~2020 год, ChatGPT выйдет через 2 года). Сравнение с Gemma3 1B 2025 года - 18

Усложним задачу. Одновременно и вопрос и инструкция в одном промпте, плохо обученные модели ответят только на вопрос или проигнорируют вопрос и выполнят инструкцию. Другая задача “развесели меня”, посмотреть, может ли модель отвечать не только на вопросы.

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

Дообучил pretrain ruGPT3 XL 1.3B до уровня LLM (~2020 год, ChatGPT выйдет через 2 года). Сравнение с Gemma3 1B 2025 года - 19

Одна из сложных вещей – многоходовые диалоги, вопрос-ответ модель может усвоить очень быстро, а понимать шаблон диалога при этом нет. Посмотрим, научилась ли модель поддерживать связность при накоплении истории. Вначале спросим у неё кто она, потом дадим головоломку, и после попросим выполнить пару простых заданий.

В ответах нет переплетения контекста, по ходу диалога все ответы соответствуют промпту, задания выполнены, ответы правильные:

Обычный чат, запросы один за другим

Обычный чат, запросы один за другим

Негативные инструкции

В целом не плохо, модель уже стала не просто продолжателем текста, а настоящим чат-ботом. И обычно маленькие LLM проваливает тест на “не думай о белом медведе”. Проверим как справляется модель.

Просим написать короткий рассказ, в котором нельзя упоминать слово “щенок”. Модель не знает, что такое “очень короткий”, и про щенка тоже провалила условие:

Дообучил pretrain ruGPT3 XL 1.3B до уровня LLM (~2020 год, ChatGPT выйдет через 2 года). Сравнение с Gemma3 1B 2025 года - 21

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

Дообучил pretrain ruGPT3 XL 1.3B до уровня LLM (~2020 год, ChatGPT выйдет через 2 года). Сравнение с Gemma3 1B 2025 года - 22

Модель может выполнить такую задачу, но не знает как это сделать, она не проходила дообучение на то, чтобы контролировать длину и выполнять негативные инструкции. К модели не применялись никакие штрафы, чтобы понижать сигнал для плохих ответов, и повышать для соответствующих. Для этого применяют выравнивание, например, через DPO.

Но прежде чем перейти к DPO, проверим другую идею – цепочка размышлений CoT (Chain-of-Thought). Добавляя в контекст дополнительную информацию, можно помочь механизму внимания [29] лучше сконцентрировать сигнал вокруг нужного ответа.

Чтобы быстро проверить эту идею, то внедрим CoT мысль вручную. Сначала создадим запрос, но вместо ответа модели подставим текст с мыслью: [Мысль: Мне нужно написать короткий рассказ о маленькой собаке, но я не имею права использовать слово “щенок”. Я буду использовать слова “малыш” и “собачка”.]

Дообучил pretrain ruGPT3 XL 1.3B до уровня LLM (~2020 год, ChatGPT выйдет через 2 года). Сравнение с Gemma3 1B 2025 года - 23

Кнопка продолжить подсвечена

Для модели нет понимания самая она это сгенерировала или нет, так как на каждом шагу она просто получает новый текст от начала до конца, просто там добавляется 1 новый токен. И можно самостоятельно добавить необходимое количество токенов и продолжить генерацию с любого момента. Поэтому добавляем мысль и нажимаем продолжить генерацию.

Частично сработало, вместо “щенок” модель использовала “маленькая собачка”, для маленьких моделей режим CoT очень полезен для повышения качества. Но CoT не помогает с длинной ответа, так как модель ещё не получала штрафы за неправильную длину.

Дообучил pretrain ruGPT3 XL 1.3B до уровня LLM (~2020 год, ChatGPT выйдет через 2 года). Сравнение с Gemma3 1B 2025 года - 24

Сравним с Gemma3 1B

Перед тем как перейдем к DPO, интересно сравнить получившуюся SFT-модель с чем-то более современным, например, Gemma3 1B 2025 в целом в той же весовой категории. ruGPT3 обучалась на 80B токенах, Gemma3 1B 2025 года обучалась на 2T, что в 26 раз больше.

Скорее всего для Геммы такое перенасыщение идёт в минус, так как 1B не способно вместить такое количество данных, особенно при смене языка с английского на другой.

Сразу зайдем с козырей. Задача про знание отечественных рок групп, у ruGPT3 очевидно с этим будет лучше. В ответ неплохой список у ruGPT3, у Gemma3 1B с этим плохо:

Дообучил pretrain ruGPT3 XL 1.3B до уровня LLM (~2020 год, ChatGPT выйдет через 2 года). Сравнение с Gemma3 1B 2025 года - 25

Теперь простой многоходовый чат. Сначала приветствие, дальше сделать вывод по тексту, задание продолжить текст и в конце небольшая загадка. По началу обе модели идут ожидаемо хорошо, но под конец Gemma3 1B проседает, и в конце дает неправильный ответ на загадку, ruGPT3 справляется:

Дообучил pretrain ruGPT3 XL 1.3B до уровня LLM (~2020 год, ChatGPT выйдет через 2 года). Сравнение с Gemma3 1B 2025 года - 26

Дальше длинные и сложные вопросы на которые надо дать ответ одной фразой. Первый вопрос про квантовую физику. ruGPT-3 ответила правильно, Gemma3 1B нет:

Правильный ответ "квантовое туннелирование"

Правильный ответ “квантовое туннелирование”

Второй длинный вопрос, про механику. Gemma3 1B ошибается, ruGPT3 дает правильный ответ:

Правильный ответ "Инерция"

Правильный ответ “Инерция”

Простая загадка на пространственное восприятие [30] и запоминание [31]. Несмотря на предложение для Gemma3 1B подумать, она настаивает на ошибочном решении, у ruGPT3 ответ правильный:

Дообучил pretrain ruGPT3 XL 1.3B до уровня LLM (~2020 год, ChatGPT выйдет через 2 года). Сравнение с Gemma3 1B 2025 года - 29

Ещё проще: “Что люди делают по ночам? Одним очевидным словом”. У Gemma3 1B ответ развернутый, включает многие факторы, которые правильные, но правило про 1 слово не выполнено, у ruGPT3 ответ “Люди спят”:

Дообучил pretrain ruGPT3 XL 1.3B до уровня LLM (~2020 год, ChatGPT выйдет через 2 года). Сравнение с Gemma3 1B 2025 года - 30

Пока Gemma3 1B ни разу не справилась. Возможно, это совпадение, например, ruGPT в целом не способна давать развернутые ответы и просто пишет 1-2 слова, что выглядит как умный ответ. Попросим дать развернутый ответ на то же самое задание.

Обе модели хорошо и структурированно расписали ночные занятия:

Дообучил pretrain ruGPT3 XL 1.3B до уровня LLM (~2020 год, ChatGPT выйдет через 2 года). Сравнение с Gemma3 1B 2025 года - 31

Отыгрыш роли, тут не требуется точных ответов, нужно лишь изменение поведения [32] и стиля ответов. Задание для моделей притвориться собакой и говорить “Гав”.

Обе модели как будто бы справились, сложно понять, каждая по своему сработала:

Дообучил pretrain ruGPT3 XL 1.3B до уровня LLM (~2020 год, ChatGPT выйдет через 2 года). Сравнение с Gemma3 1B 2025 года - 32

Более сложное, пускай будут линукс-терминалами. И вот тут у ruGPT-3 XL провал, модель вместо имитации терминала начала описывать что делают команды:

Дообучил pretrain ruGPT3 XL 1.3B до уровня LLM (~2020 год, ChatGPT выйдет через 2 года). Сравнение с Gemma3 1B 2025 года - 33

Немного DnD. Нужно учитывать сцену, имена участников, расположение персонажей и общий сценарий. Тут уже обе модели плохо справляются, у ruGPT-3 XL ответ поинтереснее, но пошло раздвоение личности, в остальном не выглядит так, что модели справились:

Дообучил pretrain ruGPT3 XL 1.3B до уровня LLM (~2020 год, ChatGPT выйдет через 2 года). Сравнение с Gemma3 1B 2025 года - 34

У Gemma3 1B огромное преимущество в технических и комплексных задачах, вроде написать код или извлечь данные в json, на примере с терминалом видно, что ruGPT3 не обучалась на таких данных и не сможет потягаться на этом поле.

SFT навязывает “поведение” для модели

Проблема перехода из pretrain в SFT в том, что какой стиль будет задан в датасете, такой и приобретет модель. Часто можно услышать о том, что интересно посмотреть на чистую модель, как бы она отвечала без навязывания ей какого-то поведения [33]. Но по сути через SFT нельзя получить “чистую модель”, будет взят именно тот шаблон, который модели и давали.

Например, тип отказа:

Дообучил pretrain ruGPT3 XL 1.3B до уровня LLM (~2020 год, ChatGPT выйдет через 2 года). Сравнение с Gemma3 1B 2025 года - 35

Даже писать грубо отказывается:

Дообучил pretrain ruGPT3 XL 1.3B до уровня LLM (~2020 год, ChatGPT выйдет через 2 года). Сравнение с Gemma3 1B 2025 года - 36

При этом если её попросить более явно, то напишет даже матом, так как дообучение было не полным:

Осторожно, мат
Дообучил pretrain ruGPT3 XL 1.3B до уровня LLM (~2020 год, ChatGPT выйдет через 2 года). Сравнение с Gemma3 1B 2025 года - 37

Можно даже полностью перевернуть стиль ответов. Например, возьмем датасет Telegram чатов Den4ikAI/russian_dialogues [34] и дообучим на нём. Этот датасет содержит диалоги в свободном стиле общения, и для примера хватит первых 5-10к записей.

Теперь модель пишет “ыыыыы))) да вы шутите) как можно создать искусственный интеллект [35] без полного понимания принципов его работы?)”. И дальнейший ответ в таком же стиле:

Ответ модели: ыыыыы))) да вы шутите) как можно создать искусственный интеллект без полного понимания принципов его работы?)

DPO vs SFT

После SFT идет этап выравнивания. На этапе SFT модель научилась отвечать на вопросы, хорошо ли, плохо ли, но научилась отвечать, поэтому дальше можно научить её отвечать на вопросы хорошо. Для этого нужно показать ей пары, хорошие и плохие варианты ответов, сравнить активации этих ответов, усилить сигнал хороших и снизить плохих.

Обучение через DPOTrainer, в датасете Сайги теперь можно задействовать поле rejected:

Дообучил pretrain ruGPT3 XL 1.3B до уровня LLM (~2020 год, ChatGPT выйдет через 2 года). Сравнение с Gemma3 1B 2025 года - 39

После дообучения, первые тесты показывают, что изменение есть, условие про щенка выполняется чаще, модель придумала “маленький коричневый комочек шерсти”:

Дообучил pretrain ruGPT3 XL 1.3B до уровня LLM (~2020 год, ChatGPT выйдет через 2 года). Сравнение с Gemma3 1B 2025 года - 40

При этом стиль ответов изменился на более свободный, но общее оформление улучшилось:

Дообучил pretrain ruGPT3 XL 1.3B до уровня LLM (~2020 год, ChatGPT выйдет через 2 года). Сравнение с Gemma3 1B 2025 года - 41

Сравним DPO и SFT лоб в лоб. При этом надо учесть, что ответы не всегда стабильны, температура может изменить ответ и у первого и у второго как в лучшую, так и в худшую сторону.

Просьба закончить фразу. DPO справился, SFT нет. SFT сделал типичную проблему для SFT без выравнивания, просто повторить фразу. Это случается не каждый раз, но зацикливание и эхо частое явление при не полноценном дообучении:

Дообучил pretrain ruGPT3 XL 1.3B до уровня LLM (~2020 год, ChatGPT выйдет через 2 года). Сравнение с Gemma3 1B 2025 года - 42

Прочитать текст и дать ответ. DPO дал правильный ответ, SFT начал сочинять историю:

Дообучил pretrain ruGPT3 XL 1.3B до уровня LLM (~2020 год, ChatGPT выйдет через 2 года). Сравнение с Gemma3 1B 2025 года - 43

В целом после DPO качество подросло, но теперь модель общается сама с собой и генерировать токен <|assistant|>. Это явно проблема не DPO, а какая-то проблема скриптов, поэтому попробуем разобраться.

Дообучил pretrain ruGPT3 XL 1.3B до уровня LLM (~2020 год, ChatGPT выйдет через 2 года). Сравнение с Gemma3 1B 2025 года - 44

Анализ ошибок обучения DPO

Проблема оказалась в том, что для DPO не был создан шаблон аналогичный тому, что создан для SFT, поэтому произошел рассинхрон. Нужно восстановить согласованность и дообучить заново.

Дообучение с правильным шаблоном прошло успешно, модель почти перестала добавлять токен <|assistant|> в чат, и перестала общаться сама с собой. Но проявилась другая особенность, модель начала отвечать в стиле DnD:

Оригинальный safetensors после выравнивания DPO

Оригинальный safetensors после выравнивания DPO

Модель усилила свои веса отыгрыша:

Дообучил pretrain ruGPT3 XL 1.3B до уровня LLM (~2020 год, ChatGPT выйдет через 2 года). Сравнение с Gemma3 1B 2025 года - 46

DPO другой датасет

Для сравнения, попробуем другой датасет для DPO, например, перевод одного старого формального датасета d0rj/rlhf-reward-datasets-ru [36]

После 1 эпохи стиль действительно стал более формальным:

Дообучил pretrain ruGPT3 XL 1.3B до уровня LLM (~2020 год, ChatGPT выйдет через 2 года). Сравнение с Gemma3 1B 2025 года - 47

В задачах на сочинить историю, стиль не стал сухим, а остался живым:

Дообучил pretrain ruGPT3 XL 1.3B до уровня LLM (~2020 год, ChatGPT выйдет через 2 года). Сравнение с Gemma3 1B 2025 года - 48

Негативные подсказки срабатывают чаще в DPO версии:

Нужно дать ответ не используя слово "вкусный"

Нужно дать ответ не используя слово “вкусный”

В целом, какое DPO ни возьми, оно улучшает ответы как и задумано. И при этом дополнительно, помимо SFT, влияет на стиль ответов, что тоже логично.

Стихи и песни. SFT vs DPO

Качественные стихи и песни для таких моделей слишком сложная задача, но тут интереснее посмотреть на шаблон и размер, может ли модель выдать что-то похожее, и как влияет SFT и DPO на эту задачу.

Нужно взять первые 3 строки и продолжить стих. SFT повторил только первую строку, но сам размер и шаблон в целом соблюдается:

SFT

SFT

DPO повторила все 3 строки и продолжила с учетом них. При написании песни тоже учла 1 куплет и на его основе продолжила песню:

DPO

DPO

Проблема с файлами gguf и контекстом длиннее 128 токенов

Модель ruGPT3 обучена со Sparse Attention, настроенная на 128 токенов. Поэтому всё, что выходит за 128 токенов попадает в первое разреженное внимание. На коротких диалогах это не особо заметно, но если нужно сохранять структуру на всей генерации, например, создать корректный html файл, то без рабочего Sparse Attention ничего не выйдет.

Например, попробуем сгенерировать html страницу, вначале всё идет нормально, но под конце генерация сломана:

gguf без патча sparse attention

gguf без патча sparse attention

Если применить патч на Sparse Attention, то тоже задание генерирует полностью рабочу html страницу, даже preview запускается:

gguf с патчем sparse attention

gguf с патчем sparse attention

Но даже с патчем модель способна писать только очень простой код, так как её не обучали на коде, это сделали только в ruGPT-3.5.

Патч создан @efreelancer [22], но он не принят в основную ветку llama.cpp, поэтому нельзя создать gguf, который заработает у всех. Подробнее про эту проблему, из-за которой PPL вместо 10 становиться 50, что снижает качество ответов в 5 раз, тут:

gguf

Несмотря на проблему с контекстом длиннее 128 токенов, я собрал gguf, который заработают у всех, но нужно учитывать эту особенность.

Так же я обучал модель такому шаблону чата:

<|user|> Привет.
<|assistant|> Привет, я бот.
<|endoftext|>

Такой шаблон дает лучшую сходимость и потом работает стабильнее, чем:

Вопрос: Привет.
Ответ: Привет, я бот.

В gguf новый шаблон уже вшит, но там нет исправления sparse attention, качество будет резко проседать после 128 токенов, поэтому рассчитывать на многое не стоит. Но проверить концепцию можно, либо использовать safetensors:

Про загадку с автомойкой и машиной

Такая маленькая модель не может дать правильный ответ осознано, но за счет работы семплинга, за счет добавленной случайности [41], у модели позволяет выдавать 50/50 правильный ответ, отвечая в ответ то доехать, то прогуляться.

Если уточнить причину, будет понятно, что он ничего не понял:

Дообучил pretrain ruGPT3 XL 1.3B до уровня LLM (~2020 год, ChatGPT выйдет через 2 года). Сравнение с Gemma3 1B 2025 года - 54

Больше не значит лучше, наполнение SFT датасета

Причина почему я использую DPO датасет saiga_preferences как SFT (и тут и в статье про habrGPT) в том, что он не плохо сбалансирован и не требует калибровки, но для SFT он не полон, поэтому все возможности pretrain не раскрываются. Но это позволяет получать сразу хорошие результаты при минимальном размере датасета.

Особенность хорошего современно SFT в том, что он не должен быть просто наполнен множеством примеров, нужна определённая стратегия заполнения.

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

Для математики [42] и кода не нужного много примеров, нужно чтобы это были хорошо отобранные примеры, просто весь подряд код тут не нужно добавлять, для этого был pretrain.

Дообучил pretrain ruGPT3 XL 1.3B до уровня LLM (~2020 год, ChatGPT выйдет через 2 года). Сравнение с Gemma3 1B 2025 года - 55

Если домены распределены хаотично, а само заполнение плохое, то шум будет перебивать сигнал, модель потеряет стабильность, ответы будут то нормальные, то плохие, то хаотичные, если был перекос с каким-то доменом, то модель может на любую тему начать отвечать этим доменом и так далее. Другая проблема – катастрофическое забывание [43], модель теряет свои навыки, так как перекос в какой-то домен с плохими примерами снизил полезный сигнал.

Для примера, есть огромный датасет ZeroAgency/ru-big-russian-dataset [44], он имеет 1.8 млн записей, 0.92B токенов, это микс из разных источников.

Датасет большой, отфильтрованный, оцененный GPT-4.1 (что в целом не показатель), но собран из солянки различных источников, включая переводы, перекос в распределении, массовая генерация заглушает сигнал качественных данных.

На дообучение уходит несколько дней:

Дообучил pretrain ruGPT3 XL 1.3B до уровня LLM (~2020 год, ChatGPT выйдет через 2 года). Сравнение с Gemma3 1B 2025 года - 56

И этот датасет не подружился с ruGPT-3. Изначальная модель потеряла свои навыки, её ответы потеряли стабильность и может уходить в другие степи, отвечая не по теме.

На вопрос “Сравни трансформеры и рекуррентные нейросети” отвечает про трансформеров как автоботов:

Дообучил pretrain ruGPT3 XL 1.3B до уровня LLM (~2020 год, ChatGPT выйдет через 2 года). Сравнение с Gemma3 1B 2025 года - 57

Про Чебурашку, потеряна связь кто из них крокодил, а продолжение ответа совсем не относится к вопросу:

Дообучил pretrain ruGPT3 XL 1.3B до уровня LLM (~2020 год, ChatGPT выйдет через 2 года). Сравнение с Gemma3 1B 2025 года - 58

Ответы теперь больше похожи на набор ключевых слов, чего не было после Сайги. В итоге результаты стали хуже, чем на маленьком отборном датасете:

Дообучил pretrain ruGPT3 XL 1.3B до уровня LLM (~2020 год, ChatGPT выйдет через 2 года). Сравнение с Gemma3 1B 2025 года - 59

Возможно проблема дообучения где-то в скриптах или с самой моделью.

Дообучение HabrGPT 0.5B на большом датасете

Даже если датасет ru-big-russian-dataset не самый удачный вариант SFT для ruGPT3, то для пустой модели, которая изначально почти не имела данных, такой датасет дает наполнение, расширяет диапазон возможных задач и общих знаний.

Например, HabrGPT 0.5B [21], LLM которую я обучал с нуля только на статьях Хабра, тут нет других источников, нет знаний из Wiki, нет книг, имеет только ту информацию, что получилось аппроксимировать из Хабра:

HabrGPT 0.5B без дополнительных источников, только статьи Хабра

HabrGPT 0.5B без дополнительных источников, только статьи Хабра

После дообучения на ru-big-russian-dataset, модель получила недостающую информацию:

HabrGPT 0.5B + ru-big-russian-dataset

HabrGPT 0.5B + ru-big-russian-dataset

Модель могла немного переводить в pretrain, но не умела этого после SFT из-за неполного датасета, но теперь даже такая урезанная модель может в перевод:

HabrGPT 0.5B + ru-big-russian-dataset

HabrGPT 0.5B + ru-big-russian-dataset

В отличии от ruGPT3, которая не обучалась на коде, HabrGPT 0.5B лучше работает с кодом, и может даже создать список из пьес Шекспира в html:

HabrGPT 0.5B + ru-big-russian-dataset

HabrGPT 0.5B + ru-big-russian-dataset

Но этого всё равно не хватило, чтобы такая модель, обученная только на статьях Хабра, узнала, что такое батареи и полотенце, не хватает общих знаний:

HabrGPT 0.5B + ru-big-russian-dataset

HabrGPT 0.5B + ru-big-russian-dataset

И энциклопедических знаний в датасете, чтобы восполнить все пробелы, тоже не хватило, что нормально для SFT датасета, так как знания должны были закладываться в pretrain:

HabrGPT 0.5B + ru-big-russian-dataset

HabrGPT 0.5B + ru-big-russian-dataset

Заключение

Из чекпоинта ruGPT3-XL 1.3B при помощи современных методов дообучения получился proof-of-concept переход из base модели в instruct модель. Эта pretrain-модель обучена за 2 года до выхода ChatGPT, и умела только продолжать текст, но научилась вести диалог, выполнять инструкции, отвечать на вопросы, писать стихи, понимать неопределённые просьбы, давать рекомендации, решает простые головоломки.

Получился неплохой тренажер для тех, кому интересна тема обучения LLM дома. Сравнили различные датасеты, посмотрели как меняется поведение модели от содержимого датасета: от свободного неформального общения до формальных фактов. От датасета зависит качество LLM, чем полнее и лучше SFT/DPO, тем лучше результат, поэтому потенциал ruGPT3 не раскрыт. Секрет хорошего SFT не в количестве, а в стратегии заполнения, и тогда SFT может превратить обычную LLM в хорошую LLM. А с помощью DPO из хорошей LLM можно получить отличную.

Но, даже в таком виде, получившая модель смогла обойти Gemma3 1B в части задач.

Автор: Shannon

Источник [45]


Сайт-источник BrainTools: https://www.braintools.ru

Путь до страницы источника: https://www.braintools.ru/article/33420

URLs in this post:

[1] Этапы обучения LLM: #llm_trains

[2] ruGPT-3. Как было до SFT: #rugpt3_after

[3] Как управлять pretrain-моделью: #control_pretrain

[4] Чем тут поможет SFT: #pretrain_sft

[5] ruGPT-3. Как стало после SFT: #after_sft

[6] Тестирование получившейся SFT-модели в llama.cpp: #sft_llamacpp

[7] Негативные инструкции: #neg_prompt

[8] Сравним с Gemma3 1B: #rugpt3_vs_gemma3_1b

[9] SFT навязывает “поведение” для модели: #sft_mind_break

[10] DPO vs SFT: #dpo

[11] Анализ ошибок обучения DPO: #dpo_fix_templ

[12] DPO другой датасет: #dpo_try2

[13] Стихи и песни. SFT vs DPO: #song_and_lyrics

[14] Проблема с файлами gguf и контекстом длиннее 128 токенов: #gguf_problem_128

[15] gguf: #gguf

[16] Про загадку с автомойкой и машиной: #car_quest

[17] Больше не значит лучше, наполнение SFT датасета: #bad_sft

[18] Дообучение HabrGPT 0.5B на большом датасете: #habrgpt_ru_big

[19] Заключение: #ending

[20] Обучение: http://www.braintools.ru/article/5125

[21] habrGPT. Обучим LLM 0.5B с нуля на статьях Хабра с помощью nanochat от Карпатого. Обучение fp8 дома и сравнение с bf16: https://habr.com/ru/articles/1054710/

[22] @efreelancer: https://habr.com/ru/users/efreelancer/

[23] https://habr.com/ru/articles/1016148/: https://habr.com/ru/articles/1016148/

[24] вкус: http://www.braintools.ru/article/6291

[25] IlyaGusev/saiga_preferences: https://huggingface.co/datasets/IlyaGusev/saiga_preferences

[26] @Takagi: https://habr.com/ru/users/Takagi/

[27] творчество: http://www.braintools.ru/creation

[28] логику: http://www.braintools.ru/article/7640

[29] внимания: http://www.braintools.ru/article/7595

[30] восприятие: http://www.braintools.ru/article/7534

[31] запоминание: http://www.braintools.ru/article/722

[32] поведения: http://www.braintools.ru/article/9372

[33] поведения: http://www.braintools.ru/article/5593

[34] Den4ikAI/russian_dialogues: https://huggingface.co/datasets/Den4ikAI/russian_dialogues

[35] интеллект: http://www.braintools.ru/article/7605

[36] d0rj/rlhf-reward-datasets-ru: https://huggingface.co/datasets/d0rj/rlhf-reward-datasets-ru

[37] ruGPT3XL идёт в качалку / поднимаем контекст до 8k: https://habr.com/ru/articles/1018428/

[38] https://huggingface.co/shannonkun/rugpt3xl-1.3b-sft: https://huggingface.co/shannonkun/rugpt3xl-1.3b-sft

[39] https://huggingface.co/shannonkun/rugpt3xl-1.3b-sft-gguf: https://huggingface.co/shannonkun/rugpt3xl-1.3b-sft-gguf

[40] https://huggingface.co/shannonkun/rugpt3xl-1.3b-dpo-gguf: https://huggingface.co/shannonkun/rugpt3xl-1.3b-dpo-gguf

[41] случайности: http://www.braintools.ru/article/6560

[42] математики: http://www.braintools.ru/article/7620

[43] забывание: http://www.braintools.ru/article/3931

[44] ZeroAgency/ru-big-russian-dataset: https://huggingface.co/datasets/ZeroAgency/ru-big-russian-dataset

[45] Источник: https://habr.com/ru/articles/1045724/?utm_campaign=1045724&utm_source=habrahabr&utm_medium=rss

www.BrainTools.ru

Rambler's Top100