Pavel Zloi @efreelancer
Software Developer
Information
- Rating
- 1,131-st
- Location
- Россия
- Registered
- Activity
Specialization
Backend Developer, ML Engineer
Lead
Linux
PHP
Python
Multiple thread
Neural networks
Machine learning
Kubernetes
Golang
High-loaded systems
Полагаю имеется ввиду то как это делают на сайтах морфемного анализа, пожалуй это можно было бы через рендер картинки, скажем какой-нибудь canvas или типа того, реализовать
Хорошая идейка, подумаю, спасибо!
Занятный проект, судя по коду поддерживается ограниченное количество моделей и предполагается использовать оригинальные веса, без квантизации GGUF или какой бы то ни было ещё, docker-образов нет, плюс смотрю там нет автоматики и все конфигурации будет необходимо прописывать вручную.
Cпасибо за ссылочку, проект пощупаю и сравню с аналогами.
Если я правильно понял в формате RPC схемы все низовые работы по инференсу происходят на стороне бэкенда, следовательно если мы имеем систему из нескольких серверов работа будет распределена между ними равномерно (с учётом доступной
rpc-server
RAM или VRAM), следовательно можно предположить, что вся работа с кешем и его хранение будет происходить на бэкенде.Косвенно для меня это подтверждается в этой issue на гитхабе, если в двух словах, то пользователь жалуется на сегфолты когда он отключает кеширование на стороне бэкенда.
А вот как это всё синхронизируется мне пока что непонятно.
Серъёзных замеров ещё не проводил, поэтому точных цифр дать не смогу, производительность замерял на следующих схемах: 1x RTX 3050, 1x RTX 4090 и пара из этих видекарт соединённых по RPC (сеть 1Гбит), вот gist с замерами.
Это кажется странным, но в режиме RPC инференс либо чуть быстрее, либо такой же как на самой быстрой карте.
UPD. Добавлю, что основная моя цель была не в том, чтобы ускорить инференс (хотя это было бы приятным бонусом), а в том чтобы выпонять его на кластере из маломощных микрокомпьютеров, которые по отдельности не способны на инференс больших моделей, скажем на жмене RaspberryPi CM3.
Думаю это нужно для того чтобы запустить инференс можно было быстрее, так как инференс выполняет только после того как все слои будут выгружены на бэкенды. Иными словами если у есть модель скажем 13B и чекпоинты которой весят кажется 9Гб и есть два бэкенда нужно залить на каждый бэкенд 4.5Гб данных.
Следовательно моя гипотезав в том, что чем быстрее сеть, тем быстрее запустится инференс.
Добавил чуть больше букв в том месте где была цитата, чтобы было понятно, что там модель нагенерила.
У MTS была публикация про детоксикатор, в этой работе они как-раз создали модель, которая удаляет из сообщений "токсичность". А ещё есть метрика MERA под названием ruDetox, которая оценивает насколько хорошо русскоязычные модели справляются с задачами удаления ругательств из текста.
Так что в контексте языковых моделей под токсичностью имеют ввиду именно нецензурные выражения.
Ну а шуточная модель которую я обучил делает строго противоположную работу, отсюда и название "токсикатор" :)
Правильного ответа на данный вопрос к сожалению не знаю. Мне кажется, что различить подобное крайне сложно, лично у меня градация во время сборки датасета была простая: есть мат - токсичное, нет - обычное. Насколько это оптимальная градация думаю лучше у специалистов из области психологии или лингвистики уточнить.
Конечно можно, если соединить токсикатор и детоксикатор то может получиться неплохой бенчмарк, сейчас попробую собрать нечто подобное.
Вот результаты тестов на 100 образцах текста из сплита dev датасета toxicator-ru.
Примеры тут.
Отличное замечание, сейчас займусь скриптиком.
Приветствую! Уточните пожалуйста ошибку, если получится то ссылочкой на Gist, чтобы не писать много текста.
В корне проекта будет файл test_gigasaiga.py, он как-раз демонстрирует то как можно запустить дообученный мною слой LoRA адаптера. У Вас получилось его запустить? Заработало ли?
Покопался в исходных кодах проекта rulm, нашёл в скрипте train одну любопытную незадокументированную переменную окружения WORLD_SIZE, по умолчанию она равна 1, а если сделать больше 1, то включается режим DataParallel.
И дальше эти параметры передаются модели.
Пример использования:
У меня сегодня тоже возникла задача решить проблему с нехваткой памяти (уже правда в рамках обучения другой нейросети), поэтому полез настраивать device_map и max_memory опции, чтобы тренировка, если места мало, могла залезать в системную оперативную память, вот как сделал:
Попробуйте Mistral дообученную на датасетах rulm (есть демка на HuggingFace).
Приветствую! Рад что публикация пригодилась, я как-раз и хотел чтобы как можно больше людей смогло попробовать дообучить свою версию ruGPT-3.5.
Мельком видел несколько примеров, в которых LoRA слои подключали к модели передавая массив строк (вероятно потом в цикле выполнялся merge_and_unload), но не предал этому значения, однако, после Вашего объяснения до меня дошло, что их похоже подключали "гирляндой".
Идея натренировать множество разных LoRA слоёв и подключать их по надобности в момент инференса мне кажется отличной (хотя я и не совсем уверен в том насколько это эффективный способ, возможно какой-нибудь reload по таймеру будет проще чем при каждом запросе), обязательно попробую этот вариант, технически он выглядит не сложно и таким образом будет очень легко выполнять плавное обновление модели "на лету" или собрать свою модель словно из деталей пазла.
Теперь даже любопытно попробовать обучить ruGPT-3.5 на каждом из 7 датасетов Saiga по отдельности, после чего собрать в кучу, полагаю будет хуже чем "всё и сразу", но если получится примерно на одном и том же уровне, то это будет очень хорошо. Наверняка будет очень важна очерёдность вливания слоёв.
В общем над этой темой надо будет очень основательно подумать, спасибо за наводку.
Насчёт размера контекста, мне попадалось пару любопытных моделей: LLaMA 2 7b 32k (32k токенов), MosaicML 7b и вариации (8к токенов) среди которых самая примечательная была MosaicML 7b-storywriter (65к токенов), возможно ссылочки пригодятся. У меня один из планов попробовать дообучить StoryWriter версию, она как-раз удовлетворяет некоторым моим потребностям связанных с кодингом.
Попробовал задать модели предложенные вопросы, получилось конечно не очень, но с этим в принципе можно работать, вот тут можно посмотреть Gist с результатами.
На просьбы исправить реагирует не очень адекватно, вероятно в датасетах на которых выполнялось обучение подобного мало.
Вот это любопытный момент, как-раз задумываюсь о том как бы это хорошо реализовать, быть может получится хороший датасет собрать, у меня скопилась уже большая пачка диалогов с ChatGPT, их надо бы подчистить да собрать в кучку.
Полагаю многие крупные компании нечто подобное делают со своими продуктами (только само собой у них выборка побольше будет), а для энтузиастов есть к примеру портал ShareGPT, с него полагаю возможно спарсить диалоги после чего выполнить перевод и собрать датасет, подобный подход использовался для Saiga (смотри IlyaGusev/ru_sharegpt_cleaned на HuggingFace).
С этим дело как-раз и хочется разобраться, пока не совсем понятно возможно ли в принципе корректировать веса как-то на лету (в смысле без переобучения постоянного), например если мне не понравился или наоборот понравился ответ.
Добрый день, рад что статья пригодилась!
То что отображается в консоли не критическая ошибка, а скорее предупреждение, вылезает оно потому что датасеты Saiga (rulm) оптимизированы под модели семейства LLaMA, а у лам размер окна контекста 4096 токенов. В то же время модель ruGPT-3.5 имеет контекст 2048 токенов поэтому на этапе валидации датасета отображается это сообщение.
Но не переживайте, на качество обучения модели это если и повлияет, то на уровне погрешности.
Мне давно хотелось сделать себе просто универсального помощника в виде self-hosted нейросети, доступной через телеграм-бота, которую я бы мог дорабатывать под свои нужды (ещё до релиза ChatGPT-3.5), а получившееся решение может поддерживать осмысленный диалог на правильном русском языке и выполнять многие из поставленных мною задачек (навроде исправления опечаток, создания скелета публикаций по описанию, выполнения простых математических расчетов, брейнсторминга и так далее).
Хотя из-за маленького контекста (всего 2048 токенов) она забывает начало продолжительного диалога, но в пределах 3-5 вопросов-ответов контекст держит приемлемо, однако, судя по тому что рассказывали ребята из Sber AI на Sber SmartDev 2023 скоро будет релиз ruGPT-4, а размер контекста на слайдах был помечен как NDA, то есть, полагаю, он изменится и скорее всего в большую сторону.
Пока что текущее решение умеет далеко не всё, что мне хотелось бы, прежде всего хочется чтобы она стала чуть лучше писать код, для этого нужен датасет и благодаря проекту rulm я теперь знаю как подобные датасеты собирать и могу спокойно заниматься доработкой.