Podczas wdrażania modeli głębokiego uczenia się na dużą skalę kluczowe znaczenie ma efektywne wykorzystanie podstawowego sprzętu w celu maksymalizacji wydajności i obniżenia kosztów. W przypadku obciążeń produkcyjnych wymagających dużej przepustowości i małych opóźnień wybór opcji Elastyczna chmura obliczeniowa Amazon (EC2), stos obsługujący model i architektura wdrażania są bardzo ważne. Nieefektywna architektura może prowadzić do nieoptymalnego wykorzystania akceleratorów i niepotrzebnie wysokich kosztów produkcji.
W tym poście przeprowadzimy Cię przez proces wdrażania serwerów modelowych FastAPI na urządzeniach AWS Inferentia (znajdujących się na Amazon EC2 Inf1 i Amazon EC Inf2 instancje). Pokazujemy również hostowanie przykładowego modelu, który jest wdrażany równolegle we wszystkich NeuronCores w celu maksymalnego wykorzystania sprzętu.
Omówienie rozwiązania
FastAPI to framework sieciowy typu open source do obsługi aplikacji Pythona, który jest znacznie szybszy niż tradycyjne frameworki, takie jak Flask i Django. Wykorzystuje Asynchroniczny interfejs bramy serwera (ASGI) zamiast powszechnie stosowanego Interfejs bramy serwera WWW (WSGI). ASGI przetwarza przychodzące żądania asynchronicznie, w przeciwieństwie do WSGI, który przetwarza żądania sekwencyjnie. To sprawia, że FastAPI jest idealnym wyborem do obsługi żądań wrażliwych na opóźnienia. Możesz użyć FastAPI do wdrożenia serwera, który obsługuje punkt końcowy w instancjach Inferentia (Inf1/Inf2), który nasłuchuje żądań klientów przez wyznaczony port.
Naszym celem jest osiągnięcie najwyższej wydajności przy najniższych kosztach poprzez maksymalne wykorzystanie sprzętu. Dzięki temu możemy obsłużyć więcej żądań wnioskowania przy mniejszej liczbie akceleratorów. Każde urządzenie AWS Inferentia1 zawiera cztery NeuronCores-v1, a każde urządzenie AWS Inferentia2 zawiera dwa NeuronCores-v2. The Neuron AWS SDK pozwala nam wykorzystywać równolegle każdy z NeuronCores, co daje nam większą kontrolę nad ładowaniem i równoległym wnioskowaniem czterech lub więcej modeli bez utraty przepustowości.
Dzięki FastAPI masz do wyboru serwer sieciowy Pythona (pistolet, Uvicorn, Hiperkukurydza, Daphne). Te serwery sieci Web zapewniają warstwę abstrakcji na podstawie podstawowego modelu uczenia maszynowego (ML). Żądający klient ma tę zaletę, że jest nieświadomy hostowanego modelu. Klient nie musi znać nazwy modelu ani wersji, która została wdrożona na serwerze; nazwa punktu końcowego jest teraz tylko proxy dla funkcji, która ładuje i uruchamia model. Natomiast w narzędziu obsługującym specyficznym dla platformy, takim jak TensorFlow Serving, nazwa i wersja modelu są częścią nazwy punktu końcowego. Jeśli model zmieni się po stronie serwera, klient musi znać i odpowiednio zmienić swoje wywołanie API na nowy punkt końcowy. Dlatego też, jeśli stale ewoluujesz modele wersji, na przykład w przypadku testów A/B, korzystanie z ogólnego serwera WWW Pythona z FastAPI jest wygodnym sposobem obsługi modeli, ponieważ nazwa punktu końcowego jest statyczna.
Rolą serwera ASGI jest tworzenie określonej liczby procesów roboczych, które nasłuchują żądań klientów i uruchamiają kod wnioskowania. Ważną funkcją serwera jest upewnienie się, że żądana liczba pracowników jest dostępna i aktywna. W przypadku zabicia pracownika serwer musi uruchomić nowego pracownika. W tym kontekście serwer i procesy robocze mogą być identyfikowane przez identyfikator procesu Unix (PID). W tym poście używamy a Hiperkukurydza server, który jest popularnym wyborem dla serwerów sieciowych Pythona.
W tym poście dzielimy się najlepszymi praktykami wdrażania modeli głębokiego uczenia z FastAPI na AWS Inferentia NeuronCores. Pokazujemy, że można wdrożyć wiele modeli na oddzielnych NeuronCores, które można wywoływać jednocześnie. Ta konfiguracja zwiększa przepustowość, ponieważ wiele modeli można wywnioskować jednocześnie, a wykorzystanie NeuronCore jest w pełni zoptymalizowane. Kod można znaleźć na stronie GitHub repo. Poniższy rysunek przedstawia architekturę konfigurowania rozwiązania w instancji EC2 Inf2.
Ta sama architektura dotyczy typu instancji EC2 Inf1, z wyjątkiem tego, że ma cztery rdzenie. To trochę zmienia schemat architektury.
rdzenie neuronowe AWS Inferentia
Zagłębmy się nieco w narzędzia dostarczone przez AWS Neuron, aby zaangażować się w NeuronCores. W poniższych tabelach przedstawiono liczbę NeuronCores w każdym typie instancji Inf1 i Inf2. Procesory wirtualne hosta i pamięć systemowa są współdzielone przez wszystkie dostępne NeuronCore.
Rozmiar instancji | # Akceleratory Inferentii | # NeuronCores-v1 | vCPU | Pamięć (GiB) |
Inf1.xlarge | 1 | 4 | 4 | 8 |
Inf1.2xduży | 1 | 4 | 8 | 16 |
Inf1.6xduży | 4 | 16 | 24 | 48 |
Inf1.24xduży | 16 | 64 | 96 | 192 |
Rozmiar instancji | # Akceleratory Inferentii | # NeuronCores-v2 | vCPU | Pamięć (GiB) |
Inf2.xlarge | 1 | 2 | 4 | 32 |
Inf2.8xduży | 1 | 2 | 32 | 32 |
Inf2.24xduży | 6 | 12 | 96 | 192 |
Inf2.48xduży | 12 | 24 | 192 | 384 |
Instancje Inf2 zawierają nowe NeuronCores-v2 w porównaniu z NeuronCore-v1 w instancjach Inf1. Pomimo mniejszej liczby rdzeni są w stanie zaoferować 4x wyższą przepustowość i 10x mniejsze opóźnienia niż instancje Inf1. Instancje Inf2 są idealne dla obciążeń związanych z uczeniem głębokim, takich jak generatywna sztuczna inteligencja, duże modele językowe (LLM) w rodzinie OPT/GPT i transformatory wizyjne, takie jak stabilna dyfuzja.
Neuron Runtime odpowiada za uruchamianie modeli na urządzeniach Neuron. Neuron Runtime określa, który NeuronCore będzie obsługiwał dany model i jak go uruchomić. Konfiguracja Neuron Runtime jest kontrolowana za pomocą zmienne środowiskowe na poziomie procesu. Domyślnie rozszerzenia frameworka Neuron zajmą się konfiguracją Neuron Runtime w imieniu użytkownika; jednak możliwe są również jawne konfiguracje w celu uzyskania bardziej zoptymalizowanego zachowania.
Dwie popularne zmienne środowiskowe to NEURON_RT_NUM_CORES
i NEURON_RT_VISIBLE_CORES
. Dzięki tym zmiennym środowiskowym procesy Pythona można powiązać z NeuronCore. Z NEURON_RT_NUM_CORES
, określona liczba rdzeni może być zarezerwowana dla procesu i z NEURON_RT_VISIBLE_CORES
, można zarezerwować szereg NeuronCores. Na przykład, NEURON_RT_NUM_CORES=2 myapp.py
zarezerwuje dwa rdzenie i NEURON_RT_VISIBLE_CORES=’0-2’ myapp.py
zarezerwuje zero, jeden i dwa rdzenie dla myapp.py
. Możesz również rezerwować NeuronCores na różnych urządzeniach (chipy AWS Inferentia). Więc, NEURON_RT_VISIBLE_CORES=’0-5’ myapp.py
zarezerwuje pierwsze cztery rdzenie device1
i włączony jeden rdzeń device2
w typie instancji Ec2 Inf1. Podobnie w przypadku typu instancji EC2 Inf2 ta konfiguracja rezerwuje dwa rdzenie device1
i device2
i włączony jeden rdzeń device3
. Poniższa tabela podsumowuje konfigurację tych zmiennych.
Imię | Opis | Rodzaj Nieruchomości | Oczekiwane wartości | Domyślna wartość | Wersja RT |
NEURON_RT_VISIBLE_CORES |
Zakres określonych NeuronCores potrzebnych procesowi | Zakres liczb całkowitych (np. 1-3) | Dowolna wartość lub zakres od 0 do Max NeuronCore w systemie | żaden | 2.0 + |
NEURON_RT_NUM_CORES |
Liczba NeuronCores wymaganych przez proces | Liczba całkowita | Wartość od 1 do Max NeuronCore w systemie | 0, co jest interpretowane jako „wszystko” | 2.0 + |
Aby uzyskać listę wszystkich zmiennych środowiskowych, zobacz Konfiguracja środowiska wykonawczego neuronu.
Domyślnie podczas ładowania modeli modele są ładowane do NeuronCore 0, a następnie do NeuronCore 1, o ile nie zostało to wyraźnie określone w poprzednich zmiennych środowiskowych. Jak określono wcześniej, NeuronCore współdzielą dostępne procesory wirtualne hosta i pamięć systemową. Dlatego modele wdrożone na każdym NeuronCore będą konkurować o dostępne zasoby. Nie będzie to problemem, jeśli model w dużym stopniu wykorzystuje NeuronCores. Ale jeśli model działa tylko częściowo na NeuronCore, a reszta na vCPU hosta, ważne staje się rozważenie dostępności procesora na NeuronCore. Wpływa to również na wybór instancji.
W poniższej tabeli przedstawiono liczbę procesorów wirtualnych hosta i pamięci systemowej dostępnych na model, jeśli jeden model został wdrożony dla każdego NeuronCore. W zależności od użycia NeuronCore przez aplikację, vCPU i użycia pamięci, zaleca się przeprowadzenie testów, aby dowiedzieć się, która konfiguracja jest najbardziej wydajna dla Twojej aplikacji. The Narzędzie Neuron Top może pomóc w wizualizacji wykorzystania rdzenia oraz wykorzystania pamięci urządzenia i hosta. Na podstawie tych wskaźników można podjąć świadomą decyzję. Na końcu tego bloga demonstrujemy użycie Neuron Top.
Rozmiar instancji | # Akceleratory Inferentii | # Modele | vCPU/model | Pamięć/Model (GiB) |
Inf1.xlarge | 1 | 4 | 1 | 2 |
Inf1.2xduży | 1 | 4 | 2 | 4 |
Inf1.6xduży | 4 | 16 | 1.5 | 3 |
Inf1.24xduży | 16 | 64 | 1.5 | 3 |
Rozmiar instancji | # Akceleratory Inferentii | # Modele | vCPU/model | Pamięć/Model (GiB) |
Inf2.xlarge | 1 | 2 | 2 | 8 |
Inf2.8xduży | 1 | 2 | 16 | 64 |
Inf2.24xduży | 6 | 12 | 8 | 32 |
Inf2.48xduży | 12 | 24 | 8 | 32 |
Aby samodzielnie przetestować funkcje Neuron SDK, zapoznaj się z najnowszymi Możliwości neuronów dla PyTorch.
Ustawienia systemu
Poniżej przedstawiono konfigurację systemu zastosowaną w tym rozwiązaniu:
Skonfiguruj rozwiązanie
Jest kilka rzeczy, które musimy zrobić, aby skonfigurować rozwiązanie. Zacznij od utworzenia roli IAM, którą przyjmie Twoja instancja EC2, która umożliwi jej wypychanie i ciągnięcie Rejestr elastycznego pojemnika Amazon.
Krok 1: Skonfiguruj rolę IAM
- Zacznij od zalogowania się do konsoli i uzyskania dostępu do IAM > Role > Utwórz rolę
- Wybierz typ zaufanego podmiotu
AWS Service
- Wybierz EC2 jako usługę w przypadku użycia
- Kliknij Następna i zobaczysz wszystkie dostępne zasady
- Na potrzeby tego rozwiązania nadamy naszej instancji EC2 pełny dostęp do ECR. Filtruj dla AmazonEC2ContainerRegistryFullAccess i wybierz go.
- Naciśnij Dalej i nazwij rolę
inf-ecr-access
Uwaga: załączona przez nas polityka zapewnia instancji EC2 pełny dostęp do Amazon ECR. Gorąco zachęcamy do śledzenia dyrektor najmniej uprzywilejowanych dla obciążeń produkcyjnych.
Krok 2: Skonfiguruj AWS CLI
Jeśli korzystasz z zalecanego Deep Learning AMI wymienionego powyżej, jest on dostarczany z zainstalowanym interfejsem AWS CLI. Jeśli używasz innego systemu AMI (Amazon Linux 2023, Base Ubuntu itp.), zainstaluj narzędzia CLI, wykonując następujące czynności ten przewodnik.
Po zainstalowaniu narzędzi CLI skonfiguruj interfejs CLI za pomocą polecenia aws configure
. Jeśli masz klucze dostępu, możesz je tutaj dodać, ale niekoniecznie są potrzebne do interakcji z usługami AWS. W tym celu polegamy na rolach IAM.
Note: Musimy wprowadzić co najmniej jedną wartość (domyślny region lub domyślny format), aby utworzyć domyślny profil. W tym przykładzie idziemy z us-east-2
jako region i json
jako domyślne wyjście.
Sklonuj repozytorium Github
Połączenia GitHub repo zapewnia wszystkie skrypty niezbędne do wdrożenia modeli przy użyciu FastAPI na NeuronCores na instancjach AWS Inferentia. W tym przykładzie zastosowano kontenery Docker, aby upewnić się, że możemy tworzyć rozwiązania wielokrotnego użytku. Zawarte w tym przykładzie jest następujące właściwości.konfiguracji plik dla użytkowników w celu wprowadzenia danych wejściowych.
Plik konfiguracyjny wymaga zdefiniowanych przez użytkownika prefiksów nazw dla obrazu Docker i kontenerów Docker. The build.sh
skrypt w fastapi
i trace-model
foldery używają tego do tworzenia obrazów platformy Docker.
Skompiluj model na AWS Inferentia
Zaczniemy od prześledzenia modelu i utworzenia pliku PyTorch Torchscript .pt. Zacznij od uzyskania dostępu trace-model
katalogu i modyfikując plik .env. W zależności od wybranego typu instancji zmodyfikuj plik CHIP_TYPE
w ciągu .env
plik. Jako przykład wybierzemy Inf2 jako przewodnik. Te same kroki dotyczą procesu wdrażania dla Inf1.
Następnie ustaw domyślny region w tym samym pliku. Ten region zostanie użyty do utworzenia repozytorium ECR, a obrazy Dockera zostaną wypchnięte do tego repozytorium. Również w tym folderze udostępniamy wszystkie skrypty niezbędne do śledzenia bert-base-uncased
model na AWS Inferentia. Tego skryptu można użyć dla większości modeli dostępnych na Przytulanie Twarzy, Dockerfile ma wszystkie zależności do uruchamiania modeli z Neuron i uruchamia model śledzenia.py kod jako punkt wejścia.
Wyjaśnienie kompilacji neuronów
API Neuron SDK bardzo przypomina API Pythona PyTorch. The torch.jit.trace()
z PyTorch przyjmuje model i przykładowy tensor wejściowy jako argumenty. Przykładowe dane wejściowe są podawane do modelu, a operacje, które są wywoływane, gdy dane wejściowe przechodzą przez warstwy modelu, są rejestrowane jako TorchScript. Aby dowiedzieć się więcej o śledzeniu JIT w PyTorch, zapoznaj się z poniższymi informacjami dokumentacja.
Tak jak torch.jit.trace()
, możesz sprawdzić, czy Twój model może zostać skompilowany na AWS Inferentia z następującym kodem dla instancji inf1.
Dla inf2 wywoływana jest biblioteka torch_neuronx
. Oto, jak możesz przetestować kompilację modelu pod kątem instancji inf2.
Po utworzeniu instancji śledzenia możemy przekazać przykładowe dane wejściowe tensora w następujący sposób:
I na koniec zapisz wynikowe wyjście TorchScript na dysku lokalnym
Jak pokazano w powyższym kodzie, możesz użyć compiler_args
i optimizations
aby zoptymalizować wdrożenie. Aby uzyskać szczegółową listę argumentów za torch.neuron.trace
API, patrz PyTorch-Neuron śledzi API Pythona.
Pamiętaj o następujących ważnych kwestiach:
- W chwili pisania tego tekstu Neuron SDK nie obsługuje dynamicznych kształtów tensorowych. Dlatego model będzie musiał zostać skompilowany oddzielnie dla różnych kształtów wejściowych. Aby uzyskać więcej informacji na temat uruchamiania wnioskowania na temat kształtów zmiennych wejściowych z wykorzystaniem segmentów, zobacz Uruchamianie wnioskowania na temat zmiennych kształtów wejściowych z segmentowaniem.
- Jeśli napotkasz problemy z pamięcią podczas kompilowania modelu, spróbuj skompilować model na instancji AWS Inferentia z większą liczbą procesorów wirtualnych lub pamięci, a nawet dużą instancją c6i lub r6i, ponieważ kompilacja wykorzystuje tylko procesory. Po skompilowaniu śledzony model można prawdopodobnie uruchomić na mniejszych rozmiarach instancji AWS Inferentia.
Wyjaśnienie procesu budowania
Teraz zbudujemy ten kontener, uruchamiając build.sh. Plik skryptu kompilacji po prostu tworzy obraz Dockera, pobierając podstawowy obraz kontenera Deep Learning i instalując HuggingFace transformers
pakiet. Na podstawie CHIP_TYPE
określone w .env
plik, plik docker.properties
Plik decyduje o właściwym BASE_IMAGE
, To BASE_IMAGE
wskazuje na obraz kontenera Deep Learning dla środowiska wykonawczego Neuron dostarczony przez AWS.
Jest dostępny poprzez prywatne repozytorium ECR. Zanim będziemy mogli pobrać obraz, musimy się zalogować i uzyskać tymczasowe poświadczenia AWS.
Note: musimy zastąpić region wymieniony w poleceniu określonym przez flagę regionu i w URI repozytorium regionem, który umieściliśmy w .env plik.
W celu ułatwienia tego procesu możemy skorzystać z tzw fetch-credentials.sh
plik. Region zostanie automatycznie pobrany z pliku .env.
Następnie wypchniemy obraz za pomocą skryptu push.sh. Skrypt push tworzy dla Ciebie repozytorium w Amazon ECR i przekazuje obraz kontenera.
Wreszcie, kiedy obraz jest zbudowany i wypchnięty, możemy uruchomić go jako kontener, uruchamiając biegnij i dzienniki biegu z ogonem logi.sh. W dziennikach kompilatora (patrz poniższy zrzut ekranu) zobaczysz procent operatorów arytmetycznych skompilowanych na Neuronie i procent podwykresów modelu pomyślnie skompilowanych na Neuronie. Zrzut ekranu pokazuje dzienniki kompilatora dla bert-base-uncased-squad2
Model. Logi pokazują, że 95.64% operatorów arytmetycznych zostało skompilowanych, a także zawiera listę operatorów, które zostały skompilowane na Neuronie i tych, które nie są obsługiwane.
Oto lista wszystkich obsługiwanych operatorów w najnowszym pakiecie PyTorch Neuron. Podobnie, oto lista wszystkich obsługiwanych operatorów w najnowszym pakiecie PyTorch Neuronx.
Wdrażaj modele za pomocą FastAPI
Po skompilowaniu modeli prześledzony model będzie obecny w pliku trace-model
teczka. W tym przykładzie umieściliśmy śledzony model dla partii o wielkości 1. Rozważamy tu partię o wielkości 1, aby uwzględnić te przypadki użycia, w których większy rozmiar partii nie jest wykonalny lub wymagany. W przypadkach użycia, w których potrzebne są większe rozmiary partii, latarka.neuron.DataParallel (dla Inf1) lub latarka.neuronx.DataParallel (dla Inf2) API też może być przydatne.
Połączenia szybkie API zawiera wszystkie niezbędne skrypty do wdrażania modeli z FastAPI. Aby wdrożyć modele bez żadnych zmian, wystarczy uruchomić plik wdrożyć.sh i zbuduje obraz kontenera FastAPI, uruchomi kontenery na określonej liczbie rdzeni i wdroży określoną liczbę modeli na serwer na każdym serwerze modelu FastAPI. Ten folder zawiera również plik .env
plik, zmodyfikuj go, aby odzwierciedlał poprawność CHIP_TYPE
i AWS_DEFAULT_REGION
.
Note: Skrypty FastAPI opierają się na tych samych zmiennych środowiskowych, które są używane do tworzenia, wypychania i uruchamiania obrazów jako kontenerów. Skrypty wdrażania FastAPI będą używać ostatnich znanych wartości z tych zmiennych. Tak więc, jeśli prześledziłeś model dla typu instancji Inf1 jako ostatni, ten model zostanie wdrożony za pomocą tych skryptów.
Połączenia fastapi-server.py który jest odpowiedzialny za hostowanie serwera i wysyłanie żądań do modelu wykonuje następujące czynności:
- Odczytuje liczbę modeli na serwer i lokalizację skompilowanego modelu z pliku właściwości
- Ustawia widoczne NeuronCores jako zmienne środowiskowe w kontenerze Docker i odczytuje zmienne środowiskowe, aby określić, których NeuronCores użyć
- Udostępnia interfejs API wnioskowania dla
bert-base-uncased-squad2
model - Z
jit.load()
, ładuje liczbę modeli na serwer określoną w konfiguracji i przechowuje modele oraz wymagane tokenizery w globalnych słownikach
Dzięki tej konfiguracji stosunkowo łatwo byłoby skonfigurować interfejsy API, które wymieniają modele i liczbę modeli przechowywanych w każdym NeuronCore. Podobnie można napisać interfejsy API, aby usuwać modele z określonych NeuronCores.
Połączenia Dockerfile do budowania kontenerów FastAPI jest zbudowany na obrazie Dockera, który stworzyliśmy do śledzenia modeli. To dlatego docker.właściwości plik określa ścieżkę ECR do obrazu platformy Docker w celu śledzenia modeli. W naszej konfiguracji kontenery Docker we wszystkich NeuronCore są podobne, więc możemy zbudować jeden obraz i uruchamiać wiele kontenerów z jednego obrazu. Aby uniknąć błędów punktu wejścia, określamy ENTRYPOINT ["/usr/bin/env"]
w pliku Dockerfile przed uruchomieniem pliku startup.sh
skrypt, który wygląda jak hypercorn fastapi-server:app -b 0.0.0.0:8080
. Ten skrypt startowy jest taki sam dla wszystkich kontenerów. Jeśli używasz tego samego obrazu podstawowego, co w przypadku modeli śledzenia, możesz skompilować ten kontener, po prostu uruchamiając skrypt build.sh. The push.sh
skrypt pozostaje taki sam jak poprzednio dla modeli śledzenia. Zmodyfikowany obraz platformy Docker i nazwa kontenera są dostarczane przez docker.properties
plik.
Połączenia run.sh file
wykonuje następujące czynności:
- Odczytuje obraz platformy Docker i nazwę kontenera z pliku niska zabudowa plik, który z kolei odczytuje plik
config.properties
plik, który manum_cores
ustawienia użytkownika - Rozpoczyna pętlę od 0 do
num_cores
i dla każdego rdzenia:- Ustawia numer portu i numer urządzenia
- Ustawia
NEURON_RT_VISIBLE_CORES
zmienna środowiskowa - Określa podłączenie woluminu
- Uruchamia kontener Docker
Dla jasności polecenie Docker run do wdrożenia w NeuronCore 0 dla Inf1 wyglądałoby jak następujący kod:
Polecenie uruchomienia do wdrożenia w NeuronCore 5 wyglądałoby jak następujący kod:
Po wdrożeniu kontenerów używamy run_apis.py skrypt, który wywołuje interfejsy API w równoległych wątkach. Kod jest skonfigurowany tak, aby wywołać sześć wdrożonych modeli, po jednym na każdym NeuronCore, ale można go łatwo zmienić na inne ustawienie. API wywołujemy od strony klienta w następujący sposób:
Monitoruj NeuronCore
Po wdrożeniu serwerów modelowych do monitorowania wykorzystania NeuronCore możemy użyć neuron-top
obserwować w czasie rzeczywistym procent wykorzystania każdego NeuronCore. wierzchołek neuronu to narzędzie CLI w Neuron SDK, które dostarcza informacji, takich jak NeuronCore, vCPU i wykorzystanie pamięci. W osobnym terminalu wpisz następującą komendę:
Dane wyjściowe powinny być podobne do poniższego rysunku. W tym scenariuszu określiliśmy użycie dwóch NeuronCores i dwóch modeli na serwer w instancji Inf2.xlarge. Poniższy zrzut ekranu pokazuje, że dwa modele o rozmiarze 287.8 MB każdy są załadowane na dwa NeuronCores. Po załadowaniu łącznie 4 modeli widać, że używana pamięć urządzenia wynosi 1.3 GB. Użyj klawiszy strzałek, aby poruszać się między NeuronCore na różnych urządzeniach
Podobnie w instancji typu Inf1.16xlarge widzimy łącznie załadowanych 12 modeli (2 modele na rdzeń na 6 rdzeni). Całkowite zużycie pamięci wynosi 2.1 GB, a każdy model ma rozmiar 177.2 MB.
Po uruchomieniu run_apis.py skrypt, możesz zobaczyć procent wykorzystania każdego z sześciu NeuronCores (patrz poniższy zrzut ekranu). Możesz także zobaczyć użycie procesora wirtualnego systemu i użycie procesora wirtualnego w czasie wykonywania.
Poniższy zrzut ekranu pokazuje procent użycia rdzenia instancji Inf2.
Podobnie ten zrzut ekranu pokazuje wykorzystanie rdzenia w instancji typu inf1.6xlarge.
Sprzątać
Aby wyczyścić wszystkie utworzone przez Ciebie kontenery Docker, udostępniamy plik sprzątanie.sh skrypt, który usuwa wszystkie uruchomione i zatrzymane kontenery. Ten skrypt usunie wszystkie kontenery, więc nie używaj go, jeśli chcesz, aby niektóre kontenery działały.
Wnioski
Obciążenia produkcyjne często mają wysoką przepływność, małe opóźnienia i wymagania dotyczące kosztów. Niewydajne architektury, które nieoptymalnie wykorzystują akceleratory, mogą prowadzić do niepotrzebnie wysokich kosztów produkcji. W tym poście pokazaliśmy, jak optymalnie wykorzystać NeuronCores z FastAPI, aby zmaksymalizować przepustowość przy minimalnym opóźnieniu. Opublikowaliśmy instrukcje na naszej stronie GitHub repo. Dzięki tej architekturze rozwiązania można wdrożyć wiele modeli w każdym NeuronCore i obsługiwać wiele modeli równolegle w różnych NeuronCore bez utraty wydajności. Aby uzyskać więcej informacji na temat wdrażania modeli na dużą skalę za pomocą usług takich jak Elastyczna usługa Amazon Kubernetes (Amazon EKS), patrz Obsługuj 3,000 modeli głębokiego uczenia się na Amazon EKS z AWS Inferentia za mniej niż 50 USD za godzinę.
O autorach
Ankur Śrivastava jest starszym architektem rozwiązań w zespole ML Frameworks. Koncentruje się na pomaganiu klientom w samodzielnym, rozproszonym szkoleniu i wnioskowaniu na dużą skalę na temat AWS. Jego doświadczenie obejmuje przemysłową konserwację predykcyjną, cyfrowe bliźniaki, probabilistyczną optymalizację projektu. Ukończył studia doktoranckie na wydziale inżynierii mechanicznej na Rice University oraz badania podoktoranckie na Massachusetts Institute of Technology.
KC Tung jest starszym architektem rozwiązań w AWS Annapurna Labs. Specjalizuje się w szkoleniu i wdrażaniu modeli głębokiego uczenia na dużą skalę w chmurze. Posiada stopień doktora. w dziedzinie biofizyki molekularnej z University of Texas Southwestern Medical Center w Dallas. Przemawiał na AWS Summits i AWS Reinvent. Dziś pomaga klientom trenować i wdrażać duże modele PyTorch i TensorFlow w chmurze AWS. Jest autorem dwóch książek: Poznaj TensorFlow Enterprise i Odniesienie do kieszeni TensorFlow 2.
Pronoya Chopry jest starszym architektem rozwiązań w zespole Startups Generative AI w AWS. Specjalizuje się w architekturze i rozwoju rozwiązań IoT i Machine Learning. W przeszłości był współzałożycielem dwóch startupów i lubi mieć bezpośredni kontakt z projektami z zakresu IoT, AI/ML i Serverless.
- Dystrybucja treści i PR oparta na SEO. Uzyskaj wzmocnienie już dziś.
- PlatoData.Network Pionowe generatywne AI. Wzmocnij się. Dostęp tutaj.
- PlatoAiStream. Inteligencja Web3. Wiedza wzmocniona. Dostęp tutaj.
- PlatonESG. Motoryzacja / pojazdy elektryczne, Węgiel Czysta technologia, Energia, Środowisko, Słoneczny, Gospodarowanie odpadami. Dostęp tutaj.
- Przesunięcia bloków. Modernizacja własności offsetu środowiskowego. Dostęp tutaj.
- Źródło: https://aws.amazon.com/blogs/machine-learning/optimize-aws-inferentia-utilization-with-fastapi-and-pytorch-models-on-amazon-ec2-inf1-inf2-instances/
- :ma
- :Jest
- :nie
- :Gdzie
- $W GÓRĘ
- 000
- 1
- 1.3
- 10
- 100
- 12
- 13
- 15%
- 2023
- 7
- 8
- 91
- a
- Zdolny
- O nas
- powyżej
- abstrakcja
- akceleratory
- dostęp
- Dostęp
- odpowiednio
- Konto
- Osiągać
- w poprzek
- aktywny
- Dodaj
- przed
- AI
- AI / ML
- Wszystkie kategorie
- dopuszczać
- pozwala
- również
- Amazonka
- Amazon EC2
- Amazon Web Services
- an
- i
- każdy
- api
- Pszczoła
- Aplikacja
- Zastosowanie
- aplikacje
- Aplikuj
- właściwy
- architektura
- SĄ
- argumenty
- AS
- założyć
- At
- autor
- automatycznie
- dostępność
- dostępny
- uniknąć
- AWS
- Inferencja AWS
- baza
- na podstawie
- BE
- bo
- stają się
- być
- zanim
- w imieniu
- zachowanie
- jest
- korzyści
- Korzyści
- BEST
- Najlepsze praktyki
- pomiędzy
- Biofizyka
- Bit
- Blog
- Książki
- budować
- Budowanie
- wybudowany
- ale
- by
- wezwanie
- nazywa
- Połączenia
- CAN
- możliwości
- zdolność
- który
- walizka
- Etui
- Centrum
- zmiana
- zmieniony
- Zmiany
- ZOBACZ
- Frytki
- wybór
- Dodaj
- wybrał
- klarowność
- klient
- dokładnie
- Chmura
- kod
- byliśmy spójni, od początku
- porównanie
- rywalizować
- Zakończony
- obliczać
- systemu
- Rozważać
- wobec
- Konsola
- spożywane
- zawierać
- Pojemnik
- Pojemniki
- zawiera
- kontekst
- bez przerwy
- kontrast
- kontrola
- kontrolowanych
- Wygodny
- rdzeń
- skorygowania
- Koszty:
- Koszty:
- mógłby
- Para
- Stwórz
- stworzony
- tworzy
- Tworzenie
- Listy uwierzytelniające
- istotny
- Klientów
- Dallas
- decyzja
- głęboko
- głęboka nauka
- głębiej
- Domyślnie
- wykazać
- W zależności
- rozwijać
- wdrażane
- wdrażanie
- Wdrożenie
- Wnętrze
- wyznaczony
- Mimo
- szczegółowe
- określa
- rozwijanie
- urządzenie
- urządzenia
- różne
- Transmitowanie
- KOPAĆ
- cyfrowy
- Cyfrowe bliźniaki
- dystrybuowane
- szkolenia rozproszone
- Django
- do
- Doker
- robi
- Nie
- domena
- nie
- dynamiczny
- każdy
- Wcześniej
- łatwiej
- z łatwością
- łatwo
- EC
- faktycznie
- zakończenia
- Punkt końcowy
- zobowiązany
- Inżynieria
- zapewnić
- Wchodzę
- jednostka
- wejście
- Środowisko
- Błędy
- itp
- Parzyste
- Każdy
- ewoluuje
- przykład
- Z wyjątkiem
- doświadczenie
- rozszerzenia
- Twarz
- członków Twojej rodziny
- szybciej
- wykonalny
- Korzyści
- nakarmiony
- mniej
- Postać
- filet
- filtrować
- W końcu
- Znajdź
- i terminów, a
- koncentruje
- następujący
- następujący sposób
- W razie zamówieenia projektu
- format
- znaleziono
- cztery
- Framework
- Ramy
- od
- pełny
- w pełni
- funkcjonować
- Bramka
- generatywny
- generatywna sztuczna inteligencja
- otrzymać
- GitHub
- Dać
- daje
- Globalne
- będzie
- poprowadzi
- uchwyt
- hands-on
- sprzęt komputerowy
- Have
- he
- pomoc
- pomoc
- pomaga
- tutaj
- Wysoki
- wyższy
- Najwyższa
- jego
- gospodarz
- hostowane
- Hosting
- gospodarze
- W jaki sposób
- How To
- Jednak
- HTML
- http
- HTTPS
- Przytulanie twarzy
- ID
- idealny
- zidentyfikowane
- if
- obraz
- zdjęcia
- importować
- ważny
- in
- włączony
- obejmuje
- Przybywający
- Zwiększenia
- przemysłowy
- niewydajny
- Informacja
- poinformowany
- wkład
- Wejścia
- zainstalować
- zainstalowany
- Instalacja
- przykład
- zamiast
- Instytut
- instrukcje
- interakcji
- najnowszych
- przywołany
- Internet przedmiotów
- problem
- problemy
- IT
- JEGO
- JIT
- jpg
- właśnie
- Trzymać
- Klawisze
- Wiedzieć
- znany
- Labs
- język
- duży
- Nazwisko
- Utajenie
- firmy
- uruchomić
- warstwa
- nioski
- prowadzić
- UCZYĆ SIĘ
- nauka
- poziom
- Biblioteka
- lubić
- linux
- Lista
- Katalogowany
- mało
- trochę głębiej
- LLM
- załadunek
- masa
- miejscowy
- lokalizacja
- zalogowaniu
- Zaloguj Się
- Popatrz
- wygląda jak
- WYGLĄD
- utraty
- niski
- niższy
- najniższy
- maszyna
- uczenie maszynowe
- zrobiony
- konserwacja
- robić
- WYKONUJE
- Dokonywanie
- wiele
- massachusetts
- Instytut Technologii w Massachusetts
- max
- Maksymalizuj
- maksymalny
- Może..
- mechaniczny
- medyczny
- Pamięć
- Metryka
- nic
- minimum
- ML
- model
- modele
- zmodyfikowano
- modyfikować
- Cząsteczkowa
- monitor
- jeszcze
- większość
- ruch
- dużo
- wielokrotność
- musi
- Nazwa
- koniecznie
- niezbędny
- Potrzebować
- potrzebne
- wymagania
- Nowości
- Następny
- już dziś
- numer
- cel
- obserwować
- of
- oferta
- często
- on
- pewnego razu
- ONE
- tylko
- na
- open source
- działać
- operacje
- operatorzy
- przeciwny
- optymalizacja
- Optymalizacja
- zoptymalizowane
- or
- ludzkiej,
- na zewnątrz
- wydajność
- koniec
- pakiet
- Parallel
- część
- przechodzić
- Przeszłość
- ścieżka
- dla
- procent
- jest gwarancją najlepszej jakości, które mogą dostarczyć Ci Twoje monitory,
- plato
- Analiza danych Platona
- PlatoDane
- punkt
- zwrotnica
- polityka
- polityka
- Popularny
- możliwy
- Post
- praktyki
- teraźniejszość
- prywatny
- prawdopodobnie
- wygląda tak
- procesów
- produkcji
- Produkcja
- Profil
- projektowanie
- niska zabudowa
- zapewniać
- pod warunkiem,
- zapewnia
- pełnomocnik
- opublikowany
- ciągnięcie
- cel
- Naciskać
- popychany
- wypycha
- położyć
- Python
- płomień
- zasięg
- real
- w czasie rzeczywistym
- polecić
- Zalecana
- nagrany
- odzwierciedlić
- region
- stosunkowo
- polegać
- opierając się
- szczątki
- usunąć
- obsługi produkcji rolnej, która zastąpiła
- składnica
- wywołań
- wymagany
- wymagania
- Badania naukowe
- przypomina
- rezerwować
- zarezerwowany
- Zasoby
- odpowiedź
- odpowiedzialny
- REST
- wynikły
- wielokrotnego użytku
- Ryż
- Rola
- role
- run
- bieganie
- działa
- poświęcanie
- taki sam
- Zapisz
- Skala
- scenariusz
- skrypty
- Sdk
- widzieć
- wybór
- wysyłanie
- senior
- wrażliwy
- oddzielny
- Bezserwerowe
- Serwery
- usługa
- Usługi
- służąc
- zestaw
- ustawienie
- ustawienie
- kształty
- Share
- shared
- powinien
- pokazać
- pokazał
- pokazane
- Targi
- bok
- podobny
- Podobnie
- po prostu
- SIX
- Rozmiar
- rozmiary
- mniejszy
- So
- rozwiązanie
- Rozwiązania
- kilka
- specjalizuje się
- specyficzny
- określony
- mówiony
- stabilny
- stos
- początek
- startup
- Startups
- stwierdził,
- Cel
- zatrzymany
- przechowywany
- sklep
- strongly
- badania naukowe
- Z powodzeniem
- taki
- Szczyty
- wsparcie
- Utrzymany
- pewnie
- system
- stół
- Brać
- Zadania
- trwa
- zespół
- Technologia
- tymczasowy
- tensorflow
- terminal
- test
- Testowanie
- Testy
- texas
- niż
- że
- Połączenia
- ich
- Im
- następnie
- w związku z tym
- Te
- one
- rzeczy
- to
- tych
- Przez
- wydajność
- Związany
- czas
- do
- już dziś
- narzędzie
- narzędzia
- Top
- pochodnia
- Kwota produktów:
- Wyśledzić
- Rysunek kalkowy
- tradycyjny
- Pociąg
- Trening
- Transformatory
- zaufany
- próbować
- SKRĘCAĆ
- Bliźnięta
- drugiej
- rodzaj
- Ubuntu
- dla
- zasadniczy
- uniwersytet
- UNIX
- niepotrzebnie
- na
- us
- Stosowanie
- posługiwać się
- używany
- Użytkownik
- Użytkownicy
- zastosowania
- za pomocą
- wykorzystać
- wykorzystuje
- Wykorzystując
- wartość
- Wartości
- wersja
- początku.
- widoczny
- wizja
- Tom
- chcieć
- była
- Droga..
- we
- sieć
- serwer wWW
- usługi internetowe
- DOBRZE
- były
- jeśli chodzi o komunikację i motywację
- który
- dlaczego
- szeroko
- będzie
- w
- w ciągu
- bez
- pracownik
- pracowników
- by
- pisanie
- napisany
- You
- Twój
- siebie
- zefirnet
- zero