Имате проблеми с ИИ или разработката на пълен пакет? Нашите експерти са тук, за да ви напътстват: индивидуални съвети, техническа интеграция и др. Свържете се с [email protected].

Внедряване на GPT-NeoX 20B в производството и фокус върху Deepspeed

Внедряването на GPT-NeoX 20B в производството е предизвикателство и ние го научихме по трудния начин в NLP Cloud... В тази статия ще ви разкажем повече за няколко трика, свързани с използването на GPT-NeoX 20B, и особено как да се справите с DeepSpeed в производството.

GPT-NeoX

GPT-NeoX 20B

GPT-NeoX 20B е най-големият модел за обработка на естествен език с отворен код към момента на писане на този документ.

Той беше пуснат от EleutherAI преди 2 седмици. Тя е обучена на 20 милиарда параметри след едногодишна усилена работа, изпълнена с предизвикателства. Една от основните им трудности изглежда е била способността да създадат подходяща паралелна архитектура, така че моделът да може да бъде ефективно обучен на няколко графични процесора.

Предишният им модел, GPT-J, беше обучен на TPU на Google и беше проектиран да се използва на 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 GB VRAM и 40 GB дисково пространство (и да, тук говорим за тънката версия fp16). Малко графични процесори отговарят на тези изисквания. Основните от тях са NVIDIA A100, A40 и RTX A6000.

Тези графични процесори са не само много скъпи, но и трудно могат да бъдат закупени в наши дни поради глобалния недостиг на полупроводници.

Най-доброто решение тук е да изберете архитектура с няколко графични процесора.

Multi-GPU с Deepspeed

Ако не можете да вместите модела си в един графичен процесор, можете да опитате да го разделите на няколко графични процесора.

Това е интересна опция по две причини. Първо, хоризонталното мащабиране на инфраструктурата често е по-евтино, отколкото вертикалното мащабиране. Това е вярно за сървърите и за графичните процесори. Второ, по-лесно е да се сдобиете с няколко малки графични процесора като 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 GB...

Партиден извод?

Моделите на GPT са доста бавни и GPT-NeoX 20B не прави изключение. Така че, за да подобрите производителността на вашето приложение, може да искате да работите върху решение за пакетно извеждане.

Засега в NLP Cloud не сме намерили добро решение за това.

Кодът на GPT-NeoX е направен така, че в рамките на една заявка да могат да се правят няколко извода едновременно. Но при нашите тестове времето за отговор нарастваше линейно с броя на изводите, което донякъде обезсмисля целта на пакетното извеждане...

Заключение

GPT-NeoX 20B определено е трудно да се внедри в производството. Качеството на генериране на текст е невероятно, но малцина ще имат капацитета да инсталират този модел.

Повече от всякога изглежда, че решението ще бъде да се разчита на облачна услуга като NLP Cloud, за да се използва този модел.

Ако имате мнения за тази статия, моля, не се колебайте да се свържете с нас, ще бъде чудесно да чуем мнението ви за това!

Julien Salinas
Технически директор в NLP Cloud