Нейросеть YaLM 100B на практике. Инструкция как запустить и примеры.

Программирование

В конце июня Яндекс выложил в открытый доступ нейросеть на 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 репозитория, что сделать не сложно.

Начнём с простого.

Инструкция по запуску YaLM 100B

1. Арендуем 200 Гб GPU RAM, например здесь.

Нейросеть YaLM 100B на практике. Инструкция как запустить и примеры.

Нужно не меньше 200 Гб суммарно видеопамяти. 8х40 = 320 Гб. Подходит только этот. Меньше 200 нельзя, больше можно. Стрелкой указано на CPU RAM, на неё не смотрим. Она может быть любой.

Указываем диск порядка 300 Гб, чтобы с запаспом и желательно быстрый диск, т.к. данных будет передаваться в него и из него десятки гигабайт.

Нейросеть YaLM 100B на практике. Инструкция как запустить и примеры.

При создании в источниках выбираем Ubuntu ML (Machine Learning). Это обязательно, чтобы были настроены видеокарты и ничего не нужно было устанавливать дополнительно.

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

После того как сервер будет активирован (это может занять 5-10 минут), подключаемся к серверу через ssh или прям в веб консоли на странице сервера и выполняем команду.

nvidia-smi

Результатом должна быть таблица с видеокартами, версией драйверов и cuda. Примерно вот так.

Нейросеть YaLM 100B на практике. Инструкция как запустить и примеры.

В шапке версии драйверов и куда. В левой части номера устройств, в центре размер памяти устройств.

Если этой информации у вас нет, значит вы собрали сервер не из того источника. Ubuntu ML (Machine Learnong) обязателен, об этом написано выше.

2. Клонируем репозиторий с YaLM

sudo git clone https://github.com/yandex/YaLM-100B/ yalm

cd yalm

Клонируйте в домашнюю папку, чтобы после не правкить конфиг докера. Если клонировали куда-либо в другое место, то идём сюда и добавляем путь туда, куда склонировали.

3. Скачиваем чекпоинты (основную информацию обучения модели)

sudo chmod +x ./download/download.sh

sudo bash ./download/download.sh

Это займёт около часа. Чтобы не терять времени зря, создаём новое ssh соединение и параллельно начинаем собирать docker контейнер.

4. Устанавливаем nvidiadocker2

Обычный docker не подходит, нужен именно nvidia-docker2.

https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html#setting-up-nvidia-container-toolkit

5. Собираем контейнер для YaLM

cd yalm

sudo chmod +x ./docker/*

sudo bash ./docker/build.sh

Это тоже примерно на час.

Лайфхак. Скачать чекпоинты, установить докер и собрать контейнер можно на дешёвом сервере с одной видеокартой. По времени это будет одинаково, поэтому можно чуть сэкономить. После сборки на дешёвом сервере удаляем его, а боевой сервер создаём с использованием диска от дешёвого сервера. Тогда вы не переплатите время за ожидание сборки и выкачивания чекпоинтов.

6. Подготавливаем содержимое

6.1 Чекпоинты

После того как закончилось скачивание чекпоинтов нужно подсунуть их в конфиги. Есть два способа, поправить параметры или перенестить чекпоинты.

Везде ожидается, что чекпоинты будут лежать в основной директории проекта, соответственно то что скачалось нужно перенести из папки download выше.

Находясь в папке yalm выполнить

mv ./download/yalm100b_checkpoint ./

Или в файлах примеров поменять пути к файлам

https://github.com/yandex/YaLM-100B/blob/c91b7d7fe8dbf39c9e307d6d324446d0df136a23/examples/generate_interactive.sh#L8-L9

6.2 Видеокарты

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

Нейросеть YaLM 100B на практике. Инструкция как запустить и примеры.

Во второй строке номера используемых девайсов (их вы можете глянуть в 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 модель и загрузятся веса из чекпоинтов.

Нейросеть YaLM 100B на практике. Инструкция как запустить и примеры.

Когда сборка закончится MegatronML предложит ввести контекст для генерации текста. Будьте осторожны при вводе. При определённом стечение обстоятельств возникает ошибка, программа вылетает и нужно начинать сборку заново. Поэтому лучше пользоваться примерами, которые берут текст из файла.

9. Результаты работы

Нейросеть YaLM 100B на практике. Инструкция как запустить и примеры.

Нейросеть YaLM 100B на практике. Инструкция как запустить и примеры.

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

Полный набор экспериментальных генераций можно глянуть по ссылкам:

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

Нейросеть YaLM 100B на практике. Инструкция как запустить и примеры.

 

Как запустить YaLM без 200Gb GPU RAM?

Нужно добавить deepspeed zero offload в конфиг. Для тех кто знает о чём речь будет очень просто это сделать. Для остальных это совсем не тривиальная задача. Важно знать, что offload может быть или в CPU RAM, или на NVMe. Про NVMe на данный момент можно забыть, т.к. обрабатывается очень большой объём данных и диск с этим не справляется.

Zero offload CPU более реален. Правда для этого нужно иметь в запасе 200+ Gb CPU RAM, что тоже не дёшево. А один текст будет генерироваться порядка 20-40 минут, так как пока не удалось распараллелить на две видеокарты. Как можете увидеть на скриншоте ниже, в генерации была задействована только одна видеокарта, и то только на четвёртую часть по памяти. Ещё предстоит разобраться почему не задействованы все 24 Гб, из-за настроек или потому что CPU RAM не успевает загружать и выгружать большее количество данных для обработки видеокартой.

Нейросеть YaLM 100B на практике. Инструкция как запустить и примеры.

Ну и в заключение скажу, что возможно запустить даже на одной RTX 3070 TI. Но смысла особо в этом нет, т.к. NVMe не позволит быстро обрабатывать 150 Гб данных в свопе, которые лежат в довесок в 96 Гб оперативной памяти.

Нейросеть YaLM 100B на практике. Инструкция как запустить и примеры.

Подведём итоги

Я, конечно, ещё попробую найти оптимальные пути запуска. Но пока для себя сделал выводы, что YaLM 100b слишком дорого / слишком медленно для моих задач. За эти же деньги люди напишут намного больше и намного качественнее. Но, думаю, это временно, будем наблюдать.

Если вам нужна помощь с запуском, настройкой yalm или хотите глянуть результаты на своих примерах контекста — пишите на почту или в телеграм.

Поделиться ссылкой:

5/5 - (1 vote)
Rate author
Программирование, инвестиции и алготрейдинг
Add a comment

  1. Olha

    Статья на Мега актуальную тему! Спасибо.

    Reply