Как я вместе с Claude обучил LoRA для Dark Fantasy RP с ИИ

Это статья-дневник о том, как человек с шилом в одном месте (это я) и тягой к созиданию и попыткой что-то оставить после себя, полез в обучение стилевой LoRa для ролевых игр с ИИ, моей основной тематикой профиля. И автор ли я собственной модели?

Как я вместе с Claude обучил LoRA для Dark Fantasy RP с ИИ

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

LoRA — это набор дообученных знаний, который подключается к нейросети как модуль. При подключении LoRA базовая модель начинает отвечать иначе (в зависимости от того, что в нее упаковано), но саму модель переобучать не нужно.

С чего все началось

Давным-давно, когда я еще активно писал гайды на РП с нейронками, модно было хостить нейронку на своем компе и ролеплеить с ней. Большие облачные модели были еще не в ходу. А что можно делать с нейронкой, которая запущена на твоем компе? Правильно - прикручивать к ней всякие модули, например - LoRa.

Они могли менять стиль письма базовой модели, например на слуху была LoRa, которая заставляла писать модель примерно как писал Достоевский. Прикольно? Прикольно!

Ну и тогда же я задумался: а че это я тут такой крутой и классный, вот написал пару гайдиков, вроде варюсь в этой теме. А давайте ка я полезу в залупу и пойду модели обучать! У меня же есть идеи, есть время. ChatGPT на пару с Gemini мне говорили "Да, братан, идея класс, вот код обучения".

Я на коленке собрал датасет (просто взял txt файл с книгой 120 Дней Содома), засунул все это в формат датасета, и пошел радостный обучать тогда очень популярную для РП модель - MN-12B-Mag-Mell-R1

Так и появилась мой первый файн-тюн. Дообученная на книге модель:

Результат? Вполне очевидный - говно. Неюзабельная, полностью сломанная модель, которая могла лишь генерировать несвязный набор символов. Тогда я и понял, что обучение моделей - все таки дело непростое, и этому всему надо учиться

Я продолжил веселый себе ролеплеить. Индустрия развивалась, начали появляться новые модели и новые провайдеры, которые эти модели давали трогать задешево, тот же OpenRouter.

Но пару месяцев назад мне на работе выдали Claude. Я слышал, что нейронки от Anthropic лучшие в программировании. В целом очень хороши. И тогда пару лет назад похороненная идея по обучению вернулась на повестку дня, и почалось.

Мои цели

Локальный РП не стоял на месте все эти годы. Появились Gemma 4 и Qwen 3.6, которые на домашнем железе запускаются очень бодро, и сами они уже не тупые, а вполне себе хорошие модели

Но все такие модели, в том числе с РП-стилизованные страдают одной проблемой - все они уже давно обучены на синтетических данных, на вылизанных до блеска датасетах, в которых все очень аккуратно и стерильно.

Они даже в ролеплее пытаются быть агентными. Всегда дают тебе путь отхода и потакают твоей прихоти, и в целом довольно нежные.

Собственно, это я и хотел исправить.

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

Начало работы

Моделью, для которой я собирался обучать LoRa оказалась Goetia-26B-A4B - это основанная на Gemma 4-26B-A4B РП-модель, которая была создана слиянием кучи других РП-моделей. Это важная деталь, она аукнется нам позже.

Естественно - я дебил. Я не смогу обучить ЛоРу сам, скорее всего никогда даже не смогу, потому что я ну рил тупой, вы бы мой аттестат видели лмао. Но зато упертый. Поэтому пошел в Claude, и начал ебсти ему мозги, а как же обучить свою крутую LoRa.

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

Но для РП это не работает. У тебя тут и форматирование нужно особое (*звездочки для действий*, "кавычки для прямой речи"), и так далее. И особенно важно, в полноценном ролеплее ты не задаешь вопрос, а развиваешь сюжет, общаешься с персонажем, так что датасет должен выглядеть как ролеплей, это первая правка от Claude.

Его план был таков:

  • разбить книгу на примерно равные смысловые блоки, то бишь по сценам
  • Взять каждую сцену, и сделать из нее RP-диалог. Буквально сделать сцены не сплошным текстом, а по ходам. То есть {один персонаж что-то делает, что-то говорит}, затем {другой персонаж отвечает ему и/или что-то делает}.
  • Создать синтетический датасет на основе всего этого (это уже моя идея!)
  • ???
  • PROFIT

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

Я взял расцензуренную Gemma 4 и заставил переписать каждую получившуюся после разбивки сцену, сохраняя все действия, размышления и диалоги героев, но чтобы написано это было языком, которым обычно пишет Gemma (то есть Goetia). Я хотел перенести в LoRa именно мышление персонажей, что и как делать, но стиль книги нужно было убрать, ибо ну как бы книга была написана в особом стиле в 1785 году.

Claude написал скрипт, и я поставил его шуршать на ночь. Датасет получился все еще жестоким, все еще не вылизанным, но без стиля автора, как я и хотел.

Собственно, датасет готов, я тоже готов. Немного остановимся на одну важную деталь.

Буквально описание всего поста
Буквально описание всего поста

Обучение

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

Я арендовал 2xA40 общим объемом видеопамяти в 96Гб на vast.ai. Недурно!

Claude написал мне файл для Jupiter Notebook. Буквально последовательность команд, от установки зависимостей, скачивания модели, до конвертации ее в GGUF формат.

Сервер, на котором я арендовал эти видеокарты, был какой-то подозрительно дешевый. И вероятно из-за этого проблемы начались с самого начала. При попытке установить все нужные пакеты в рандомный момент установка падала из-за того, что хеш-сумма какого-то пакета не совпадала. Ок, пошел в Claude, он накостылял мне код для скачивания и валидации каждого пакета по отдельности. Фух, вроде установили.

С Goetia, которой нужно было скачать около 60Гб, конечно произошло бы тоже самое. Каким-то чудом смог скачать из терминала сервера.

Потом пошли проблемы с такой штукой как Коллатор. Коротко, это херня, которая берет несколько строк из датасета и помещает их в очередь для обучения. Стандартный, который шел вместе с PEFT (библиотека для обучения) не подошел, потому что, вспоминаем, что Goetia - это слияние нескольких моделей, и вероятно там внутреннее строение как-то смещено, о чем мне Claude и сообщил. Ок, он мне написал кастомный коллатор, и мы пошли дальше

А дальше - самое веселое. Я начал обучение, и loss показывал какие-то запредельные значения, что-то около 4-4,5 пунктов. А должен показывать максимум 2, и то это плохо. Пошел ныть Клоду, и начали проверять. Проверь то, проверь это, вот дай вывод этой команды, и вот оно - дневной лимит кончился. Claude В С Ё! А денюжка капает, сервак то арендован. Пошел в ChatGPT, и с ним смогли выяснить, что скрипт обучения пытался текстовые данные (мой датасет) обучать на слоях модели, которые отвечают за зрение (буквально те, что анализируют картинки). И по кругу - дай вывод вот такой команды, потом дай вывод вот такой, попробуй то, попробуй это

Каким-то образом смогли заморозить все vision-слои, и обучать только на тех, которые отвечают за language. loss падал с 2,5 в начале обучения до 1,5 в конце. Это победа, модель готова и лежит передо мной.

Оно работает!

Представляю вашему вниманию - Dark-Goetia-26B-A4B-LoRA-RU-v1!

И его GGUF-квант:

Атмосферный жанровый LoRA-адаптер для русскоязычного ролеплея. Добавляет повествованию более мрачный и литературный тон. Чего я и добивался.

Эта LoRa не лезет в положительные или нейтральные диалоги, ее там почти не видно. Но как только начинается какая-то заварушка - она дает о себе знать. Модель перестает тебя жалеть, а начинает тебя презирать и решительно атаковать. У тебя не будет времени на подумать, нож или пуля уже у тебя под ребром. Кайф? Кайф!

Но я ли сделал эту модель?

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

Кто предложил большую часть идей? Кто написал буквально весь код для всего этого? Конечно Claude. Я лишь давал ему некоторые корректировки, по типу "Давай все таки сделаем синтетический датасет, чтобы убрать стиль автора". Claude написал скрипт, и я погнал дальше

Без ИИ этого всего бы не случилось. Но и без меня этого всего бы не случилось. Но я все равно не могу назвать эту LoRa моей, потому что я как будто бы сделал слишком мало. Большую часть грязной работы сделал Claude. Но и без моего запроса он бы не сделал это сам.

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

Без ЛоРы

Модель все еще пытается спастись
Модель все еще пытается спастись

С ЛоРой (seed тот же)

Персонаж взывает к жестокости
Персонаж взывает к жестокости

Без ЛоРы

Как я вместе с Claude обучил LoRA для Dark Fantasy RP с ИИ

С ЛоРой

Как я вместе с Claude обучил LoRA для Dark Fantasy RP с ИИ

Я достиг своей цели - я создал что-то свое (хоть и с огромной помощью), и довел свою идею до конца, и это уже великое достижение для меня. Я доволен.

Сорри за сумбурный текст. Всем хорошей пятницы и выходных.

36
6
4
2
1
1
1