Zwiększ wydajność generatywnych modeli językowych dzięki podpowiedziom zapewniającym spójność w serwisie Amazon Bedrock | Usługi internetowe Amazona

Zwiększ wydajność generatywnych modeli językowych dzięki podpowiedziom zapewniającym spójność w serwisie Amazon Bedrock | Usługi internetowe Amazona

Generatywne modele języka okazały się niezwykle skuteczne w rozwiązywaniu logicznych i analitycznych zadań związanych z przetwarzaniem języka naturalnego (NLP). Co więcej, użycie szybka inżynieria mogą znacząco poprawić ich wydajność. Na przykład, łańcuch myślowy Wiadomo, że (CoT) poprawia zdolność modelu do rozwiązywania złożonych, wieloetapowych problemów. Aby dodatkowo zwiększyć dokładność zadań wymagających rozumowania, a samospójność zasugerowano podejście podpowiadające, które podczas generowania języka zastępuje zachłanność dekodowaniem stochastycznym.

Amazońska skała macierzysta to w pełni zarządzana usługa oferująca wybór wysokowydajnych modeli podstawowych wiodących firm zajmujących się sztuczną inteligencją i Amazon za pośrednictwem jednego interfejsu API, wraz z szerokim zestawem możliwości tworzenia generatywna sztuczna inteligencja aplikacje zapewniające bezpieczeństwo, prywatność i odpowiedzialną sztuczną inteligencję. Z wnioskowanie partii API, możesz użyć Amazon Bedrock do zbiorowego uruchamiania wnioskowania z modelami podstawowymi i efektywniejszego uzyskiwania odpowiedzi. W tym poście pokazano, jak zaimplementować monit o spójność własną za pomocą wnioskowania wsadowego na platformie Amazon Bedrock, aby zwiększyć wydajność modelu w zadaniach arytmetycznych i wnioskowaniu wielokrotnego wyboru.

Przegląd rozwiązania

Podpowiadanie modeli językowych zapewniających spójność polega na generowaniu wielu odpowiedzi, które są agregowane w ostateczną odpowiedź. W przeciwieństwie do podejść jednogeneracyjnych, takich jak CoT, procedura próbkowania i marginalizacji o własnej spójności tworzy szereg uzupełnień modelu, które prowadzą do bardziej spójnego rozwiązania. Generowanie różnych odpowiedzi dla danego podpowiedzi jest możliwe dzięki zastosowaniu strategii dekodowania stochastycznego, a nie zachłannego.

Poniższy rysunek pokazuje, jak spójność własna różni się od zachłannej CoT w tym sensie, że generuje różnorodny zestaw ścieżek rozumowania i agreguje je, aby uzyskać ostateczną odpowiedź.

Różnice między spójnością własną a monitowaniem CoT.

Strategie dekodowania w celu generowania tekstu

Tekst wygenerowany przez modele językowe obsługujące tylko dekoder rozwija się słowo po słowie, a kolejny token jest przewidywany na podstawie poprzedniego kontekstu. Dla danego podpowiedzi model oblicza rozkład prawdopodobieństwa wskazujący prawdopodobieństwo, że każdy token pojawi się jako następny w sekwencji. Dekodowanie polega na przetłumaczeniu tych rozkładów prawdopodobieństwa na rzeczywisty tekst. Generowanie tekstu odbywa się za pośrednictwem zestawu parametry wnioskowania które często są hiperparametrami samej metody dekodowania. Jednym z przykładów jest temperatura, co moduluje rozkład prawdopodobieństwa kolejnego tokenu i wpływa na losowość wyniku modelu.

Chciwe dekodowanie to deterministyczna strategia dekodowania, która na każdym kroku wybiera token z największym prawdopodobieństwem. Chociaż podejście to jest proste i skuteczne, istnieje ryzyko popadnięcia w powtarzalne wzorce, ponieważ pomija szerszą przestrzeń prawdopodobieństwa. Ustawienie parametru temperatury na 0 w czasie wnioskowania zasadniczo równa się implementacji zachłannego dekodowania.

Próbowanie wprowadza stochastyczność do procesu dekodowania poprzez losowe wybieranie każdego kolejnego tokena na podstawie przewidywanego rozkładu prawdopodobieństwa. Ta losowość skutkuje większą zmiennością wyników. Dekodowanie stochastyczne okazuje się bardziej skuteczne w uchwyceniu różnorodności potencjalnych wyników i często daje bardziej pomysłowe odpowiedzi. Wyższe wartości temperatury wprowadzają większe wahania i zwiększają kreatywność reakcji modelu.

Techniki podpowiedzi: CoT i samospójność

Zdolność rozumowania modeli językowych można zwiększyć poprzez szybką inżynierię. W szczególności wykazano, że CoT wywołać rozumowanie w złożonych zadaniach NLP. Jednym ze sposobów wdrożenia a zerowy strzał CoT polega na szybkim wzmocnieniu z instrukcją „myślenia krok po kroku”. Innym jest wystawienie modelu na przykłady pośrednich etapów rozumowania zachęta do kilku strzałów moda. W obu scenariuszach zazwyczaj stosuje się zachłanne dekodowanie. CoT prowadzi do znacznego wzrostu wydajności w porównaniu z prostym monitowaniem o instrukcje dotyczące zadań arytmetycznych, zdroworozsądkowych i rozumowania symbolicznego.

Podpowiadanie o spójności wewnętrznej opiera się na założeniu, że wprowadzenie różnorodności w procesie rozumowania może pomóc w zbieżności modeli w zakresie prawidłowej odpowiedzi. Technika wykorzystuje dekodowanie stochastyczne, aby osiągnąć ten cel w trzech krokach:

  1. Podpowiadaj model językowy za pomocą przykładów CoT, aby wywołać rozumowanie.
  2. Zastąp dekodowanie zachłanne strategią próbkowania, aby wygenerować różnorodny zestaw ścieżek rozumowania.
  3. Połącz wyniki, aby znaleźć najbardziej spójną odpowiedź w zestawie odpowiedzi.

Wykazano, że samospójność przewyższa podpowiedzi CoT w popularnych testach arytmetycznych i zdroworozsądkowych. Ograniczeniem tego podejścia jest większy koszt obliczeniowy.

W tym poście pokazano, jak podpowiadanie oparte na spójności wewnętrznej zwiększa wydajność generatywnych modeli języka w przypadku dwóch zadań rozumowania NLP: rozwiązywania problemów arytmetycznych i odpowiadania na pytania wielokrotnego wyboru specyficzne dla danej dziedziny. Demonstrujemy to podejście przy użyciu wnioskowania wsadowego na Amazon Bedrock:

  • Dostęp do zestawu SDK Pythona Amazon Bedrock uzyskujemy w JupyterLab na platformie Amazon Sage Maker instancja notatnika.
  • W przypadku rozumowania arytmetycznego podpowiadamy Dowództwo Cohere na zbiorze danych GSM8K dotyczącym problemów matematycznych w szkole podstawowej.
  • W przypadku rozumowania wielokrotnego wyboru wyświetlamy monit AI21 Labs Jurassic-2 Mid na małej próbce pytań z egzaminu AWS Certified Solutions Architect – Associate.

Wymagania wstępne

W tym przewodniku założono następujące wymagania wstępne:

Zarządzaj dostępem modeli do Amazon Bedrock

Szacunkowy koszt uruchomienia kodu pokazanego w tym poście wynosi 100 USD, przy założeniu, że jednorazowo uruchomisz monit o spójność z 30 ścieżkami wnioskowania, używając jednej wartości do próbkowania na podstawie temperatury.

Zbiór danych umożliwiający badanie możliwości wnioskowania arytmetycznego

GSM8K to zbiór danych opracowanych przez ludzi problemów matematycznych dla szkół podstawowych, charakteryzujących się dużą różnorodnością językową. Rozwiązanie każdego problemu składa się z 2–8 kroków i wymaga wykonania sekwencji elementarnych obliczeń z wykorzystaniem podstawowych działań arytmetycznych. Dane te są powszechnie wykorzystywane do porównywania możliwości wieloetapowego wnioskowania arytmetycznego w modelach języka generatywnego. The Zestaw pociągów GSM8K obejmuje 7,473 rekordy. Poniżej znajduje się przykład:

{"question": "Natalia sold clips to 48 of her friends in April, and then she sold half as many clips in May. How many clips did Natalia sell altogether in April and May?", "answer": "Natalia sold 48/2 = <<48/2=24>>24 clips in May.nNatalia sold 48+24 = <<48+24=72>>72 clips altogether in April and May.n#### 72"}

Skonfiguruj do uruchamiania wnioskowania wsadowego za pomocą Amazon Bedrock

Wnioskowanie wsadowe umożliwia asynchroniczne uruchamianie wielu wywołań wnioskowania do Amazon Bedrock i poprawia wydajność wnioskowania o modelu w przypadku dużych zbiorów danych. W chwili pisania tego tekstu usługa jest dostępna w wersji zapoznawczej i dostępna wyłącznie za pośrednictwem interfejsu API. Odnosić się do Uruchom wnioskowanie wsadowe aby uzyskać dostęp do interfejsów API wnioskowania wsadowego za pośrednictwem niestandardowych zestawów SDK.

Po pobraniu i rozpakowaniu pliku SDK Pythona w instancji notatnika SageMaker możesz go zainstalować, uruchamiając następujący kod w komórce notatnika Jupyter:

# Install preview SDK packages
!pip install -q $(ls ./bedrock-python-sdk-reinvent/botocore-*.whl | head -1)
!pip install -q $(ls ./bedrock-python-sdk-reinvent/boto3-*.whl | head -1)

Sformatuj i prześlij dane wejściowe do Amazon S3

Dane wejściowe do wnioskowania wsadowego należy przygotować w formacie JSONL recordId i modelInput Klucze. To ostatnie powinno pasować do pola ciała modelu, który ma zostać wywołany na Amazon Bedrock. W szczególności niektórzy obsługiwane parametry wnioskowania dla polecenia Cohere jest temperature za losowość, max_tokens dla długości wyjściowej i num_generations aby wygenerować wiele odpowiedzi, z których wszystkie są przekazywane razem z prompt as modelInput:

data = [
    {
        "recordId": "1",
        "modelInput": {
            "prompt": prompt,
            "temperature": temperature,
            "max_tokens": max_tokens,
            "num_generations": n,
        },
    },
    ...,
]

See Parametry wnioskowania dla modeli fundamentów aby uzyskać więcej informacji, w tym o innych dostawcach modeli.

Nasze eksperymenty dotyczące rozumowania arytmetycznego przeprowadzamy w trybie kilku strzałów, bez dostosowywania lub dostrajania polecenia Cohere. Używamy tego samego zestawu ośmiu kilkustrzałowych przykładów z łańcucha myślowego (Tabela 20) i samospójność (Tabela 17) papiery. Podpowiedzi tworzone są poprzez połączenie przykładów z każdym pytaniem z zestawu pociągów GSM8K.

Ustawiliśmy max_tokens do 512 i num_generations do 5, czyli maksimum dozwolonego przez Dowództwo Cohere. W przypadku zachłannego dekodowania ustawiamy temperature do 0 i dla zachowania spójności przeprowadzamy trzy eksperymenty w temperaturach 0.5, 0.7 i 1. Każde ustawienie daje inne dane wejściowe w zależności od odpowiednich wartości temperatury. Dane są formatowane jako JSONL i przechowywane w Amazon S3.

# Set up S3 client
session = boto3.Session()
s3 = session.client("s3")

# Create S3 bucket with unique name to store input/output data
suffix = str(uuid.uuid4())[:8]
bucket = f"bedrock-self-consistency-{suffix}"
s3.create_bucket(
    Bucket=bucket, CreateBucketConfiguration={"LocationConstraint": session.region_name}
)

# Process data and output to new lines as JSONL
input_key = f"gsm8k/T{temperature}/input.jsonl"
s3_data = ""
for row in data:
    s3_data += json.dumps(row) + "n"
s3.put_object(Body=s3_data, Bucket=bucket, Key=input_key)

Twórz i uruchamiaj zadania wnioskowania wsadowego w Amazon Bedrock

Tworzenie zadania wnioskowania wsadowego wymaga klienta Amazon Bedrock. Określamy ścieżki wejściowe i wyjściowe S3 i nadajemy każdemu zadaniu wywołania unikalną nazwę:

# Create Bedrock client							    
bedrock = boto3.client("bedrock")

# Input and output config						     
input_config = {"s3InputDataConfig": {"s3Uri": f"s3://{bucket}/{input_key}"}}
output_config = {"s3OutputDataConfig": {"s3Uri": f"s3://{bucket}/{output_key}"}}

# Create a unique job name
suffix = str(uuid.uuid4())[:8] 
job_name = f"command-batch-T{temperature}-{suffix}"

Praca jest stworzony przekazując rolę IAM, identyfikator modelu, nazwę zadania i konfigurację wejścia/wyjścia jako parametry do interfejsu API Amazon Bedrock:

response = bedrock.create_model_invocation_job(
    roleArn=f"arn:aws:iam::{account_id}:role/BedrockBatchInferenceRole",
    modelId="cohere.command-text-v14",
    jobName=job_name,
    inputDataConfig=input_config,
    outputDataConfig=output_config,
)
job_arn = response["jobArn"]

Notowania, monitorowanie, zatrzymanie Zadania wnioskowania wsadowego są obsługiwane przez odpowiednie wywołania API. Podczas tworzenia zadania pojawiają się jako pierwsze Submitted, Następnie jako InProgress, a na koniec jako Stopped, Failedlub Completed.

# Get job details
job_details = bedrock.get_model_invocation_job(jobIdentifier=job_arn)

Jeśli zadania zostaną pomyślnie ukończone, wygenerowaną treść można pobrać z Amazon S3, korzystając z unikalnej lokalizacji wyjściowej.

# Get the output file key
s3_prefix = f"s3://{bucket}/"
output_path = job_details["outputDataConfig"]["s3OutputDataConfig"]["s3Uri"].replace(
    s3_prefix, ""
)
output_folder = job_details["jobArn"].split("/")[1]
output_file = (
    f'{job_details["inputDataConfig"]["s3InputDataConfig"]["s3Uri"].split("/")[-1]}.out'
)
result_key = f"{output_path}{output_folder}/{output_file}"

# Get output data
obj = s3.get_object(Bucket=bucket, Key=result_key)
content = obj["Body"].read().decode("utf-8").strip().split("n")

# Show answer to the first question
print(json.loads(content[0])["modelOutput"]["generations"][0]["text"])

[Out]: 'Natalia sold 48 * 1/2 = 24 clips less in May. This means she sold 48 + 24 = 72 clips in April and May. The answer is 72.'

Własna spójność zwiększa dokładność modelu w zadaniach arytmetycznych

Wewnętrzne podpowiedzi Cohere Command przewyższają zachłanną linię bazową CoT pod względem dokładności zbioru danych GSM8K. Aby zachować spójność, próbujemy 30 niezależnych ścieżek rozumowania w trzech różnych temperaturach topP i topK ustawione na ich wartości domyślne. Ostateczne rozwiązania są sumowane poprzez wybór najbardziej spójnego wystąpienia w drodze głosowania większością. W przypadku remisu losowo wybieramy jedną z odpowiedzi większości. Obliczamy dokładność i wartości odchylenia standardowego uśrednione dla 100 przebiegów.

Poniższy rysunek przedstawia dokładność zbioru danych GSM8K z Cohere Command, dla którego wskazywano zachłanny CoT (niebieski) i samospójność przy wartościach temperatur 0.5 (żółty), 0.7 (zielony) i 1.0 (pomarańczowy) jako funkcję liczby pobranych próbek ścieżki rozumowania.

Dokładność polecenia Cohere przy użyciu spójności i podpowiedzi CoT.

Powyższy rysunek pokazuje, że samospójność zwiększa dokładność arytmetyczną w porównaniu z zachłannym CoT, gdy liczba próbkowanych ścieżek wynosi zaledwie trzy. Wydajność wzrasta konsekwentnie wraz z dalszymi ścieżkami rozumowania, potwierdzając znaczenie wprowadzenia różnorodności w generowaniu myśli. Cohere Command rozwiązuje zestaw pytań GSM8K z dokładnością 51.7% po zapytaniu za pomocą CoT w porównaniu z 68% w przypadku 30 spójnych ścieżek rozumowania przy T=1.0. Wszystkie trzy zbadane wartości temperatur dają podobne wyniki, przy czym niższe temperatury są porównywalnie skuteczniejsze w przypadku mniej próbkowanych ścieżek.

Praktyczne rozważania na temat wydajności i kosztów

Spójność własna jest ograniczona zwiększonym czasem reakcji i kosztami ponoszonymi podczas generowania wielu wyników na monit. Jako praktyczną ilustrację, wnioskowanie wsadowe dla generowania zachłannego za pomocą polecenia Cohere na 7,473 rekordach GSM8K zakończyło się w mniej niż 20 minut. Zadanie pochłonęło 5.5 miliona tokenów jako dane wejściowe i wygenerowało 630,000 XNUMX tokenów wyjściowych. Aktualnie Ceny wnioskowane Amazon Bedrock, całkowity poniesiony koszt wyniósł około 9.50 USD.

Aby zachować spójność z poleceniem Cohere, używamy parametru wnioskowania num_generations aby utworzyć wiele uzupełnień na monit. W chwili pisania tego tekstu Amazon Bedrock umożliwia maksymalnie pięć pokoleń i trzy jednoczesne Submitted zadania wnioskowania wsadowego. Zadania przechodzą do InProgress status sekwencyjnie, dlatego próbkowanie więcej niż pięciu ścieżek wymaga wielokrotnych wywołań.

Poniższy rysunek przedstawia czasy działania polecenia Cohere w zestawie danych GSM8K. Całkowity czas działania jest pokazany na osi x, a czas działania na próbkowaną ścieżkę wnioskowania na osi y. Generowanie zachłanne przebiega w najkrótszym czasie, ale wiąże się z wyższym kosztem czasu na próbkowaną ścieżkę.

Środowiska wykonawcze dla polecenia Cohere

Generowanie zachłanne kończy się w czasie krótszym niż 20 minut dla pełnego zestawu GSM8K i pobiera próbkę unikalnej ścieżki rozumowania. Utworzenie spójności wewnętrznej z pięcioma próbkami wymaga około 50% więcej czasu i kosztuje około 14.50 USD, ale daje w tym czasie pięć ścieżek (ponad 500%). Całkowity czas działania i koszt rosną stopniowo z każdymi dodatkowymi pięcioma próbkowanymi ścieżkami. Analiza kosztów i korzyści sugeruje, że 1–2 zadania wnioskowania wsadowego z 5–10 próbkowanymi ścieżkami to zalecane ustawienie dla praktycznej implementacji samospójności. Pozwala to zwiększyć wydajność modelu, jednocześnie ograniczając koszty i opóźnienia.

Własna spójność zwiększa wydajność modelu poza rozumowaniem arytmetycznym

Kluczowym pytaniem potwierdzającym przydatność podpowiedzi opartych na spójności wewnętrznej jest to, czy metoda ta sprawdza się w przypadku dalszych zadań NLP i modeli językowych. Jako rozszerzenie przypadku użycia związanego z Amazonem, przeprowadzamy małą analizę na przykładowych pytaniach z Certyfikacja współpracownika architekta rozwiązań AWS. Jest to egzamin wielokrotnego wyboru dotyczący technologii i usług AWS, który wymaga wiedzy dziedzinowej oraz umiejętności rozumowania i podejmowania decyzji spośród kilku opcji.

Przygotowujemy zbiór danych z SAA-C01 i SAA-C03 przykładowe pytania egzaminacyjne. Z 20 dostępnych pytań używamy pierwszych 4 jako przykładów kilku strzałów i skłaniamy model do odpowiedzi na pozostałe 16. Tym razem przeprowadzamy wnioskowanie za pomocą modelu AI21 Labs Jurassic-2 Mid i generujemy maksymalnie 10 ścieżek wnioskowania w temperatura 0.7. Wyniki pokazują, że samospójność zwiększa wydajność: chociaż zachłanny CoT daje 11 poprawnych odpowiedzi, konsekwentność własna udaje się w przypadku 2 kolejnych.

Poniższa tabela przedstawia wyniki dokładności dla 5 i 10 próbkowanych ścieżek uśrednione dla 100 przebiegów.

. Chciwe dekodowanie T = 0.7
# próbkowane ścieżki: 5 68.6 74.1 0.7 ±
# próbkowane ścieżki: 10 68.6 78.9 ± 0.3

W poniższej tabeli przedstawiamy dwa pytania egzaminacyjne, na które zachłanny CoT udziela błędnych odpowiedzi, mimo że osiągnięto sukces w zakresie samospójności, podkreślając w każdym przypadku prawidłowe (zielone) lub nieprawidłowe (czerwone) ślady rozumowania, które doprowadziły model do uzyskania prawidłowych lub nieprawidłowych odpowiedzi. Chociaż nie każda próbkowana ścieżka wygenerowana przez samospójność jest poprawna, większość zbiega się do prawdziwej odpowiedzi w miarę wzrostu liczby próbkowanych ścieżek. Obserwujemy, że zazwyczaj wystarczy 5–10 ścieżek, aby uzyskać poprawę w stosunku do zachłannych wyników, przy malejących korzyściach pod względem wydajności powyżej tych wartości.

Question

Aplikacja internetowa umożliwia klientom przesyłanie zamówień do zasobnika S3. Wynikowe zdarzenia Amazon S3 wyzwalają funkcję Lambda, która wstawia komunikat do kolejki SQS. Pojedyncza instancja EC2 odczytuje komunikaty z kolejki, przetwarza je i przechowuje w tabeli DynamoDB podzielonej według unikalnego identyfikatora zamówienia. Oczekuje się, że w przyszłym miesiącu ruch wzrośnie 10-krotnie, a architekt rozwiązań sprawdza architekturę pod kątem możliwych problemów ze skalowaniem.

Który komponent NAJBARDZIEJ będzie wymagał przebudowy, aby móc skalować się w celu dostosowania się do nowego ruchu?

A. Funkcja lambda
B. Kolejka SQS
C. Instancja EC2
D. Tabela DynamoDB

Aplikacja działająca na platformie AWS wykorzystuje w swojej bazie danych wdrożenie klastra Amazon Aurora Multi-AZ DB. Oceniając metryki wydajności, architekt rozwiązań odkrył, że odczyty bazy danych powodują dużą liczbę operacji we/wy i zwiększają opóźnienia w żądaniach zapisu w bazie danych.

Co powinien zrobić architekt rozwiązań, aby oddzielić żądania odczytu od żądań zapisu?

A. Włącz buforowanie odczytu w bazie danych Aurora.
B. Zaktualizuj aplikację, aby czytać z instancji oczekującej Multi-AZ.
C. Utwórz replikę Aurora i zmodyfikuj aplikację, aby korzystała z odpowiednich punktów końcowych.
D. Utwórz drugą bazę danych Aurora i połącz ją z podstawową bazą danych jako replikę do odczytu.

Poprawna odpowiedź C – Pojedyncza instancja EC2 nie będzie skalowalna i stanowi pojedynczy punkt awarii w architekturze. Znacznie lepszym rozwiązaniem byłoby umieszczenie instancji EC2 w grupie automatycznego skalowania w 2 strefach dostępności, które odczytywałyby wiadomości z kolejki. Pozostałe odpowiedzi to wszystkie usługi zarządzane, które można skonfigurować do skalowania lub będą skalowane automatycznie. C – Repliki Aurora umożliwiają odciążenie ruchu związanego z odczytem. Repliki Aurora korzystają z tej samej pamięci co główna baza danych, więc czas opóźnienia jest zazwyczaj bardzo krótki. Repliki Aurora mają własne punkty końcowe, więc aplikację należy skonfigurować tak, aby kierowała ruch odczytu do nowych punktów końcowych.
Chciwe dekodowanie Bezpośrednie skalowanie instancji EC2 może nie być możliwe, ponieważ zmiana rozmiaru instancji może nie być możliwa. Skalowanie funkcji Lambda może nie wystarczyć, ponieważ funkcje Lambda mają limit alokacji pamięci wynoszący 6 GB. Skalowanie kolejki SQS może nie wystarczyć, ponieważ SQS ma limit 10,000 XNUMX wiadomości. Tabele DynamoDB można skalować, udostępniając więcej jednostek pojemności. Prawidłowa odpowiedź to D. Modyfikowanie aplikacji do odczytu z instancji gotowości Multi-AZ (opcja B) jest najlepszym podejściem. Instancja rezerwowa jest replikowana asynchronicznie z instancji podstawowej, więc operacje odczytu nie będą kolidować z operacjami zapisu. Włączenie buforowania odczytu (opcja A) lub utworzenie repliki Aurora (opcja C) nie rozwiąże problemu rywalizacji we/wy. Utworzenie drugiej bazy danych Aurora i połączenie jej jako repliki do odczytu (opcja D) również nie rozwiąże problemu rywalizacji we/wy. Prawidłowa odpowiedź to B.
Przykładowa ścieżka nr 1 Skalowanie instancji EC2 do 10-krotności jej obecnego rozmiaru może nie być wykonalne ani z punktu widzenia kosztów, ani wydajności. Wymagałoby to większej instancji, co może być kosztowne. Bardziej opłacalnym podejściem może być użycie roju mniejszych instancji (np. grupy automatycznego skalowania) w celu podziału obciążenia. W takim przypadku instancja EC2 prawdopodobnie wymagałaby przeprojektowania architektury. Prawidłowa odpowiedź to C. Modyfikowanie aplikacji tak, aby korzystała z odpowiednich punktów końcowych, nie jest rozwiązaniem praktycznym, gdyż wymagałoby zmian w kodzie aplikacji. Prawidłowa odpowiedź to C: Utwórz replikę Aurory i zmodyfikuj aplikację, aby korzystała z odpowiednich punktów końcowych.
Przykładowa ścieżka nr 2 Skalowanie pojedynczej instancji EC2 jest trudniejsze i bardziej problematyczne niż skalowanie pozostałych komponentów usługi. Amazon SQS, Lambda i DynamoDB mogą skalować się automatycznie poradzić sobie ze zwiększonym obciążeniem. Prawidłowa odpowiedź to C.

(DO) Utwórz replikę Aurora i zmodyfikuj aplikację, aby korzystała z odpowiednich punktów końcowych.

Konfigurując replikę Aurora, możesz oddzielić ruch odczytu od ruchu zapisu. Repliki Aurora używają różnych adresów URL punktów końcowych, umożliwiając kierowanie ruchu odczytu do repliki zamiast do podstawowej bazy danych. Replika może przetwarzać żądania odczytu równolegle z żądaniami zapisu do podstawowej bazy danych, zmniejszając liczbę operacji we/wy i opóźnienia.

Sprzątać

Uruchamianie wnioskowania wsadowego w Amazon Bedrock podlega opłatom zgodnie z cennikiem Amazon Bedrock. Po ukończeniu instrukcji usuń instancję notatnika SageMaker i usuń wszystkie dane z zasobników S3, aby uniknąć ponoszenia przyszłych opłat.

rozważania

Chociaż zademonstrowane rozwiązanie wykazuje lepszą wydajność modeli językowych po wyświetleniu monitu o spójność, należy pamiętać, że przewodnik nie jest gotowy do wdrożenia w środowisku produkcyjnym. Przed wdrożeniem w środowisku produkcyjnym należy dostosować ten dowód słuszności koncepcji do własnej implementacji, pamiętając o następujących wymaganiach:

  • Ograniczenie dostępu do interfejsów API i baz danych, aby zapobiec nieautoryzowanemu użyciu.
  • Przestrzeganie najlepszych praktyk bezpieczeństwa AWS dotyczących dostępu do ról IAM i grup zabezpieczeń.
  • Weryfikacja i oczyszczanie danych wejściowych użytkownika w celu zapobiegania atakom polegającym na natychmiastowym wstrzykiwaniu.
  • Monitorowanie i rejestrowanie uruchomionych procesów w celu umożliwienia testowania i audytu.

Wnioski

Ten post pokazuje, że podpowiadanie oparte na spójności zwiększa wydajność generatywnych modeli języka w złożonych zadaniach NLP, które wymagają umiejętności arytmetycznych i logicznych wielokrotnego wyboru. Własna spójność wykorzystuje dekodowanie stochastyczne oparte na temperaturze do generowania różnych ścieżek rozumowania. Zwiększa to zdolność modelu do wywoływania różnorodnych i przydatnych myśli w celu uzyskania prawidłowych odpowiedzi.

Dzięki wnioskowaniu wsadowemu Amazon Bedrock model językowy Cohere Command jest proszony o wygenerowanie spójnych odpowiedzi na zestaw problemów arytmetycznych. Dokładność poprawia się z 51.7% przy dekodowaniu zachłannym do 68% przy próbkowaniu 30 ścieżek wnioskowania na zasadzie spójności własnej przy T=1.0. Próbkowanie pięciu ścieżek już zwiększa dokładność o 7.5 punktu procentowego. Podejście to można przenieść na inne modele językowe i zadania rozumowania, jak wykazały wyniki modelu AI21 Labs Jurassic-2 Mid na egzaminie certyfikacyjnym AWS. W zestawie pytań o małych rozmiarach samospójność z pięcioma próbkowanymi ścieżkami zwiększa dokładność o 5 punktów procentowych w porównaniu z zachłannym CoT.

Zachęcamy do wdrożenia podpowiedzi o spójności wewnętrznej w celu zwiększenia wydajności we własnych aplikacjach za pomocą generatywnych modeli języka. Dowiedz się więcej o Dowództwo Cohere i AI21 Labs Jurajski modele dostępne na Amazon Bedrock. Aby uzyskać więcej informacji na temat wnioskowania wsadowego, zobacz Uruchom wnioskowanie wsadowe.

Podziękowania

Autor dziękuje recenzentom technicznym Aminowi Tajgardoonowi i Patrickowi McSweeneyowi za pomocne opinie.


O autorze

Zwiększ wydajność generatywnych modeli językowych dzięki podpowiedziom zapewniającym spójność w serwisie Amazon Bedrock | Amazon Web Services PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.

Lucía Santamaría jest starszym specjalistą naukowym na Uniwersytecie ML firmy Amazon, gdzie koncentruje się na podnoszeniu poziomu kompetencji ML w całej firmie poprzez praktyczną edukację. Lucía ma doktorat z astrofizyki i pasjonuje się demokratyzacją dostępu do wiedzy i narzędzi technicznych.

Znak czasu:

Więcej z Uczenie maszynowe AWS