Моя попытка создать аналог aidungeon, novelai, holo AI для русского языка. Хоть я и пытался сделать всё с абсолютного нуля, получилось не плохо.
В данном посте я затрону технические проблемы и расскажу про самые ранние попытки создать gamio.ru
Первые попытки осуществить цель
Всё началось в середине 2021 года. Тогда я познакомился с AI21 Labs (это своеобразный аналог, тогда закрытого GPT-3. Они предоставляли бесплатный, ограниченный доступ к своей языковой модели J1)
Я запросил у них кастомную модель J1, имеющая 7 миллиардов параметров. Не буду вдаваться в подробности обучения, но в конечном итоге я получил 2 версии нейросети.
Полученные модели работали исключительно на английском языке, поэтому криво-косо, но я вставил api переводчика и запустил сайт. (Правда, проект я закрыл. Доступ был бесплатным, а за услуги Ai21 Labs нужно было кому-то платить.)
Что получилось
![](https://habrastorage.org/getpro/habr/upload_files/c6b/c6b/2cc/c6bc6b2cc06c70192137fa4a1a173642.png)
Расстроившись, на этом я не стал останавливаться. Забросив Ai21 labs с их J1, я стал искать дешёвые способы для создания своей, кастомной модели.
Обучение ruGPT3
Вновь загоревшись идеей, я решил обучить аж 3 модели ruGPT3 сразу! К тому моменту у меня уже появился сервер, поэтому размещать модели я мог на нём.
Собрав и переведя множество данных с chooseyourstory.com, я начал обучение ruGPT3-Large/Medium/Small на этих данных. Обучение в общей сложности заняло чуть больше недели. Я был недоволен результатом.
Так и не вышла в свет версия gamio.ru с обученными моделями GPT. Они одиноко пылятся на hugging face...
![](https://habrastorage.org/getpro/habr/upload_files/4e0/de3/014/4e0de3014b135a48d14a0391ea28da0d.png)
Простое решение
Мои мучения были не долгие, взяв оригинальную модель GPT2-XL с репозитория AiDungeon2 и подключив ко всему этому переводчик "opus-mt" я получил ядерную смесь. (Переводчик мало влиял на скорость всей генерации. Зато он умнее всяких Яндексов и Гуглов.)
Нейросеть весила аж 6 гб! Загрузив через костыли GPT на сервер, я был вновь разочарован! Да, такая комбинация была умнее чем 2 предыдущие попытки, но работала она жуть как медленно. Поэтому я решил сконвертировать модель в лёгкий и удобный формат.
Переведя нейронную сеть из Tensorflow-формата в PyTorch и назвав её "gameGPT", я не только сэкономил 3 гб места на диске и оперативную память сервера, но ещё и ускорил всё это дело.
Что получилось
![](https://habrastorage.org/getpro/habr/upload_files/70f/3e6/d30/70f3e6d3047d2fdf4a336019092387f9.png)
GitHub с gameGPT - https://github.com/0x7o/gameGPT
Чуть-чуть проблем
Нейросеть в PyTorch формате отличалась от Tensorflow версии. Просто подобрав параметры для gameGPT, я сделал новую версию ещё лучше.
generate(text, max_length=num_tokens(text) + 55, repetition_penalty=5.0, temperature=0.9, num_beams=2, top_k=50, top_p=0.95)
Связь gameGPT с gamio.ru
Что такое gamio? Это сайт построенный на django с добавлением JS. Всё, что вам необходимо знать.
Gamio создаёт своеобразную очередь из запросов к gameGPT (это была необходимость. При параллельных вычислениях сервер входит в шок.). gameGPT последовательно обрабатывает каждый запрос к нему.
На вход к модели подаётся история мира + последние 10 действия игрока. На выходе генерируется 55 токенов.
Что в итоге?
Мне удалось создать то, что я хотел. Получился отличный сервис gamio.ru. На нём уже поиграли свыше 1000 человек (для меня это рекорд :)) и все вполне довольны.
Далее будут только улучшения и обновления. Следите за новостями :)