В конце июня Яндекс выложил в открытый доступ нейросеть на 100 миллиардов параметров под названием YaLM 100B. Это крупнейшая GPT-подобная нейросеть в свободном доступе. Рассказывается о том как обучали, показали лучшие примеры и на что способна нейронка. Но так ли хороша она на практике и применима в домашних условиях? Об этом статья умалчивает, более того её не так-то просто запустить и проверить, так как требуется примерно 200 Gb GPU RAM.
Якобы в Яндексах все такие умники, а даже нормального How-to не выложили. Нет api для большой модели, не существует готовой урезанной средней или малой модели для обычных людей(в Google Colab). Не указано примера как настроить модель, как генерировать текст. Просто в статии указано пару нюансов для задротов и все. Достаточно присмотреться как сделал это банк на букву «C» и сделать так же.
У меня сложилось впечатление, что эта модель — просто один из неудачных экспериментов, который было жалко выбросить в мусор, поэтому она была выложена в Open Source, чтобы показать, какие замечательные модели создает Яндекс, и более того, это открытый исходный код!
В интернете очень много вопросов как запустить yalm или даже попробовать онлайн, но ответов на это нет. Я был из числа пользователей, которые задавались этими вопросами. И взялся разобраться. Так как мне очень нужен был способ генерировать тексты для финансовых роботов. Чтобы они могли прогнозировать не только значения, но и комментировать это текстом, базируясь на финансовых сводках. По сути будет то же самое, что делают финансовые аналитики, только с применением искусственного интеллекта.
Есть два способа запустить yalm. Арендовать в облаке сервер с 200+ Gb GPU RAM или доработать код и запустить с помощь deepspeed zero offload (когда GPU последовательно обрабатывает часть нейросети, а остальное хранится в CPU RAM или NVMe).
Первый очень дорогостоящий, порядка 2500 рублей в час или 1.7 млн. в месяц.
Второй неизвестный, т.к. код в репозитории не предоставлен, только лишь намёки в issue репозитория, что сделать не сложно.
Нужно не меньше 200 Гб суммарно видеопамяти. 8х40 = 320 Гб. Подходит только этот. Меньше 200 нельзя, больше можно. Стрелкой указано на CPU RAM, на неё не смотрим. Она может быть любой.
Указываем диск порядка 300 Гб, чтобы с запаспом и желательно быстрый диск, т.к. данных будет передаваться в него и из него десятки гигабайт.
При создании в источниках выбираем Ubuntu ML (Machine Learning). Это обязательно, чтобы были настроены видеокарты и ничего не нужно было устанавливать дополнительно.
При создании сервера бывают нюансы с квотами, может создастся ощущение что оборудование недоступно, но на самом деле всего лишь нужно увеличить квоты в настройках.
После того как сервер будет активирован (это может занять 5-10 минут), подключаемся к серверу через ssh или прям в веб консоли на странице сервера и выполняем команду.
nvidia-smi
Результатом должна быть таблица с видеокартами, версией драйверов и cuda. Примерно вот так.
В шапке версии драйверов и куда. В левой части номера устройств, в центре размер памяти устройств.
Если этой информации у вас нет, значит вы собрали сервер не из того источника. Ubuntu ML (Machine Learnong) обязателен, об этом написано выше.
Клонируйте в домашнюю папку, чтобы после не правкить конфиг докера. Если клонировали куда-либо в другое место, то идём сюда и добавляем путь туда, куда склонировали.
3. Скачиваем чекпоинты (основную информацию обучения модели)
sudo chmod +x ./download/download.sh
sudo bash ./download/download.sh
Это займёт около часа. Чтобы не терять времени зря, создаём новое ssh соединение и параллельно начинаем собирать docker контейнер.
4. Устанавливаем nvidia—docker2
Обычный docker не подходит, нужен именно nvidia-docker2.
Лайфхак. Скачать чекпоинты, установить докер и собрать контейнер можно на дешёвом сервере с одной видеокартой. По времени это будет одинаково, поэтому можно чуть сэкономить. После сборки на дешёвом сервере удаляем его, а боевой сервер создаём с использованием диска от дешёвого сервера. Тогда вы не переплатите время за ожидание сборки и выкачивания чекпоинтов.
6. Подготавливаем содержимое
6.1 Чекпоинты
После того как закончилось скачивание чекпоинтов нужно подсунуть их в конфиги. Есть два способа, поправить параметры или перенестить чекпоинты.
Везде ожидается, что чекпоинты будут лежать в основной директории проекта, соответственно то что скачалось нужно перенести из папки download выше.
Проверяем что видеокарты правильно заданы. Если у вас восемь видеокарт, то ничего менять не нужно. Если другое количество, то меняем вот эти строки
Во второй строке номера используемых девайсов (их вы можете глянуть в nvidia-smi, которую уже запускали). В четвёртой их количество.
7. Запускаем docker контейнер
Находясь в папке yalm выполняем команду
sudo bash ./docker/run.sh
Если всё ок, то вы попадёте в контейнер, в котором нужно перейти в папкк yalm в домашней директории.
cd ~/yalm
8. Запускаем пример из YaLM 100B
Мы готовы к запуску одного из примеров. Они описаны здесь.
chmod +x ./examples/generate_interactive.sh
./examples/generate_interactive.sh
Наберитесь терпения, осталось подождать ещё минут 10-15, пока создастся GPT модель и загрузятся веса из чекпоинтов.
Когда сборка закончится MegatronML предложит ввести контекст для генерации текста. Будьте осторожны при вводе. При определённом стечение обстоятельств возникает ошибка, программа вылетает и нужно начинать сборку заново. Поэтому лучше пользоваться примерами, которые берут текст из файла.
9. Результаты работы
Выглядит интересно. Правда это лишь хорошие примеры. Я провёл тест на разных выборках. Как и ожидалось, чем лучше контекст, тем более осмысленный текст будет сгенерирован.
Полный набор экспериментальных генераций можно глянуть по ссылкам:
По цене мне это обошлось порядка 9 тысяч рублей за аренду серверов разной мощности от тренировок и от подготовки до генерации. Особым разочарованием стало то, что нельзя моментально всё сгенерировать. Очень долго запускается и текст генерирует не так быстро, как хотелось бы, учитывая стоимость сервера в час.
Как запустить YaLM без 200Gb GPU RAM?
Нужно добавить deepspeed zero offload в конфиг. Для тех кто знает о чём речь будет очень просто это сделать. Для остальных это совсем не тривиальная задача. Важно знать, что offload может быть или в CPU RAM, или на NVMe. Про NVMe на данный момент можно забыть, т.к. обрабатывается очень большой объём данных и диск с этим не справляется.
Zero offload CPU более реален. Правда для этого нужно иметь в запасе 200+ Gb CPU RAM, что тоже не дёшево. А один текст будет генерироваться порядка 20-40 минут, так как пока не удалось распараллелить на две видеокарты. Как можете увидеть на скриншоте ниже, в генерации была задействована только одна видеокарта, и то только на четвёртую часть по памяти. Ещё предстоит разобраться почему не задействованы все 24 Гб, из-за настроек или потому что CPU RAM не успевает загружать и выгружать большее количество данных для обработки видеокартой.
Ну и в заключение скажу, что возможно запустить даже на одной RTX 3070 TI. Но смысла особо в этом нет, т.к. NVMe не позволит быстро обрабатывать 150 Гб данных в свопе, которые лежат в довесок в 96 Гб оперативной памяти.
Подведём итоги
Я, конечно, ещё попробую найти оптимальные пути запуска. Но пока для себя сделал выводы, что YaLM 100b слишком дорого / слишком медленно для моих задач. За эти же деньги люди напишут намного больше и намного качественнее. Но, думаю, это временно, будем наблюдать.
Если вам нужна помощь с запуском, настройкой yalm или хотите глянуть результаты на своих примерах контекста — пишите на почту или в телеграм.
Статья на Мега актуальную тему! Спасибо.
Крутая статья! Спасибо автору!
СПАСИБО !!!
три дня эту информацию искал
нет подобного о RuGPT3 и Порфириче?