W ciągu ostatnich kilku lat nastąpił szybki rozwój w dziedzinie uczenia głębokiego. Chociaż sprzęt uległ poprawie, tak jak w przypadku najnowszej generacji akceleratorów firm NVIDIA i Amazon, praktycy zaawansowanego uczenia maszynowego (ML) nadal regularnie napotykają problemy przy wdrażaniu swoich dużych modeli uczenia głębokiego dla aplikacji, takich jak przetwarzanie języka naturalnego (NLP).
We wcześniejszym poście dyskutowaliśmy możliwości i konfigurowalne ustawienia in Wdrożenie modelu Amazon SageMaker co może ułatwić wnioskowanie z tymi dużymi modelami. Dziś ogłaszamy nowy Amazon Sage Maker Kontener głębokiego uczenia (DLC), którego można użyć do rozpoczęcia wnioskowania o dużym modelu w ciągu kilku minut. Ten DLC pakuje jedne z najpopularniejszych bibliotek open-source do równoległego wnioskowania modeli, takie jak DeepSpeed i Hugging Face Accelerate.
W tym poście używamy nowego DLC z wnioskowaniem dużego modelu SageMaker, aby wdrożyć dwa najpopularniejsze duże modele NLP: BigScience's BLOOM-176B i Meta OPT-30B z repozytorium Hugging Face. W szczególności korzystamy z Deep Java Library (DJL) obsługujących i technik równoległości tensorów z DeepSpeed, aby osiągnąć opóźnienie 0.1 sekundy na token w przypadku użycia generowania tekstu.
Nasze kompletne przykładowe notatniki można znaleźć w naszym Repozytorium GitHub.
Techniki wnioskowania na dużych modelach
Modele językowe ostatnio eksplodowały zarówno pod względem wielkości, jak i popularności. Dzięki łatwemu dostępowi z ogrodów zoologicznych modelowych, takich jak Przytulanie twarzy oraz zwiększonej dokładności i wydajności w zadaniach NLP, takich jak klasyfikacja i generowanie tekstu, praktycy coraz częściej sięgają po te duże modele. Jednak duże modele są często zbyt duże, aby zmieścić się w pamięci pojedynczego akceleratora. Na przykład model BLOOM-176B może wymagać ponad 350 gigabajtów pamięci akceleratora, co znacznie przekracza pojemność dostępnych obecnie akceleratorów sprzętowych. Wymaga to użycia technik równoległych modeli z bibliotek, takich jak DeepSpeed i Hugging Face Accelerate, w celu rozłożenia modelu na wiele akceleratorów w celu wnioskowania. W tym poście używamy Duży kontener wnioskowania modelu SageMaker do generowania i porównywania opóźnień i wydajności przy użyciu tych dwóch bibliotek typu open source.
DeepSpeed i Accelerate wykorzystują różne techniki do optymalizacji dużych modeli językowych pod kątem wnioskowania. Kluczową różnicą jest DeepSpeed użycie zoptymalizowanych jąder. Te jądra mogą radykalnie poprawić opóźnienie wnioskowania poprzez zmniejszenie wąskich gardeł na wykresie obliczeniowym modelu. Zoptymalizowane jądra mogą być trudne do opracowania i zazwyczaj są specyficzne dla określonej architektury modelu; DeepSpeed obsługuje popularne duże modele, takie jak OPT i BLOOM, za pomocą tych zoptymalizowanych jąder. W przeciwieństwie do tego, biblioteka Accelerate Hugging Face nie zawiera zoptymalizowanych jąder w momencie pisania. Jak omawiamy w naszej sekcji wyników, ta różnica jest odpowiedzialna za znaczną część przewagi wydajności, jaką ma DeepSpeed nad przyspieszeniem.
Drugą różnicą między DeepSpeed a Accelerate jest rodzaj równoległości modelu. Accelerate wykorzystuje równoległość potokową do podziału modelu między ukryte warstwy modelu, podczas gdy DeepSpeed używa równoległości tensorowej do podziału samych warstw. Równoległość potoków to elastyczne podejście, które obsługuje więcej typów modeli i może poprawić przepustowość, gdy używane są większe rozmiary partii. Równoległość tensorów wymaga większej komunikacji między procesorami graficznymi, ponieważ warstwy modelowe mogą być rozłożone na wiele urządzeń, ale mogą poprawić opóźnienia wnioskowania, angażując jednocześnie wiele procesorów graficznych. Możesz dowiedzieć się więcej o technikach równoległości w Wprowadzenie do równoległości modelu i Równoległość modelu.
Omówienie rozwiązania
Aby skutecznie hostować duże modele językowe, potrzebujemy funkcji i wsparcia w następujących kluczowych obszarach:
- Budowanie i testowanie rozwiązań – Biorąc pod uwagę iteracyjny charakter rozwoju ML, potrzebujemy możliwości budowania, szybkiego iterowania i testowania, jak będzie się zachowywać punkt końcowy wnioskowania, gdy te modele są hostowane, w tym możliwość szybkiego niepowodzenia. Modele te mogą być zazwyczaj hostowane tylko w większych instancjach, takich jak p4dn lub g5, a biorąc pod uwagę rozmiar modeli, rozkręcenie wystąpienia wnioskowania i uruchomienie dowolnej iteracji testowej może zająć trochę czasu. Testowanie lokalne zwykle ma ograniczenia, ponieważ do testowania potrzebujesz podobnego rozmiaru, a te modele nie są łatwe do uzyskania.
- Wdrażanie i uruchamianie na dużą skalę – Pliki modeli muszą być wczytane do instancji wnioskowania, co samo w sobie stanowi wyzwanie, biorąc pod uwagę rozmiar. Tar / Un-Tar jako przykład dla Bloom-176B zajmuje około 1 godziny na utworzenie i kolejną godzinę na załadowanie. Potrzebujemy alternatywnego mechanizmu, aby umożliwić łatwy dostęp do plików modeli.
- Ładowanie modelu jako singleton – W przypadku procesu wieloosobowego musimy upewnić się, że model zostanie załadowany tylko raz, aby nie wpaść w warunki wyścigu i nie wydać niepotrzebnych zasobów. W tym poście pokazujemy sposób ładowania bezpośrednio z Usługa Amazon Simple Storage (Amazonka S3). Działa to jednak tylko wtedy, gdy używamy domyślnych ustawień DJL. Co więcej, wszelkie skalowanie punktów końcowych musi być w stanie uruchomić się w ciągu kilku minut, co wymaga ponownego rozważenia sposobu ładowania i dystrybucji modeli.
- Ramy shardingu – Modele te zazwyczaj muszą być , zwykle za pomocą mechanizmu równoległości tensorów lub fragmentacji potoku jako typowych technik fragmentowania, a my mamy zaawansowane koncepcje, takie jak fragmentowanie Zero, zbudowane na podstawie fragmentowania tensorów. Aby uzyskać więcej informacji o technikach shardingu, zobacz Równoległość modelu. Aby to osiągnąć, możemy mieć różne kombinacje i korzystać z frameworków NIVIDIA, DeepSpeed i innych. Wymaga to możliwości testowania BYOC lub używania kontenerów 1P oraz iteracji rozwiązań i przeprowadzania testów porównawczych. Możesz także przetestować różne opcje hostingu, takie jak asynchroniczne, bezserwerowe i inne.
- Wybór sprzętu – Twój wybór sprzętu zależy od wszystkich wyżej wymienionych punktów i dalszych wzorców ruchu, potrzeb przypadków użycia i rozmiarów modelu.
W tym poście używamy zoptymalizowanych jąder DeepSpeed i technik równoległości tensorów do hostowania BLOOM-176B i OPT-30B na SageMaker. Porównujemy również wyniki programu Accelerate, aby zademonstrować korzyści w zakresie wydajności wynikające ze zoptymalizowanych jąder i równoległości tensorów. Aby uzyskać więcej informacji o DeepSpeed i Accelerate, zobacz DeepSpeed Inference: umożliwienie efektywnego wnioskowania modeli transformatorów na niespotykaną dotąd skalę i Niesamowicie szybkie wnioskowanie BLOOM z DeepSpeed i Accelerate.
W tym przykładzie używamy DJLServing jako rozwiązania do obsługi modelu. DJLServing to wysokowydajne, uniwersalne rozwiązanie obsługujące model, oparte na bibliotece Deep Java Library (DJL), która jest agnostyczna dla języka programowania. Aby dowiedzieć się więcej o DJL i DJLServing, zapoznaj się z Wdrażaj duże modele w Amazon SageMaker za pomocą równoległego wnioskowania modeli DJLServing i DeepSpeed.
Warto zauważyć, że zoptymalizowane jądra mogą skutkować zmianami precyzji i zmodyfikowanym wykresem obliczeń, co teoretycznie może skutkować zmianą zachowania modelu. Chociaż może to czasami zmienić wynik wnioskowania, nie oczekujemy, że te różnice będą miały istotny wpływ na podstawowe metryki oceny modelu. Niemniej jednak zaleca się praktykom, aby podczas korzystania z tych jąder upewnili się, że dane wyjściowe modelu są zgodne z oczekiwaniami.
Poniższe kroki pokazują, jak wdrożyć model BLOOM-176B w programie SageMaker przy użyciu DJLServing i kontenera wnioskowania dużego modelu SageMaker. Kompletny przykład jest również dostępny w naszym Repozytorium GitHub.
Korzystanie z obrazu DLC DJLServing SageMaker
Użyj następującego kodu, aby użyć obrazu DLC DJLServing SageMaker po zastąpieniu regionu określonym regionem, w którym działa notebook:
Stwórz nasz plik modelu
Najpierw tworzymy plik o nazwie serving.properties
zawierający tylko jeden wiersz kodu. To mówi serwerowi modeli DJL, aby używał silnika DeepSpeed. Plik zawiera następujący kod:
serving.properties
to plik zdefiniowany przez DJLServing, który służy do konfigurowania konfiguracji dla poszczególnych modeli.
Następnie tworzymy nasze model.py
plik, który definiuje kod potrzebny do załadowania, a następnie obsłużenia modelu. W naszym kodzie czytamy w TENSOR_PARALLEL_DEGREE
zmienna środowiskowa (wartość domyślna to 1). Ustawia to liczbę urządzeń, na których dystrybuowane są moduły równoległe tensor. Zauważ, że DeepSpeed udostępnia kilka wbudowanych definicji partycji, w tym jedną dla modeli BLOOM. Używamy go, określając replace_method
i relpace_with_kernel_inject
. Jeśli masz niestandardowy model i potrzebujesz technologii DeepSpeed do efektywnego partycjonowania, musisz zmienić relpace_with_kernel_inject
do false
i dodać injection_policy
aby partycja uruchomieniowa działała. Aby uzyskać więcej informacji, zobacz Inicjowanie dla wnioskowania. W naszym przykładzie użyliśmy wstępnie podzielonego modelu BLOOM na DeepSpeed.
Po drugie, w model.py
pliku, ładujemy również model z Amazon S3 po uruchomieniu punktu końcowego. Model jest ładowany do /tmp
miejsca na kontenerze, ponieważ SageMaker mapuje /tmp
do Sklep Amazon Elastic Block (Amazon EBS) wolumen, który jest montowany, gdy określamy parametr tworzenia punktu końcowego VolumeSizeInGB
. W przypadku instancji takich jak p4dn, które są wstępnie zbudowane z instancją woluminu, możemy nadal korzystać z tego /tmp
na pojemniku. Zobacz następujący kod:
DJLServing zarządza instalacją środowiska uruchomieniowego na dowolnych pakietach pip zdefiniowanych w requirement.txt
. Ten plik będzie miał:
Stworzyliśmy katalog o nazwie code
oraz model.py
, serving.properties
, requirements.txt
pliki są już utworzone w tym katalogu. Aby wyświetlić pliki, możesz uruchomić następujący kod z terminala:
Poniższy rysunek przedstawia strukturę model.tar.gz
.
Na koniec tworzymy plik modelu i przesyłamy go do Amazon S3:
Pobierz i zapisz model z Hugging Face (opcjonalnie)
Podaliśmy kroki w tej sekcji na wypadek, gdybyś chciał pobrać model do Amazon S3 i używać go stamtąd. Kroki są dostępne w pliku Jupyter w serwisie GitHub. Poniższy zrzut ekranu przedstawia migawkę kroków.
Stwórz model SageMakera
Teraz tworzymy Model SageMakera. Używamy Rejestr elastycznego pojemnika Amazon (Amazon ECR) obraz dostarczony przez i artefakt modelu z poprzedniego kroku tworzenia modelu SageMaker. W konfiguracji modelu konfigurujemy TENSOR_PARALLEL_DEGREE=8
, co oznacza, że model jest podzielony na 8 procesorów graficznych. Zobacz następujący kod:
Po uruchomieniu poprzedniej komórki w pliku Jupyter zobaczysz dane wyjściowe podobne do następujących:
Utwórz punkt końcowy SageMaker
Do testowania możesz użyć dowolnych instancji z wieloma procesorami graficznymi. W tym demo używamy instancji p4d.24xlarge. W poniższym kodzie zwróć uwagę, jak ustawiamy ModelDataDownloadTimeoutInSeconds
, ContainerStartupHealthCheckTimeoutInSeconds
, VolumeSizeInGB
parametry, aby dostosować się do dużego rozmiaru modelu. The VolumeSizeInGB
parametr dotyczy instancji GPU obsługujących przyłączenie woluminu EBS.
Na koniec tworzymy punkt końcowy SageMaker:
Widzisz to wydrukowane w następującym kodzie:
Uruchomienie punktu końcowego może trochę potrwać. Możesz spróbować jeszcze kilka razy, jeśli natkniesz się na InsufficientInstanceCapacity
błąd lub możesz zgłosić prośbę do AWS o zwiększenie limitu na Twoim koncie.
Podnoszenie wydajności
Jeśli zamierzasz użyć tego posta i towarzyszącego mu notebooka z innym modelem, możesz zapoznać się z niektórymi regulowanymi parametrami oferowanymi przez SageMaker, DeepSpeed i DJL. Iteracyjne eksperymentowanie z tymi parametrami może mieć istotny wpływ na opóźnienie, przepustowość i koszt hostowanego dużego modelu. Aby dowiedzieć się więcej o parametrach dostrajania, takich jak liczba pracowników, stopień równoległości tensorów, rozmiar kolejki zadań i inne, zobacz Konfiguracje obsługi DJL i Wdrażaj duże modele w Amazon SageMaker za pomocą równoległego wnioskowania modeli DJLServing i DeepSpeed.
Efekt
W tym poście wykorzystaliśmy DeepSpeed do hostowania BLOOM-176B i OPT-30B na instancjach SageMaker ML. Poniższa tabela podsumowuje nasze wyniki wydajności, w tym porównanie z Przyspieszeniem Hugging Face. Opóźnienie odzwierciedla liczbę milisekund potrzebnych do czterokrotnego wytworzenia ciągu 256-tokenowego (batch_size=4
) z modelu. Przepustowość odzwierciedla liczbę tokenów produkowanych na sekundę dla każdego testu. W przypadku Hugging Face Accelerate użyliśmy domyślnego ładowania biblioteki z mapowaniem pamięci GPU. W przypadku DeepSpeed użyliśmy jego szybszego mechanizmu ładowania punktów kontrolnych.
Model | Biblioteka | Precyzja modelu | Wielkość partii | Stopień równoległy | Instancja | Czas na załadowanie (S) |
Opóźnienie (wyjście 4 x 256 tokenów) | . | ||
. | . | . | . | . | . | . | P50 (ms) |
P90 (ms) |
P99 (ms) |
Wydajność (tokeny/s) |
BLOOM-176B | Głęboka prędkość | INT8 | 4 | 8 | p4d.24xduży | 74.9 | 27,564 | 27,580 | 32,179 | 37.1 |
BLOOM-176B | Przyśpieszyć | INT8 | 4 | 8 | p4d.24xduży | 669.4 | 92,694 | 92,735 | 103,292 | 11.0 |
OPT-30B | Głęboka prędkość | FP16 | 4 | 4 | g5.24xduże | 239.4 | 11,299 | 11,302 | 11,576 | 90.6 |
OPT-30B | Przyśpieszyć | FP16 | 4 | 4 | g5.24xduże | 533.8 | 63,734 | 63,737 | 67,605 | 16.1 |
Z perspektywy latencji DeepSpeed jest około 3.4 razy szybszy dla BLOOM-176B i 5.6 razy szybszy dla OPT-30B niż Accelerate. Zoptymalizowane jądra DeepSpeed są odpowiedzialne za znaczną część tej różnicy w opóźnieniach. Biorąc pod uwagę te wyniki, zalecamy używanie funkcji DeepSpeed over Accelerate, jeśli wybrany model jest obsługiwany.
Warto również zauważyć, że czasy ładowania modeli za pomocą DeepSpeed były znacznie krótsze, co czyni go lepszą opcją, jeśli przewidujesz potrzebę szybkiego skalowania liczby punktów końcowych. Bardziej elastyczna technika równoległości potoków Accelerate może być lepszą opcją, jeśli masz modele lub precyzje modeli, które nie są obsługiwane przez DeepSpeed.
Wyniki te pokazują również różnicę w opóźnieniach i przepustowości różnych rozmiarów modeli. W naszych testach OPT-30B generuje 2.4 razy więcej tokenów na jednostkę czasu niż BLOOM-176B na typie instancji, który jest ponad trzy razy tańszy. Na podstawie ceny jednostkowej przepustowości, OPT-30B w wystąpieniu g5.24xl jest 8.9 razy lepszy niż BLOOM-176B w wystąpieniu p4d.24xl. Jeśli masz ścisłe ograniczenia dotyczące opóźnień, przepustowości lub kosztów, rozważ użycie najmniejszego możliwego modelu, który nadal będzie spełniał wymagania funkcjonalne.
Sprzątać
W ramach najlepszych praktyk zawsze zaleca się usuwanie nieaktywnych instancji. Poniższy kod pokazuje, jak usunąć instancje.
Opcjonalnie usuń punkt kontrolny modelu z S3
Wnioski
W tym poście pokazaliśmy, jak używać kontenerów wnioskowania dużych modeli SageMaker do obsługi dwóch dużych modeli językowych, BLOOM-176B i OPT-30B. Wykorzystaliśmy techniki równoległego modelu DeepSpeed z wieloma procesorami graficznymi na jednej instancji SageMaker ML.
Aby uzyskać więcej informacji na temat Amazon SageMaker i jego możliwości wnioskowania na dużych modelach, zobacz Amazon SageMaker obsługuje teraz wdrażanie dużych modeli poprzez konfigurowalny rozmiar woluminu i limity czasu i Wnioskowanie w czasie rzeczywistym.
O autorach
Szymon Zamarin jest architektem rozwiązań AI / ML, którego głównym celem jest pomoc klientom w wydobyciu wartości z ich zasobów danych. W wolnym czasie Simon lubi spędzać czas z rodziną, czytając sci-fi i pracując nad różnymi projektami domowymi.
Rozbijacz Grewal jest Sr Ai/ML Specialist Solutions Architect z AWS. Obecnie skupia się na serwowaniu modeli i MLOpów na SageMakerze. Wcześniej pracował jako inżynier ds. uczenia maszynowego budując i hostując modele. Poza pracą lubi grać w tenisa i jeździć na rowerze po górskich szlakach.
Franek Liu jest inżynierem oprogramowania w AWS Deep Learning. Koncentruje się na budowaniu innowacyjnych narzędzi do głębokiego uczenia się dla inżynierów oprogramowania i naukowców. W wolnym czasie lubi piesze wędrówki z przyjaciółmi i rodziną.
Alana Tana jest starszym menedżerem produktu w firmie SageMaker, która prowadzi prace nad wnioskowaniem na dużych modelach. Pasjonuje go zastosowanie uczenia maszynowego w obszarze Analytics. Poza pracą lubi przebywać na świeżym powietrzu.
Dawal Patel jest głównym architektem uczenia maszynowego w AWS. Pracował z organizacjami od dużych przedsiębiorstw po średniej wielkości start-upy w zakresie problemów związanych z przetwarzaniem rozproszonym i sztuczną inteligencją. Koncentruje się na uczeniu głębokim, w tym w domenach NLP i Computer Vision. Pomaga klientom uzyskać wnioskowanie o wysokiej wydajności modelu w SageMaker.
QingLan jest inżynierem rozwoju oprogramowania w AWS. Pracował nad kilkoma wymagającymi produktami w Amazon, w tym wysokowydajnymi rozwiązaniami wnioskowania ML i wysokowydajnym systemem rejestrowania. Zespół Qing z powodzeniem uruchomił pierwszy model miliarda parametrów w Amazon Advertising z wymaganym bardzo niskim opóźnieniem. Qing posiada dogłębną wiedzę na temat optymalizacji infrastruktury i akceleracji Deep Learning.
Qingwei Li jest specjalistą ds. uczenia maszynowego w Amazon Web Services. Uzyskał stopień doktora. w badaniach operacyjnych po tym, jak złamał konto grantu naukowego swojego doradcy i nie przekazał obiecanej nagrody Nobla. Obecnie pomaga klientom z branży usług finansowych i ubezpieczeniowych budować rozwiązania machine learning na AWS. W wolnym czasie lubi czytać i uczyć.
Roberta Van Dusena jest starszym menedżerem produktu w Amazon SageMaker. Prowadzi optymalizację modeli uczenia głębokiego dla aplikacji takich jak wnioskowanie na dużych modelach.
Siddhartha Venkatesana jest inżynierem oprogramowania w AWS Deep Learning. Obecnie koncentruje się na budowaniu rozwiązań do wnioskowania na dużych modelach. Przed AWS pracował w Amazon Grocery org, budując nowe funkcje płatności dla klientów na całym świecie. Poza pracą lubi jeździć na nartach, spędzać czas na świeżym powietrzu i oglądać sport.
- Zaawansowane (300)
- AI
- ai sztuka
- generator sztuki ai
- masz robota
- Amazon Sage Maker
- sztuczna inteligencja
- certyfikacja sztucznej inteligencji
- sztuczna inteligencja w bankowości
- robot sztucznej inteligencji
- roboty sztucznej inteligencji
- oprogramowanie sztucznej inteligencji
- Uczenie maszynowe AWS
- blockchain
- konferencja blockchain ai
- pomysłowość
- sztuczna inteligencja konwersacyjna
- konferencja kryptograficzna
- Dall's
- głęboka nauka
- google to
- uczenie maszynowe
- plato
- Platon Ai
- Analiza danych Platona
- Gra Platona
- PlatoDane
- platogaming
- skala ai
- składnia
- zefirnet