Нейросеть 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 млн. на місяць. Другий невідомий, т.к. Код у репозиторії не надано, тільки
натяки на церепозиторія , що зробити не складно. Почнемо із простого.

Інструкція із запуску 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. Встановлюємо nvidiadocker 2

Звичайний 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 ./

Або у файлах прикладів поміняти шляхи до
файлів

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, поки створиться модель GPT2 і завантажаться ваги з чекпоінтів.
Нейросеть 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 Гб,
Нейросеть YaLM 100B на практиці. Ну і на закінчення скажу, що можна запустити навіть на одній RTX 3070 TI. Але сенсу особливо у тому немає, т.к. NVMe не дозволить швидко обробляти 150 Гб даних у свопі, які лежать на додачу в 96 Гб оперативної пам’яті.
Нейросеть YaLM 100B на практиці.

Підведемо підсумки

Я, звичайно, спробую знайти оптимальні шляхи запуску. Але поки що для себе зробив висновки, що YaLM 100b надто дорого/занадто повільно для моїх завдань. За ці ж гроші люди напишуть набагато більше та якісніше. Але, гадаю, це тимчасово, спостерігатимемо. Якщо вам потрібна допомога із запуском, налаштуванням yalm або хочете глянути результати на прикладах контексту — пишіть на пошту або в телеграм.

pskucherov
Оцініть автора
Додати коментар

  1. Olha

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

    Відповіcти
  2. Данила

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

    Відповіcти
  3. Дмитрий

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

    Відповіcти