Jak Amazon Search obniżył koszty wnioskowania ML o 85% dzięki AWS Inferentia

Wyszukiwarka produktów Amazon indeksuje miliardy produktów, obsługuje setki milionów klientów na całym świecie i jest jedną z najczęściej używanych usług na świecie. Zespół Amazon Search opracowuje technologię uczenia maszynowego (ML), która napędza Amazon.com wyszukiwarka i pomaga klientom bez wysiłku wyszukiwać. Aby zapewnić doskonałą obsługę klienta i działać na masową skalę wymaganą przez Amazon.com w wyszukiwarce, ten zespół zawsze szuka sposobów na zbudowanie bardziej opłacalnych systemów z wymaganiami dotyczącymi opóźnień w czasie rzeczywistym i przepustowości. Zespół stale bada sprzęt i kompilatory zoptymalizowane pod kątem uczenia głębokiego w celu przyspieszenia uczenia modeli i wnioskowania, przy jednoczesnym obniżeniu ogólnych kosztów operacyjnych.

W tym poście opisujemy, w jaki sposób korzysta z wyszukiwarki Amazon Inferencja AWS, wysokowydajny akcelerator stworzony przez AWS w celu przyspieszenia obciążeń wnioskowania głębokiego uczenia. Zespół przeprowadza wnioskowanie ML o niskim opóźnieniu z modelami NLP opartymi na transformatorach na opartych na AWS Inferentia Elastyczna chmura obliczeniowa Amazon (Amazon EC2) Inf1 i pozwala zaoszczędzić do 85% kosztów infrastruktury przy zachowaniu dużej przepustowości i opóźnień.

Głębokie uczenie w celu przewidywania duplikatów i zamiarów zapytań

Przeszukiwanie Amazon Marketplace to wielozadaniowy, multimodalny problem, związany z kilkoma danymi wejściowymi, takimi jak ASIN (Amazon Standard Identification Number, 10-cyfrowy numer alfanumeryczny, który jednoznacznie identyfikuje produkty), obrazy produktów, opisy tekstowe i zapytania. Aby stworzyć dostosowane środowisko użytkownika, prognozy z wielu modeli są używane dla różnych aspektów wyszukiwania. Jest to wyzwanie, ponieważ system wyszukiwania ma tysiące modeli z dziesiątkami tysięcy transakcji na sekundę (TPS) w szczytowym obciążeniu. Skupiamy się na dwóch elementach tego doświadczenia:

  • Zduplikowane prognozy postrzegane przez klientów – Aby wyświetlić najbardziej odpowiednią listę produktów pasujących do zapytania użytkownika, ważne jest, aby zidentyfikować produkty, które klienci mają trudności z rozróżnieniem
  • Przewidywanie zamiaru zapytania – Aby dostosować stronę wyszukiwania i układ produktu, aby lepiej odpowiadały temu, czego szuka klient, ważne jest, aby przewidzieć intencję i typ zapytania użytkownika (na przykład zapytanie związane z mediami, zapytanie pomocy i inne typy zapytań)

Obie te prognozy są dokonywane przy użyciu architektur modelu Transformer, a mianowicie modeli opartych na BERT. W rzeczywistości oba mają ten sam model oparty na BERT jako podstawę, a każdy z nich nakłada głowę klasyfikacji / regresji na ten szkielet.

Zduplikowana prognoza przyjmuje różne cechy tekstowe dla pary ocenianych produktów jako dane wejściowe (takie jak typ produktu, tytuł, opis itd.) i jest obliczana okresowo dla dużych zestawów danych. Ten model jest trenowany od początku do końca w sposób wielozadaniowy. Praca w Amazon SageMaker Przetwarzanie są używane do okresowego uruchamiania tych obciążeń wsadowych w celu zautomatyzowania ich uruchamiania i płacenia tylko za wykorzystany czas przetwarzania. W przypadku tego przypadku użycia obciążenia wsadowego wymaganie dotyczące przepustowości wnioskowania wynosiło łącznie 8,800 TPS.

Przewidywanie zamiarów przyjmuje tekstowe zapytanie użytkownika jako dane wejściowe i jest potrzebne w czasie rzeczywistym, aby dynamicznie obsługiwać codzienny ruch i poprawiać wrażenia użytkownika na Amazon Marketplace. Model jest szkolony w celu klasyfikacji wieloklasowej. Ten model jest następnie wdrażany w Usługa Amazon Elastic Container Service (Amazon ECS), który umożliwia szybkie automatyczne skalowanie i łatwe definiowanie i zarządzanie wdrożeniem. Ponieważ jest to przypadek użycia w czasie rzeczywistym, wymagało to opóźnienia P99 poniżej 10 milisekund, aby zapewnić wspaniałe wrażenia użytkownika.

AWS Inferentia i AWS Neuron SDK

Instancje EC2 Inf1 są obsługiwane przez AWS Inferentia, pierwszy akcelerator ML stworzony przez AWS w celu przyspieszenia obciążeń wnioskowania głębokiego uczenia. Instancje Inf1 zapewniają do 2.3 razy wyższą przepustowość i do 70% niższy koszt na wnioskowanie niż porównywalne instancje EC2 oparte na GPU. Możesz dalej trenować swoje modele przy użyciu wybranego przez siebie frameworka (PyTorch, TensorFlow, MXNet), a następnie łatwo wdrażać je na AWS Inferentia, aby skorzystać z wbudowanych optymalizacji wydajności. Za pomocą instancji Inf1 można wdrażać szeroką gamę typów modeli, od rozpoznawania obrazów, wykrywania obiektów, przetwarzania języka naturalnego (NLP) po nowoczesne modele rekomendacji.

Neuron AWS to zestaw programistyczny (SDK) składający się z kompilatora, środowiska uruchomieniowego i narzędzi do profilowania, które optymalizują wydajność wnioskowania ML wystąpień EC2 Inf1. Neuron jest natywnie zintegrowany z popularnymi frameworkami ML, takimi jak TensorFlow i PyTorch. Dlatego możesz wdrażać modele uczenia głębokiego w AWS Inferentia z tymi samymi znanymi interfejsami API, które są dostarczane przez wybraną przez Ciebie platformę, i korzystać ze wzrostu wydajności i najniższego kosztu wnioskowania w chmurze.

Od momentu wprowadzenia na rynek pakiet Neuron SDK stale zwiększał zakres obsługiwanych modeli, jednocześnie poprawiając wydajność i redukując koszty wnioskowania. Obejmuje to modele NLP (BERT), modele klasyfikacji obrazów (ResNet, VGG) oraz modele wykrywania obiektów (OpenPose i SSD).

Wdróż w instancjach Inf1, aby uzyskać małe opóźnienia, wysoką przepustowość i oszczędność kosztów

Zespół Amazon Search chciał zaoszczędzić koszty, jednocześnie spełniając wymagania dotyczące wysokiej przepustowości w przewidywaniu duplikacji oraz wymagania dotyczące małych opóźnień w przewidywaniu zamiarów zapytania. Zdecydowali się na wdrożenie na instancjach Inf1 opartych na AWS Inferentia i nie tylko spełnili wysokie wymagania dotyczące wydajności, ale także zaoszczędzili do 85% na kosztach wnioskowania.

Zduplikowane prognozy postrzegane przez klientów

Przed użyciem Inf1 dedykowany Amazon EMR klaster działał przy użyciu instancji opartych na procesorze. Bez polegania na akceleracji sprzętowej potrzebna była duża liczba wystąpień, aby spełnić wymaganie wysokiej przepustowości 8,800 transakcji na sekundę. Zespół przeszedł na instancje inf1.6xlarge, każda z 4 akceleratorami AWS Inferentia i 16 NeuronCore (4 rdzenie na układ AWS Inferentia). Prześledzili model oparty na transformatorze dla pojedynczego NeuronCore i załadowali jeden tryb na NeuronCore, aby zmaksymalizować przepustowość. Korzystając z 16 dostępnych NeuronCore, zmniejszyli koszty wnioskowania o 85% (na podstawie obecnych publicznych cen na żądanie Amazon EC2).

Przewidywanie zamiaru zapytania

Biorąc pod uwagę wymaganie opóźnienia P99 wynoszące 10 milisekund lub mniej, zespół załadował model do każdego dostępnego NeuronCore w instancjach inf1.6xlarge. Możesz to łatwo zrobić za pomocą PyTorch Neuron za pomocą latarka.neuron.DataParallel API. Dzięki wdrożeniu Inf1 opóźnienie modelu wynosiło 3 milisekundy, opóźnienie od końca do końca wynosiło około 10 milisekund, a maksymalna przepustowość przy obciążeniu szczytowym osiągnęła 16,000 XNUMX TPS.

Zacznij od przykładowej kompilacji i kodu wdrożeniowego

Poniżej znajduje się przykładowy kod, który pomoże Ci rozpocząć pracę z instancjami Inf1 i uświadomić sobie korzyści związane z wydajnością i kosztami, takie jak zespół Amazon Search. Pokazujemy, jak skompilować i przeprowadzić wnioskowanie z modelem PyTorch, używając Neuron PyTorch.

Najpierw model jest kompilowany za pomocą torch.neuron.trace():

m = torch.jit.load(f="./cpu_model.pt", map_location=torch.device('cpu'))
m.eval()
model_neuron = torch.neuron.trace(
    m,
    inputs,
    compiler_workdir="work_" + str(cores) + "_" + str(batch_size),
    compiler_args=[
        '--fp32-cast=all', '--neuroncore-pipeline-cores=' + str(cores)
    ])
model_neuron.save("m5_batch" + str(batch_size) + "_cores" + str(cores) +
                  "_with_extra_op_and_fp32cast.pt")

Pełna lista możliwych argumentów przemawiających za trace metoda, patrz PyTorch-Neuron Trace Python API. Jak widzisz, argumenty kompilatora można przekazać do torch.neuron API bezpośrednio. Wszyscy operatorzy FP32 są oddani do BF16 with --fp32-cast=all, zapewniając najwyższą wydajność przy zachowaniu zakresu dynamicznego. Dostępnych jest więcej opcji odlewania, które pozwalają kontrolować wydajność w celu uzyskania kompromisu w zakresie precyzji modelowania. Modele użyte dla obu przypadków użycia zostały skompilowane dla pojedynczego NeuronCore (nie potokowanie).

Następnie ładujemy model na Inferentia za pomocą torch.jit.loadi użyj go do przewidywania. The Czas działania neuronu automatycznie ładuje model do NeuronCores.

cm_cpd_preprocessing_jit = torch.jit.load(f=CM_CPD_PROC,
                                          map_location=torch.device('cpu'))
cm_cpd_preprocessing_jit.eval()
m5_model = torch.jit.load(f=CM_CPD_M5)
m5_model.eval()

input = get_input()
with torch.no_grad():
    batch_cm_cpd = cm_cpd_preprocessing_jit(input)
    input_ids, attention_mask, position_ids, valid_length, token_type_ids = (
        batch_cm_cpd['input_ids'].type(torch.IntTensor),
        batch_cm_cpd['attention_mask'].type(torch.HalfTensor),
        batch_cm_cpd['position_ids'].type(torch.IntTensor),
        batch_cm_cpd['valid_length'].type(torch.IntTensor),
        batch_cm_cpd['token_type_ids'].type(torch.IntTensor))
    model_res = m5_model(input_ids, attention_mask, position_ids, valid_length,
                         token_type_ids)

Wnioski

Zespół Amazon Search był w stanie zmniejszyć koszty wnioskowania o 85% przy użyciu instancji Inf1 opartych na AWS Inferentia, przy dużym natężeniu ruchu i wysokich wymaganiach dotyczących wydajności. AWS Inferentia i Neuron SDK zapewniły zespołowi elastyczność, aby zoptymalizować proces wdrażania niezależnie od szkolenia i stworzyć płytką krzywą uczenia się za pomocą dobrze zaokrąglonych narzędzi i znanych interfejsów API.

Możesz odblokować wydajność i korzyści finansowe, zaczynając od przykładowego kodu podanego w tym poście. Sprawdź także od końca do końca tutoriale uruchamiać modele ML na Inferentia z PyTorch i TensorFlow.


O autorach

Jak Amazon Search obniżył koszty wnioskowania ML o 85% dzięki AWS Inferentia PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.Joao Moura jest specjalistą ds. rozwiązań AI/ML w Amazon Web Services. Koncentruje się głównie na przypadkach użycia NLP i pomaga klientom zoptymalizować szkolenie i wdrażanie modelu uczenia głębokiego. Jest również aktywnym zwolennikiem sprzętu wyspecjalizowanego w ML oraz rozwiązań ML typu low-code.

Jak Amazon Search obniżył koszty wnioskowania ML o 85% dzięki AWS Inferentia PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.Weiqi Zhanga jest menedżerem ds. inżynierii oprogramowania w Search M5, gdzie zajmuje się tworzeniem modeli wielkoskalowych dla aplikacji do uczenia maszynowego Amazon. Jego zainteresowania obejmują wyszukiwanie informacji oraz infrastrukturę uczenia maszynowego.

Jak Amazon Search obniżył koszty wnioskowania ML o 85% dzięki AWS Inferentia PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.Jasona Carlsona jest inżynierem oprogramowania zajmującym się opracowywaniem potoków uczenia maszynowego w celu zmniejszenia liczby wyświetleń skradzionych w wynikach wyszukiwania z powodu duplikatów postrzeganych przez klientów. Pracuje głównie z Apache Spark, AWS i PyTorch, aby pomóc we wdrażaniu i dostarczaniu/przetwarzaniu danych dla modeli ML. W wolnym czasie lubi czytać i biegać.

Jak Amazon Search obniżył koszty wnioskowania ML o 85% dzięki AWS Inferentia PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.Shaohui Xi jest SDE w zespole Search Query Understanding Infra. Kieruje pracami nad tworzeniem wielkoskalowych usług wnioskowania online do uczenia głębokiego z małymi opóźnieniami i wysoką dostępnością. Poza pracą lubi jeździć na nartach i poznawać dobre jedzenie.

Jak Amazon Search obniżył koszty wnioskowania ML o 85% dzięki AWS Inferentia PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.Zhuoqi Zhang jest inżynierem oprogramowania w zespole Search Query Understanding Infra. Pracuje nad tworzeniem modeli obsługujących platformy w celu poprawy opóźnień i przepustowości dla usług wnioskowania online głębokiego uczenia. Poza pracą lubi grać w koszykówkę, jeździć na snowboardzie i jeździć samochodem.

Jak Amazon Search obniżył koszty wnioskowania ML o 85% dzięki AWS Inferentia PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.Słońce Haowei jest inżynierem oprogramowania w zespole Search Query Understanding Infra. Zajmuje się projektowaniem interfejsów API oraz infrastruktury wspierającej usługi wnioskowania online do głębokiego uczenia się. Jej zainteresowania obejmują projektowanie usług API, konfigurację infrastruktury i utrzymanie. Poza pracą lubi biegać, wędrować i podróżować.

Jak Amazon Search obniżył koszty wnioskowania ML o 85% dzięki AWS Inferentia PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.Jaspreet Singh jest naukowcem stosowanym w zespole M5, gdzie pracuje nad wielkoskalowymi modelami fundamentów, aby poprawić wrażenia zakupowe klientów. Jego zainteresowania badawcze obejmują uczenie się wielozadaniowe, wyszukiwanie informacji i uczenie się reprezentacji.

Jak Amazon Search obniżył koszty wnioskowania ML o 85% dzięki AWS Inferentia PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.Shruti Koparkar jest starszym menedżerem ds. marketingu produktów w AWS. Pomaga klientom odkrywać, oceniać i dostosowywać akcelerowaną infrastrukturę obliczeniową EC2 do ich potrzeb w zakresie uczenia maszynowego.

Znak czasu:

Więcej z Uczenie maszynowe AWS