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

Продолжение про запуск yalm 100b в домашних условиях.

Если вам понравилась статья, то подписывайтесь на мой телеграм канал.

pskucherov
Оцените автора
Добавить комментарий

  1. Olha

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

    Ответить
  2. Данила

    Крутая статья! Спасибо автору!

    Ответить
  3. Дмитрий

    СПАСИБО !!!
    три дня эту информацию искал
    нет подобного о RuGPT3 и Порфириче?

    Ответить