Боретеся зі штучним інтелектом або повним циклом розробки? Наші експерти допоможуть вам: індивідуальні консультації, технічна інтеграція та багато іншого. Звертайтеся за адресою [email protected].

Впровадження GPT-NeoX 20B у виробництво і фокус на високошвидкісній роботі

Розгортання GPT-NeoX 20B у виробництві є складним завданням, і ми дізналися про це на власному досвіді в NLP Cloud... У цій статті ми розповімо вам більше про деякі хитрощі, пов'язані з використанням GPT-NeoX 20B, і особливо про те, як працювати з DeepSpeed у виробництві.

GPT-NeoX

GPT-NeoX 20B

GPT-NeoX 20B є найбільшою моделлю обробки природної мови з відкритим вихідним кодом на момент написання цієї статті.

Він був випущений EleutherAI 2 тижні тому. Вона була навчена на 20 мільярдах параметрів, після 1 року важкої роботи, повної викликів. Однією з головних труднощів виявилася здатність створити належну паралельну архітектуру, щоб модель могла ефективно навчатися на декількох графічних процесорах.

Їх попередня модель, GPT-J, була розроблена для роботи на процесорах Google TPU і призначена для використання на TPU. Внутрішня архітектура GPT-NeoX 20B кардинально відрізняється і призначена для використання на графічних процесорах. Ідея полягає в тому, що він повинен стати першим з серії ще більших моделей (мета тут - наздогнати GPT-3).

GPT-NeoX 20 є моделлю генерації тексту, що означає, що він може писати текст для вас і фактично досягати практично будь-якого варіанту використання природної мови з великою точністю: створення постів у блогах, чат-ботів, класифікація тексту, аналіз настроїв, вилучення ключових слів, генерація коду, вилучення сутностей, класифікація намірів, відповіді на запитання та багато іншого...

Без сумніву, багато дослідників і компаній будуть використовувати цю нову модель і отримають чудові результати. Але існує проблема: як розгорнути GPT-NeoX 20B?

Вимоги до апаратного забезпечення

Перша проблема, з якою доводиться стикатися при спробі розгортання GPT-NeoX 20B у виробництві, - це необхідне для цього сучасне обладнання.

Все ще можна було розгорнути GPT-J на споживчому обладнанні, навіть якщо воно було дуже дорогим. Наприклад, можна було розгорнути його на дуже хорошому центральному процесорі (навіть якщо результат буде болісно повільним) або на просунутому ігровому графічному процесорі на зразок NVIDIA RTX 3090. Але GPT-NeoX 20B настільки великий, що це вже неможливо.

В основному GPT-NeoX вимагає мінімум 42 ГБ VRAM і 40 ГБ дискового простору (і так, ми говоримо про тонку версію fp16). Цим вимогам відповідають небагато графічних процесорів. Основні з них - NVIDIA A100, A40 і RTX A6000.

Мало того, що ці графічні процесори дуже дорогі, так їх ще й важко дістати через глобальний дефіцит напівпровідників.

Найкращим рішенням тут є перехід на багатопроцесорну архітектуру.

Мульти-GPU з високою швидкістю

Якщо ви не можете вмістити вашу модель в один графічний процесор, ви можете спробувати розділити її на кілька графічних процесорів.

Це цікавий варіант з 2 причин. По-перше, горизонтальне масштабування інфраструктури часто дешевше, ніж вертикальне. Це вірно для серверів, і це вірно для графічних процесорів. По-друге, легше набити руку на кілька невеликих графічних процесорів, таких як NVIDIA Tesla T4, ніж на більші графічні процесори, такі як NVIDIA A40.

На жаль, розділення моделі машинного навчання на кілька графічних процесорів є технічною проблемою. Hugging Face опублікував чудову статтю про паралелізм моделей і про те, який вибір у вас є. Читай тут. Але, на щастя, EleutherAI розробила GPT-NeoX 20B таким чином, щоб його можна було легко розпаралелити на декількох GPU, будь то для навчання або виведення.

Архітектура GPT-NeoX базується на Deepspeed. Deepspeed - це фреймворк від Microsoft, який спочатку був розроблений для розпаралелювання навчання між декількома графічними процесорами, але все частіше використовується і для виведення. EleutherAI виконала всю важку роботу, тому розпаралелити GPT-NeoX так само просто, як змінити число в конфігураційному файлі.

Паралелізм GPT-NeoX
Extract from the GPT-NeoX docs about parallelism

Однак розгортання Deepspeed у виробництві для онлайн-виведення через API важко... Deepspeed не був розроблений для легкої інтеграції у веб-сервери. У NLP Cloud ми дізналися про це на власному досвіді, але після важкої роботи нам нарешті вдалося знайти ефективний спосіб змусити Deepspeed і GPT-NeoX працювати за допомогою нашого API.

Хитрощі використання

Отже, припустимо, що вам вдалося забезпечити належне обладнання і правильно розгорнути GPT-NeoX 20B з Deepspeed. Тепер є кілька застережень, про які ви повинні знати.

По-перше, порівняно з GPT-J, параметри (top k, top p і температура) не мають однакового впливу на модель. Тому, якщо вам вдалося знайти хорошу конфігурацію для GPT-J, не сприймайте це як належне: вам доведеться зробити нові тести з GPT-NeoX.

Нарешті, навіть якщо розмір вхідних даних може досягати 2048 токенів, це вимагатиме більше пам'яті, ніж згадані вище базові 42 ГБ...

Пакетний висновок?

Моделі GPT досить повільні, і GPT-NeoX 20B не є винятком. Тому для того, щоб підвищити пропускну здатність вашого додатку, можливо, ви захочете попрацювати над рішенням пакетного виведення.

На даний момент ми не знайшли хорошого рішення для цього в NLP Cloud.

Код GPT-NeoX зроблений таким чином, що в рамках одного запиту можна виконувати декілька виводів одночасно. Але в наших тестах час відгуку лінійно зростав із збільшенням кількості виводів, що дещо нівелює мету пакетного виводу...

Висновок

GPT-NeoX 20B, безумовно, важко впровадити у виробництво. Якість генерації тексту вражає, але мало хто матиме можливість реально встановити цю модель.

Більш ніж коли-небудь, здається, що рішенням буде покладатися на хмарний сервіс, такий як NLP Cloud, щоб використовувати цю модель. Спробуйте GPT-NeoX 20B на NLP Cloud тут!

Якщо у Вас є зауваження щодо цієї статті, будь ласка, зв'яжіться з нами, ми будемо раді почути Вашу думку з цього приводу!

Julien Salinas
CTO в NLP Cloud