Zmagasz się z AI lub rozwojem full-stack? Nasi eksperci są tutaj, aby Cię poprowadzić: dostosowane porady, integracja techniczna i nie tylko. Skontaktuj się z nami pod adresem [email protected].

Wdrożenie GPT-NeoX 20B do produkcji i skupienie się na Deepspeed

Wdrażanie GPT-NeoX 20B w produkcji jest wyzwaniem i nauczyliśmy się tego na własnej skórze w NLP Cloud... W tym artykule opowiemy więcej o kilku sztuczkach związanych z używaniem GPT-NeoX 20B, a w szczególności o tym, jak radzić sobie z DeepSpeed w produkcji.

GPT-NeoX

GPT-NeoX 20B

GPT-NeoX 20B jest największym otwartoźródłowym modelem Natural Language Processing w momencie pisania tego tekstu.

Został on udostępniony przez EleutherAI 2 tygodnie temu. Został wytrenowany na 20 miliardach parametrów, po 1 roku ciężkiej pracy pełnej wyzwań. Jedną z głównych trudności była możliwość stworzenia odpowiedniej architektury równoległej, tak aby model mógł być efektywnie trenowany na wielu procesorach graficznych.

Ich poprzedni model, GPT-J, był trenowany na jednostkach TPU firmy Google i został zaprojektowany do wykorzystania na TPU. Wewnętrzna architektura GPT-NeoX 20B jest diametralnie inna i została stworzona z myślą o wykorzystaniu na procesorach graficznych. W założeniu ma to być pierwszy z serii jeszcze większych modeli (celem jest dogonienie GPT-3).

GPT-NeoX 20 jest modelem generowania tekstu, co oznacza, że może pisać tekst za Ciebie i w rzeczywistości osiągnąć prawie każdy przypadek użycia Natural Language Processing z dużą dokładnością: generowanie postów na blogach, chatboty, klasyfikacja tekstu, analiza sentymentu, ekstrakcja słów kluczowych, generowanie kodu, ekstrakcja encji, klasyfikacja intencji, odpowiadanie na pytania i wiele więcej...

Bez wątpienia wielu badaczy i firm wykorzysta ten nowy model i osiągnie wspaniałe rezultaty. Ale jest pewne wyzwanie: jak wdrożyć GPT-NeoX 20B?

Wymagania sprzętowe

Pierwszym wyzwaniem, z którym trzeba się zmierzyć próbując wdrożyć GPT-NeoX 20B w produkcji, jest zaawansowany sprzęt, którego wymaga.

Wciąż możliwe było wdrożenie GPT-J na sprzęcie konsumenckim, nawet jeśli był on bardzo drogi. Na przykład, można było wdrożyć go na bardzo dobrym CPU (nawet jeśli rezultat był boleśnie powolny) lub na zaawansowanym GPU do gier, takim jak NVIDIA RTX 3090. Ale GPT-NeoX 20B jest tak duży, że nie jest to już możliwe.

Zasadniczo GPT-NeoX wymaga co najmniej 42 GB pamięci VRAM i 40 GB miejsca na dysku (i tak, mówimy tu o odchudzonej wersji fp16). Niewiele procesorów graficznych spełnia te wymagania. Główne z nich to NVIDIA A100, A40 i RTX A6000.

Te procesory graficzne są nie tylko bardzo drogie, ale także trudno jest je obecnie dostać w swoje ręce z powodu globalnego niedoboru półprzewodników.

Najlepszym rozwiązaniem jest tutaj architektura multi-GPU.

Multi-GPU z Deepspeed

Jeśli nie możesz zmieścić swojego modelu na jednej jednostce GPU, możesz spróbować podzielić go na kilka jednostek GPU.

Jest to interesująca opcja z dwóch powodów. Po pierwsze, skalowanie infrastruktury w poziomie jest często tańsze niż skalowanie w pionie. Jest to prawdą w przypadku serwerów i jest to również prawdą w przypadku układów GPU. Po drugie, łatwiej jest dostać w swoje ręce kilka małych procesorów graficznych, takich jak NVIDIA Tesla T4, niż większych, takich jak NVIDIA A40.

Niestety, podzielenie modelu uczenia maszynowego na kilka jednostek GPU jest technicznym wyzwaniem. Hugging Face stworzył świetny artykuł na temat równoległości modeli i wyborów, jakie masz do wyboru. czytaj tutaj. Ale na szczęście EleutherAI zaprojektowało GPT-NeoX 20B w taki sposób, aby można go było łatwo paralelizować na kilku układach GPU, zarówno w przypadku szkolenia, jak i wnioskowania.

Architektura GPT-NeoX oparta jest na Deepspeed. Deepspeed to framework od Microsoftu, który pierwotnie został zaprojektowany do paralelizacji treningów pomiędzy kilkoma GPU, ale coraz częściej jest wykorzystywany również do wnioskowania. EleutherAI wykonało całą ciężką pracę, więc paralelizacja GPT-NeoX jest tak prosta, jak zmiana liczby w pliku konfiguracyjnym.

GPT-NeoX Paralelizm
Extract from the GPT-NeoX docs about parallelism

Jednak wdrożenie Deepspeed w produkcji do wnioskowania online przez API jest trudne... Deepspeed nie został zaprojektowany z myślą o łatwej integracji z serwerami internetowymi. W NLP Cloud nauczyliśmy się tego w ciężki sposób, ale po ciężkiej pracy w końcu udało nam się wymyślić skuteczny sposób, aby Deepspeed i GPT-NeoX działały za pośrednictwem naszego API.

Sztuczki użytkowe

Załóżmy więc, że udało Ci się dostarczyć odpowiedni sprzęt i poprawnie wdrożyć GPT-NeoX 20B z Deepspeed. Jest teraz kilka zastrzeżeń, o których należy pamiętać.

Po pierwsze, w porównaniu do GPT-J, parametry (top k, top p, i temperatura) nie mają takiego samego wpływu na model. Więc jeśli udało Ci się znaleźć dobrą konfigurację dla GPT-J, nie bierz tego za pewnik: będziesz musiał wykonać nowe testy z GPT-NeoX.

Wreszcie, nawet jeśli rozmiar danych wejściowych może wzrosnąć do 2048 tokenów, będzie to wymagało więcej pamięci niż 42GB wspomniane powyżej...

Wnioskowanie wsadowe?

Modele GPT są dość powolne, a GPT-NeoX 20B nie jest wyjątkiem. Tak więc, aby poprawić przepustowość swojej aplikacji, możesz chcieć popracować nad rozwiązaniem wnioskowania wsadowego.

Na razie w NLP Cloud nie mamy na to dobrego rozwiązania.

Kod GPT-NeoX jest tak zrobiony, że można wykonać kilka wnioskowań w tym samym czasie w ramach jednego żądania. Jednak w naszych testach czas odpowiedzi rósł liniowo wraz z liczbą wnioskowań, co w pewnym sensie niweczy cel wnioskowania wsadowego...

Wniosek

GPT-NeoX 20B jest zdecydowanie trudny do wdrożenia w produkcji. Jakość generowania tekstu jest niesamowita, ale mało kto będzie miał możliwość faktycznego zainstalowania tego modelu.

Bardziej niż kiedykolwiek, wydaje się, że rozwiązaniem będzie poleganie na usłudze w chmurze, takiej jak NLP Cloud, w celu wykorzystania tego modelu.

Jeśli masz uwagi na temat tego artykułu, prosimy o kontakt, będzie nam miło usłyszeć Twoją opinię na ten temat!

Julien Salinas
CTO w NLP Cloud