AWS Inferentia2 opiera się na AWS Inferentia1, zapewniając 4x wyższą przepustowość i 10x mniejsze opóźnienia | Usługi sieciowe Amazona

AWS Inferentia2 opiera się na AWS Inferentia1, zapewniając 4x wyższą przepustowość i 10x mniejsze opóźnienia | Usługi sieciowe Amazona

Rozmiar modeli uczenia maszynowego (ML) – – duże modele językowe (LLM) i modele fundamentów (FM)––z roku na rok szybko rośnie, a te modele wymagają szybszych i potężniejszych akceleratorów, zwłaszcza dla generatywnej sztucznej inteligencji. Inferencja AWS2 został zaprojektowany od podstaw, aby zapewnić wyższą wydajność przy jednoczesnym obniżeniu kosztów LLM i generatywnego wnioskowania AI.

W tym poście pokazujemy, w jaki sposób druga generacja AWS Inferentia opiera się na możliwościach wprowadzonych w AWS Inferentia1 i spełnia wyjątkowe wymagania związane z wdrażaniem i uruchamianiem LLM i FM.

Pierwsza generacja AWS Inferentia, specjalnie skonstruowanego akceleratora wprowadzonego na rynek w 2019 r., jest zoptymalizowana pod kątem przyspieszenia wnioskowania o głębokim uczeniu się. AWS Inferentia pomogła użytkownikom ML obniżyć koszty wnioskowania i poprawić przepustowość przewidywania i opóźnienia. Dzięki AWS Inferentia1 klienci uzyskali nawet 2.3-krotnie wyższą przepustowość i do 70% niższy koszt wnioskowania w porównaniu z porównywalnymi rozwiązaniami zoptymalizowanymi pod kątem wnioskowania Elastyczna chmura obliczeniowa Amazon (Amazon EC2) instancje.

AWS Inferentia2, opisywany w nowym Instancje Amazon EC2 Inf2 i wspierany w Amazon Sage Maker, jest zoptymalizowany pod kątem generatywnego wnioskowania AI na dużą skalę i jest pierwszą instancją AWS ukierunkowaną na wnioskowanie, która jest zoptymalizowana pod kątem wnioskowania rozproszonego, z szybką łącznością między akceleratorami o małych opóźnieniach.

Możesz teraz wydajnie wdrożyć model o 175 miliardach parametrów do wnioskowania w wielu akceleratorach w pojedynczej instancji Inf2 bez konieczności stosowania kosztownych instancji szkoleniowych. Do tej pory klienci, którzy mieli duże modele, mogli korzystać tylko z instancji zbudowanych do celów szkoleniowych, ale jest to marnowanie zasobów — biorąc pod uwagę, że są droższe, zużywają więcej energii, a ich obciążenie pracą nie wykorzystuje wszystkich dostępnych zasobów (takich jak szybsza sieć i pamięć masowa). Dzięki AWS Inferentia2 możesz osiągnąć 4-krotnie wyższą przepustowość i do 10-krotnie mniejsze opóźnienia w porównaniu z AWS Inferentia1. Ponadto druga generacja AWS Inferentia dodaje ulepszoną obsługę większej liczby typów danych, niestandardowych operatorów, dynamicznych tensorów i nie tylko.

AWS Inferentia2 ma 4 razy większą pojemność pamięci, 16.4 razy większą przepustowość pamięci niż AWS Inferentia1 oraz natywną obsługę dzielenia dużych modeli na wiele akceleratorów. Akceleratory używają Komunikacja zbiorowa NeuronLink i Neuron aby zmaksymalizować szybkość przesyłania danych między nimi lub między akceleratorem a kartą sieciową. AWS Inferentia2 lepiej nadaje się do większych modeli, które wymagają shardingu na wielu akceleratorach, chociaż AWS Inferentia1 jest nadal świetną opcją dla mniejszych modeli, ponieważ zapewnia lepszy stosunek ceny do wydajności w porównaniu z alternatywami.

Ewolucja architektury

Aby porównać obie generacje AWS Inferentia, przejrzyjmy architektura AWS Inferentia1. Ma cztery NeuronCores v1 na chip, jak pokazano na poniższym diagramie.

AWS Inferentia2 opiera się na AWS Inferentia1, zapewniając 4x wyższą przepustowość i 10x mniejsze opóźnienia | Amazon Web Services PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.

Specyfikacje na chip:

  • obliczać – Cztery rdzenie dostarczające łącznie 128 INT8 TOPS i 64FP16/BF16 TFLOPS
  • Pamięć – 8 GB pamięci DRAM (przepustowość 50 GB/s), współdzielone przez wszystkie cztery rdzenie
  • NeuronLink – Łącze między rdzeniami w celu dzielenia modeli na dwa lub więcej rdzeni

Przyjrzyjmy się, jak zorganizowana jest AWS Inferentia2. Każdy układ AWS Inferentia2 ma dwa ulepszone rdzenie oparte na Architektura NeuronCore-v2. Podobnie jak AWS Inferentia1, możesz uruchamiać różne modele na każdym NeuronCore lub łączyć wiele rdzeni, aby podzielić duże modele.

AWS Inferentia2 opiera się na AWS Inferentia1, zapewniając 4x wyższą przepustowość i 10x mniejsze opóźnienia | Amazon Web Services PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.

Specyfikacje na chip:

  • obliczać – Dwa rdzenie dostarczające łącznie 380 INT8 TOPS, 190 FP16/BF16/cFP8/TF32 TFLOPS i 47.5 FP32 TFLOPS
  • Pamięć – 32 GB pamięci HBM współdzielonej przez oba rdzenie
  • NeuronLink – Łącze między układami scalonymi (384 GB/s na urządzenie) do dzielenia modeli na dwa lub więcej rdzeni

NeuronCore-v2 ma modułowa konstrukcja z czterema niezależnymi silnikami:

  • ScalarEngine (3 razy szybszy niż v1) – Działa na liczbach zmiennoprzecinkowych ––1600 (BF16/FP16) FLOPS
  • VectorEngine (10 razy szybszy niż v1) – Działa na wektorach liczb z pojedynczą operacją do obliczeń, takich jak normalizacja, łączenie i inne.
  • TensorEngine (6 razy szybszy niż v1) – Wykonuje obliczenia tensorowe, takie jak Conv, Reshape, Transpose i inne.
  • Silnik GPSIMD – Posiada osiem w pełni programowalnych 512-bitowych procesorów ogólnego przeznaczenia, dzięki którym możesz tworzyć własne operatorzy niestandardowi w standardowy niestandardowy interfejs API operatorów C++ PyTorch. Jest to nowa funkcja wprowadzona w NeuronCore-v2.

AWS Inferentia2 NeuronCore-v2 jest szybszy i bardziej zoptymalizowany. Ponadto jest w stanie przyspieszyć modele różnych typów i rozmiarów, od prostych modeli, takich jak ResNet 50, po duże modele językowe lub modele podstawowe z miliardami parametrów, takie jak GPT-3 (175 miliardów parametrów). AWS Inferentia2 ma również większą i szybszą pamięć wewnętrzną w porównaniu z AWS Inferentia1, jak pokazano w poniższej tabeli.

Żeton Rdzenie neuronowe Typ pamięci Rozmiar pamięci Przepustowość pamięci
Inferencja AWS x4 (v1) DDR4 8GB 50 GB/S
Inferencja AWS 2 x2 (v2) HBM 32GB 820 GB/S

Pamięć, którą znajdziesz w AWS Inferentia2 jest typu High-Bandwidth Memory (HBM). Każdy układ AWS Inferentia2 ma 32 GB i można go łączyć z innymi układami w celu dystrybucji bardzo dużych modeli za pomocą NeuronLink (połączenie między urządzeniami). Na przykład inf2.48xlarge ma 12 akceleratorów AWS Inferentia2 z łącznie 384 GB przyspieszonej pamięci. Szybkość pamięci AWS Inferentia2 jest 16.4 razy większa niż AWS Inferentia1, jak pokazano w poprzedniej tabeli.

Inne cechy

AWS Inferentia2 oferuje następujące dodatkowe funkcje:

  • Obsługiwany sprzęt – cFP8 (nowy, konfigurowalny FP8), FP16, BF16, TF32, FP32, INT8, INT16 i INT32. Aby uzyskać więcej informacji, patrz Typy danych.
  • Wnioskowanie z leniwego tensora - Dyskutujemy Wnioskowanie z leniwego tensora później w tym poście.
  • Operatorzy celni – Deweloperzy mogą korzystać ze standardowych interfejsów programowania niestandardowych operatorów PyTorch, aby używać Niestandardowe operatory C++ funkcja. Operator niestandardowy składa się z prymitywów niskiego poziomu dostępnych w Funkcje fabryczne tensorów i przyspieszony przez GPSIMD-Engine.
  • Kontrola przepływu (wkrótce) – Służy do sterowania przepływem w natywnym języku programowania wewnątrz modelu w celu ostatecznego wstępnego i końcowego przetwarzania danych z jednej warstwy do drugiej.
  • Dynamiczne kształty (wkrótce) – Jest to przydatne, gdy model dynamicznie zmienia kształt danych wyjściowych dowolnej warstwy wewnętrznej. Na przykład: filtr, który zmniejsza rozmiar lub kształt tensora wyjściowego wewnątrz modelu na podstawie danych wejściowych.

Akceleracja modeli na AWS Inferentia1 i AWS Inferentia2

Połączenia SDK AWS Neuron służy do kompilowania i uruchamiania modelu. Jest natywnie zintegrowany z PyTorch i TensorFlow. W ten sposób nie musisz uruchamiać dodatkowego narzędzia. Użyj oryginalnego kodu, napisanego w jednym z tych frameworków ML, a po kilku linijkach zmian w kodzie możesz zacząć korzystać z AWS Inferentia.

Przyjrzyjmy się, jak skompilować i uruchomić model na AWS Inferentia1 i AWS Inferentia2 przy użyciu PyTorch.

Załaduj wstępnie przeszkolony model (ResNet 50) z Torchvision

Załaduj wstępnie wytrenowany model i uruchom go jeden raz, aby go rozgrzać:

import torch
import torchvision model = torchvision.models.resnet50(weights='IMAGENET1K_V1').eval().cpu()
x = torch.rand(1,3,224,224).float().cpu() # dummy input
y = model(x) # warmup model

Śledź i wdrażaj przyspieszony model na Inferentia1

Aby prześledzić model do AWS Inferentia, zaimportuj torch_neuron i wywołaj funkcję śledzenia. Pamiętaj, że model musi być identyfikowalny w PyTorch Jit, aby działał.

Na koniec procesu śledzenia zapisz model jako normalny model PyTorch. Skompiluj model raz i załaduj go z powrotem tyle razy, ile potrzebujesz. Środowisko uruchomieniowe Neuron SDK jest już zintegrowane z PyTorch i jest odpowiedzialne za automatyczne wysyłanie operatorów do układu AWS Inferentia1 w celu przyspieszenia Twojego modelu.

W swoim kodzie wnioskowania zawsze musisz zaimportować torch_neuron aby aktywować zintegrowane środowisko wykonawcze.

Możesz przejść dodatkowe parametry do kompilatora, aby dostosować sposób, w jaki optymalizuje model lub włączyć specjalne funkcje, takie jak rdzenie potoku neuronowego. Dziel swój model na wiele rdzeni, aby zwiększyć przepustowość.

import torch_neuron # Tracing the model using AWS NeuronSDK
neuron_model = torch_neuron.trace(model,x) # trace model to Inferentia
# Saving for future use
neuron_model.save('neuron_resnet50.pt') # Next time you don't need to trace the model again
# Just load it and AWS NeuronSDK will send it to Inferentia automatically
neuron_model = torch.jit.load('neuron_resnet50.pt') # accelerated inference on Inferentia
y = neuron_model(x)

Śledzenie i wdrażanie przyspieszonego modelu na Inferentia2

W przypadku AWS Inferentia2 proces jest podobny. Jedyną różnicą jest to, że importowany pakiet kończy się na x: torch_neuronx. Neuron SDK dba o przejrzystą kompilację i uruchomienie modelu. Możesz też przejść dodatkowe parametry do kompilatora aby dostroić działanie lub aktywować określone funkcjonalności.

import torch_neuronx # Tracing the model using NeuronSDK
neuron_model = torch_neuronx.trace(model,x) # trace model to Inferentia
# Saving for future use
neuron_model.save('neuron_resnet50.pt') # Next time you don't need to trace the model again
# Just load it and NeuronSDK will send it to Inferentia automatically
neuron_model = torch.jit.load('neuron_resnet50.pt') # accelerated inference on Inferentia
y = neuron_model(x)

AWS Inferentia2 oferuje również drugie podejście do uruchamiania modelu o nazwie Wnioskowanie z leniwego tensora. W tym trybie nie śledzisz ani nie kompilujesz wcześniej modelu; zamiast tego kompilator działa w locie za każdym razem, gdy uruchamiasz swój kod. Nie jest to zalecane do produkcji, biorąc pod uwagę, że ma tryb śledzenia wiele zalet nad wnioskowaniem Lazy Tensor. Jeśli jednak nadal rozwijasz swój model i chcesz go szybciej przetestować, dobrą alternatywą może być wnioskowanie z wykorzystaniem leniwego tensora. Oto jak skompilować i uruchomić model przy użyciu Lazy Tensor:

import torch
import torchvision
import torch_neuronx
import torch_xla.core.xla_model as xm device = xm.xla_device() # Create XLA device
model = torchvision.models.resnet50(weights='IMAGENET1K_V1').eval().cpu()
model.to(device) x = torch.rand((1,3,224,224), device=device) # dummy input
with torch.no_grad(): y = model(x) xm.mark_step() # Compilation occurs here

Teraz, gdy znasz AWS Inferentia2, dobrym następnym krokiem jest rozpoczęcie pracy PyTorch or Tensorflow i dowiedz się, jak skonfigurować środowisko deweloperskie oraz uruchomić samouczki i przykłady. Sprawdź też tzw AWS Neuron Samples Repozytorium GitHub, gdzie można znaleźć wiele przykładów przygotowania modeli do uruchamiania na Inf2, Inf1 i Trn1.

Podsumowanie porównania funkcji AWS Inferentia1 i AWS Inferentia2

Kompilator AWS Inferentia2 jest oparte na XLA, a AWS jest częścią Inicjatywa OpenXLA. Jest to największa różnica w stosunku do AWS Inferentia1 i jest to istotne, ponieważ PyTorch, TensorFlow i JAX mają natywne integracje XLA. XLA zapewnia wiele ulepszeń wydajności, biorąc pod uwagę, że optymalizuje wykres, aby obliczyć wyniki podczas jednego uruchomienia jądra. Łączy ze sobą kolejne operacje tensorowe i generuje optymalny kod maszynowy do przyspieszania przebiegu modelu w AWS Inferentia2. Inne części Neuron SDK również zostały ulepszone w AWS Inferentia2, przy jednoczesnym zachowaniu jak najprostszej obsługi podczas śledzenia i uruchamiania modeli. W poniższej tabeli przedstawiono funkcje dostępne w obu wersjach kompilatora i środowiska uruchomieniowego.

Cecha pochodnia-neuron latarka-neuronx
Tablica Tensorowa Tak Tak
Obsługiwane instancje Inf1 Inf2 & Trn1
Wsparcie wnioskowania Tak Tak
Wsparcie szkoleniowe Nie Tak
Architektura NeuronCore-v1 NeuronCore-v2
Śledź interfejs API torch_neuron.trace() torch_neuronx.trace()
Wnioskowanie rozproszone Rurociąg NeuronCore Komunikacja zbiorowa
IR WykresDef HLO
kompilator neuron-cc neuronx-cc
Monitorowanie neuron-monitor / monitor-top neuron-monitor / monitor-top

Aby uzyskać bardziej szczegółowe porównanie między torch-neuron (Inf1) i torch-neuronx (Inf2), patrz Porównanie neuronu pochodni (Inf1) z neuronem pochodni (Inf2 i Trn1) w celu wnioskowania.

Wzorcowe serwowanie

Po prześledzeniu modelu do wdrożenia w Inf2 masz wiele opcji wdrażania. Prognozy w czasie rzeczywistym lub prognozy wsadowe można uruchamiać na różne sposoby. Inf2 jest dostępny, ponieważ instancje EC2 są natywnie zintegrowane z innymi usługami AWS, które z nich korzystają Kontenery głębokiego uczenia (DLC), takie jak Usługa Amazon Elastic Container Service (Amazonka ECS), Elastyczna usługa Amazon Kubernetes (Amazon EKS) i SageMaker.

AWS Inferentia2 jest kompatybilna z najpopularniejszymi technologiami wdrożeniowymi. Oto lista niektórych opcji wdrażania modeli przy użyciu AWS Inferentia2:

  • SageMaker – W pełni zarządzana usługa przygotowywania danych oraz budowania, trenowania i wdrażania modeli uczenia maszynowego
  • PochodniaPodaj – Zintegrowany mechanizm wdrażania PyTorch
  • Obsługa TensorFlow – Zintegrowany mechanizm wdrażania TensorFlow
  • Głęboka biblioteka Java – Mechanizm Java typu open source do wdrażania i szkolenia modeli
  • Tryton – Usługa open source firmy NVIDIA do wdrażania modeli

Benchmark

Poniższa tabela przedstawia ulepszenia, które AWS Inferentia2 wprowadza w stosunku do AWS Inferentia1. W szczególności mierzymy opóźnienie (jak szybko model może wykonać prognozę przy użyciu każdego akceleratora), przepustowość (ile wniosków na sekundę) i koszt na wniosek (ile kosztuje każdy wniosek w dolarach amerykańskich). Im mniejsze opóźnienie w milisekundach i koszty w dolarach amerykańskich, tym lepiej. Im wyższa przepustowość, tym lepiej.

W tym procesie wykorzystano dwa modele — oba duże modele językowe: duży dyskryminator ELECTRA i duży BERT bez obudowy. PyTorch (1.13.1) i Hugging Face transformers (v4.7.0), główne biblioteki użyte w tym eksperymencie, działały w Pythonie 3.8. Po skompilowaniu modeli dla wielkości wsadu = 1 i 10 (korzystając z kodu z poprzedniej sekcji jako odniesienia), każdy model został rozgrzany (wywołany jeden raz w celu zainicjowania kontekstu), a następnie wywołany 10 razy z rzędu. Poniższa tabela przedstawia średnie liczby zebrane w tym prostym teście porównawczym.

Nazwa modelu Wielkość partii Długość zdania Opóźnienie (ms) Ulepszenia Inf2 w stosunku do Inf1 (x razy) Przepustowość (wnioskowania na sekundę) Koszt na wnioskowanie (EC2 us-east-1) **
Inf1 Inf2 Inf1 Inf2 Inf1 Inf2
ElectraLargeDiscriminator 1 256 35.7 8.31 4.30 28.01 120.34 $0.0000023 $0.0000018
ElectraLargeDiscriminator 10 256 343.7 72.9 4.71 2.91 13.72 $0.0000022 $0.0000015
BertLargeBez obudowy 1 128 28.2 3.1 9.10 35.46 322.58 $0.0000018 $0.0000007
BertLargeBez obudowy 10 128 121.1 23.6 5.13 8.26 42.37 $0.0000008 $0.0000005

* c6a.8xduży z 32 procesorami AMD Epyc 7313 został użyty w tym teście porównawczym.

**Ceny publiczne EC2 w us-east-1 w dniu 20 kwietnia: inf2.xlarge: 0.7582 USD/godz.; inf1.xlarge: 0.228 USD/godz. Koszt na wnioskowanie uwzględnia koszt na element w partii. (Koszt na wnioskowanie jest równy całkowitemu kosztowi wywołania modelu/rozmiaru partii).

Aby uzyskać dodatkowe informacje na temat wydajności uczenia i wnioskowania, zobacz Wydajność Trn1/Trn1n.

Wnioski

AWS Inferentia2 to potężna technologia zaprojektowana w celu poprawy wydajności i obniżenia kosztów wnioskowania o modelu głębokiego uczenia. Bardziej wydajne niż AWS Inferentia1, oferuje do 4 razy wyższą przepustowość, do 10 razy mniejsze opóźnienia i do 50% lepszą wydajność na wat niż inne porównywalne instancje EC2 zoptymalizowane pod kątem wnioskowania. Ostatecznie płacisz mniej, szybciej składasz wniosek i osiągasz swoje cele w zakresie zrównoważonego rozwoju.

Migracja kodu wnioskowania do AWS Inferentia2 jest prosta i bezpośrednia, która obsługuje również szerszą gamę modeli, w tym duże modele językowe i modele podstawowe dla generatywnej sztucznej inteligencji.

Możesz zacząć, postępując zgodnie z Dokumentacja AWS Neuron SDK skonfigurować środowisko programistyczne i rozpocząć projekt przyspieszonego uczenia głębokiego. Aby pomóc Ci zacząć, Hugging Face dodało do nich obsługę Neuron Optimum bibliotekę, która optymalizuje modele w celu szybszego uczenia i wnioskowania, i mają wiele przykładowych zadań gotowych do uruchomienia na Inf2. Sprawdź również nasze Wdrażaj duże modele językowe w AWS Inferentia2 przy użyciu dużych kontenerów wnioskowania modeli aby dowiedzieć się o wdrażaniu LLM w AWS Inferentia2 przy użyciu kontenerów wnioskowania modelu. Aby uzyskać dodatkowe przykłady, zobacz AWS Neuron Samples Repozytorium GitHub.


O autorach

AWS Inferentia2 opiera się na AWS Inferentia1, zapewniając 4x wyższą przepustowość i 10x mniejsze opóźnienia | Amazon Web Services PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.Samira Araújo jest architektem rozwiązań AI / ML w AWS. Pomaga klientom w tworzeniu rozwiązań AI / ML, które rozwiązują ich problemy biznesowe za pomocą AWS. Pracował nad kilkoma projektami AI / ML związanymi z wizją komputerową, przetwarzaniem języka naturalnego, prognozowaniem, ML na krawędzi i nie tylko. W wolnym czasie lubi bawić się projektami sprzętowymi i automatyki, a szczególnie interesuje go robotyka.

Znak czasu:

Więcej z Uczenie maszynowe AWS