Łatwe debugowanie LLM za pomocą narzędzia do analizowania interpretowalności (LIT) w GCP

1. Omówienie

Ten moduł zawiera szczegółowy przewodnik po wdrażaniu serwera aplikacji LIT w Google Cloud Platform (GCP) w celu interakcji z modelami podstawowymi Gemini Vertex AI i hostowanymi przez siebie dużymi modelami językowymi (LLM) innych firm. Znajdziesz w nim też wskazówki dotyczące używania interfejsu LIT do debugowania promptów i interpretacji modelu.

Z tego modułu dowiesz się, jak:

  • Skonfiguruj serwer LIT w GCP.
  • Połącz serwer LIT z modelami Vertex AI Gemini lub innymi własnymi modelami LLM.
  • Wykorzystaj interfejs LIT do analizowania, debugowania i interpretowania promptów w celu poprawy wydajności modelu i lepszych statystyk.

Co to jest LIT?

LIT to wizualne, interaktywne narzędzie do analizowania interpretowalności, które obsługuje dane tekstowe, obrazowe i tablicowe. Może być uruchamiany jako samodzielny serwer lub w środowiskach notatnika, takich jak Google Colab, Jupyter i Google Cloud Vertex AI. Biblioteka jest dostępna w PyPIGitHub.

Pierwotnie służył do rozumienia modeli klasyfikacji i regresji, ale w ostatnich aktualizacjach dodano do niego narzędzia do debugowania promptów LLM, które umożliwiają zbadanie wpływu treści użytkownika, modelu i systemu na zachowanie generowania.

Czym są Vertex AI i baza modeli?

Vertex AI to platforma systemów uczących się, która umożliwia trenowanie i wdrażanie modeli ML i aplikacji AI, a także ich dostosowywanie do wykorzystania w aplikacjach opartych na AI. Vertex AI łączy ze sobą przepływy pracy związane z inżynierią danych, nauką o danych i inżynierią systemów uczących się, umożliwiając zespołom współpracę przy użyciu wspólnego zestawu narzędzi oraz skalowanie aplikacji z korzyścią z Google Cloud.

Vertex Model Garden to biblioteka modeli ML, która ułatwia odkrywanie, testowanie, dostosowywanie i wdrażanie zastrzeżonych modeli Google oraz wybranych modeli i zasobów innych firm.

Jakie zadania wykonasz:

Do wdrożenia kontenera Dockera z gotowego obrazu LIT użyjesz Cloud Shell i Cloud Run.

Cloud Run to zarządzana platforma obliczeniowa, która umożliwia uruchamianie kontenerów bezpośrednio w ramach skalowalnej infrastruktury Google, w tym na procesorach graficznych.

Zbiór danych

Demonstracja domyślnie korzysta z przykładowego zbioru danych do debugowania promptów LIT, ale możesz też załadować własny za pomocą interfejsu.

Zanim zaczniesz

Aby skorzystać z tego przewodnika, musisz mieć projekt Google Cloud. Możesz utworzyć nowy projekt lub wybrać już istniejący.

2. Uruchom konsolę Google Cloud i Cloud Shell

W tym kroku uruchomisz konsolę Google Cloud i skorzystasz z Google Cloud Shell.

2-a. Uruchom konsolę Google Cloud

Uruchom przeglądarkę i otwórz konsolę Google Cloud.

Konsola Google Cloud to zaawansowany, bezpieczny interfejs administracyjny w przeglądarce, który umożliwia szybkie zarządzanie zasobami Google Cloud. To narzędzie DevOps na wynos.

2-b. Uruchom Google Cloud Shell

Cloud Shell to środowisko programistyczne i operacyjne online, które jest dostępne z dowolnego miejsca przy użyciu przeglądarki. Możesz zarządzać zasobami za pomocą terminala online wyposażonego w takie narzędzia jak kubectl czy narzędzie wiersza poleceń gcloud. Możesz także tworzyć, kompilować, debugować i wdrażać aplikacje działające w chmurze za pomocą edytora online Cloud Shell. Cloud Shell udostępnia środowisko online dla programistów z zainstalowanym zestawem ulubionych narzędzi i 5 GB trwałego miejsca na dane. W kolejnych krokach będziesz używać wiersza poleceń.

Uruchom Google Cloud Shell, klikając ikonę w prawym górnym rogu paska menu (zaznaczoną na niebiesko na poniższym zrzucie ekranu).

Wprowadzenie Google Cloud Console

U dołu strony powinien pojawić się terminal z powłoką Bash.

Google Cloud Console

2-c. Ustaw projekt Google Cloud

Musisz ustawić identyfikator i region projektu za pomocą polecenia gcloud.

# Set your GCP Project ID.
gcloud config set project your-project-id

# Set your GCP Project Region.
gcloud config set run/region your-project-region

3. Wdrażanie obrazu Dockera serwera aplikacji LIT za pomocą Cloud Run

3-a. Wdrażanie aplikacji LIT w Cloud Run

Najpierw musisz ustawić najnowszą wersję aplikacji LIT-App jako wersję do wdrożenia.

# Set latest version as your LIT_SERVICE_TAG.
export LIT_SERVICE_TAG=latest
# List all the public LIT GCP App server docker images.
gcloud container images  list-tags  us-east4-docker.pkg.dev/lit-demos/lit-app/gcp-lit-app

Po ustawieniu tagu wersji musisz nadać nazwę usłudze.

# Set your lit service name. While 'lit-app-service' is provided as a placeholder, you can customize the service name based on your preferences.
export LIT_SERVICE_NAME=lit-app-service

Następnie uruchom to polecenie, aby wdrożyć kontener do Cloud Run.

# Use below cmd to deploy the LIT App to Cloud Run.
gcloud run deploy $LIT_SERVICE_NAME \
--image us-east4-docker.pkg.dev/lit-demos/lit-app/gcp-lit-app:$LIT_SERVICE_TAG \
--port 5432 \
--cpu 8 \
--memory 32Gi \
--no-cpu-throttling \
--no-allow-unauthenticated

LIT umożliwia też dodanie zbioru danych podczas uruchamiania serwera. Aby to zrobić, ustaw zmienną DATASETS tak, aby zawierała dane, które chcesz wczytać, używając formatu name:path, np. data_foo:/bar/data_2024.jsonl. Zbiór danych powinien mieć format .jsonl, gdzie każdy rekord zawiera pole prompt oraz opcjonalne pola target i source. Aby załadować kilka zbiorów danych, rozdziel je przecinkami. Jeśli nie zostanie ustawiona, zostanie załadowany próbny zbiór danych do debugowania promptów LIT.

# Set the dataset.
export DATASETS=[DATASETS]

Ustawienie MAX_EXAMPLES pozwala ustawić maksymalną liczbę przykładów do wczytania z każdego zbioru oceny.

# Set the max examples.
export MAX_EXAMPLES=[MAX_EXAMPLES]

Następnie w komendzie wdrażania możesz dodać

--set-env-vars "DATASETS=$DATASETS" \
--set-env-vars "MAX_EXAMPLES=$MAX_EXAMPLES" \

3-b: Wyświetlenie usługi aplikacji LIT

Po utworzeniu serwera aplikacji LIT możesz znaleźć tę usługę w sekcji Cloud Run w Cloud Console.

Wybierz utworzoną właśnie usługę aplikacji LIT. Upewnij się, że nazwa usługi jest taka sama jak LIT_SERVICE_NAME.

Lista Cloud Run w konsoli Google Cloud

Adres URL usługi znajdziesz, klikając wdrożoną właśnie usługę.

URL usługi Google Cloud Find

Następnie powinieneś/powinnaś zobaczyć interfejs LIT. Jeśli pojawi się błąd, zapoznaj się z sekcją Rozwiązywanie problemów.

Strona główna LIT Demo

W sekcji LOGS możesz monitorować aktywność, wyświetlać komunikaty o błędach i śledzić postęp wdrażania.

Plik dziennika Cloud Run w konsoli Google Cloud

Dane usługi możesz wyświetlić w sekcji DANE.

Dane Cloud Run w konsoli Google Cloud

3-c: Wczytywanie zbiorów danych

W interfejsie LIT kliknij opcję Configure, a następnie Dataset. Załaduj zbiór danych, podając jego nazwę i adres URL. Format zbioru danych powinien być .jsonl, a każdy rekord powinien zawierać pole prompt oraz opcjonalne pola targetsource.

Wczytywanie zbioru danych LIT

4. Przygotowywanie modeli Gemini w bazie modeli Vertex AI

Modele podstawowe Gemini od Google są dostępne w interfejsie Vertex AI API. LIT udostępnia opakowanie modelu VertexAIModelGarden umożliwiającego ich generowanie. Wystarczy, że określisz żądaną wersję (np. „gemini-1.5-pro-001”) za pomocą parametru nazwy modelu. Główną zaletą korzystania z tych modeli jest to, że nie wymagają one dodatkowego wysiłku na potrzeby wdrożenia. Domyślnie masz natychmiastowy dostęp do modeli takich jak Gemini 1.0 Pro i Gemini 1.5 Pro w GCP, co eliminuje potrzebę wykonywania dodatkowych czynności konfiguracyjnych.

4-a. Przyznaj uprawnienia Vertex AI

Aby wysyłać zapytania do Gemini w GCP, musisz przyznać Vertex AI uprawnienia do konta usługi. Sprawdź, czy nazwa konta usługi to Default compute service account. Skopiuj adres e-mail konta usługi.

Konta usługi GCP

Dodaj adres e-mail konta usługi jako podmiot zabezpieczeń z przypisaną rolą Vertex AI User do listy dozwolonych uprawnień.

Dodawanie adresu e-mail konta usługi

4-b: wczytanie modeli Gemini

Poniższe czynności pozwolą Ci załadować modele Gemini i dostosować ich parametry.

    1. Kliknij opcję Configure w interfejsie LIT.
    1. W opcji Select a base model wybierz opcję gemini.
    1. Musisz nadać nazwę modelowi w sekcji new_name.
    1. Wpisz wybrane modele Gemini jako model_name.
    1. Kliknij Load Model.
    1. Kliknij Submit.

LIT Load Gemini Model

5. Wdrażanie serwera modelu LLM hostowanego samodzielnie w GCP

Samohostujące modele LLM z obrazem Dockera serwera LIT umożliwiają wykorzystanie funkcji saligencji i tokenizacji LIT, co pozwala uzyskać głębszy wgląd w zachowanie modelu. Obraz serwera modelu działa z modelami KerasNLP lub Hugging Face Transformers, w tym z wagami dostarczanymi przez bibliotekę i hostowanymi lokalnie, np. w Google Cloud Storage.

5-a. Skonfiguruj modele

Każdy kontener wczytuje jeden model skonfigurowany za pomocą zmiennych środowiskowych.

Musisz określić modele do załadowania, ustawiając MODEL_CONFIG. Format powinien być name:path, na przykład model_foo:model_foo_path. Ścieżka może być adresem URL, ścieżką lokalnego pliku lub nazwą wstępnie ustawionego frameworku do deep learningu (więcej informacji znajdziesz w tabeli poniżej). Ten serwer jest testowany przy użyciu Gemma, GPT2, Llama i Mistral przy wszystkich obsługiwanych wartościach DL_FRAMEWORK. Inne modele powinny działać, ale konieczne może być wprowadzenie poprawek.

# Set models you want to load. While 'gemma2b is given as a placeholder, you can load your preferred model by following the instructions above.
export MODEL_CONFIG=gemma2b:gemma_2b_en

Dodatkowo serwer modelu LIT umożliwia konfigurowanie różnych zmiennych środowiskowych za pomocą podanego niżej polecenia. Szczegóły znajdziesz w tabeli. Pamiętaj, że każdą zmienną trzeba ustawić osobno.

# Customize the variable value as needed.
export [VARIABLE]=[VALUE]

Zmienna

Wartości

Opis

DL_FRAMEWORK

kerasnlp, transformers

Biblioteka modelowania używana do wczytywania wag modelu do określonego środowiska uruchomieniowego. Domyślna wartość to kerasnlp.

DL_RUNTIME

torch, tensorflow

Platforma backendu deep learning, na której działa model. Wszystkie modele wczytane przez ten serwer będą używać tego samego backendu, a niezgodności spowodują błędy. Domyślna wartość to torch.

PRECYZJA

bfloat16, float32

precyzję zmiennoprzecinkową dla modeli LLM. Domyślna wartość to bfloat16.

BATCH_SIZE

Dodatnie liczby całkowite

Liczba przykładów do przetworzenia na jeden wsad. Domyślna wartość to 1.

SEQUENCE_LENGTH

Dodatnie liczby całkowite

Maksymalna długość sekwencji promptu wejściowego wraz z wygenerowanym tekstem. Domyślna wartość to 512.

5-b. Wdróż serwer modelu w Cloud Run

Najpierw musisz ustawić najnowszą wersję serwera Model Server jako wersję do wdrożenia.

# Set latest as MODEL_VERSION_TAG.
export MODEL_VERSION_TAG=latest
# List all the public LIT GCP model server docker images.
gcloud container images  list-tags  us-east4-docker.pkg.dev/lit-demos/lit-app/gcp-model-server

Po ustawieniu tagu wersji musisz nazwać model-serwer.

# Set your Service name.
export MODEL_SERVICE_NAME='gemma2b-model-server'

Następnie możesz uruchomić to polecenie, aby wdrożyć kontener w Cloud Run. Jeśli nie ustawisz zmiennych środowiskowych, zostaną zastosowane wartości domyślne. Ponieważ większość modeli LLM wymaga drogich zasobów obliczeniowych, zdecydowanie zalecamy używanie procesora graficznego. Jeśli wolisz uruchamiać model tylko na procesorze (co sprawdza się w przypadku małych modeli, takich jak GPT2), możesz usunąć powiązane argumenty --gpu 1 --gpu-type nvidia-l4 --max-instances 7.

# Deploy the model service container.
gcloud beta run deploy $MODEL_SERVICE_NAME \
--image us-east4-docker.pkg.dev/lit-demos/lit-app/gcp-model-server:$MODEL_VERSION_TAG \
--port 5432 \
--cpu 8 \
--memory 32Gi \
--no-cpu-throttling \
--gpu 1 \
--gpu-type nvidia-l4  \
--max-instances 7  \
--set-env-vars "MODEL_CONFIG=$MODEL_CONFIG" \
--no-allow-unauthenticated

Możesz też dostosować zmienne środowiskowe, dodając te polecenia. Uwzględnij tylko zmienne środowiskowe, które są potrzebne do realizacji Twoich konkretnych potrzeb.

--set-env-vars "DL_FRAMEWORK=$DL_FRAMEWORK" \
--set-env-vars "DL_RUNTIME=$DL_RUNTIME" \
--set-env-vars "PRECISION=$PRECISION" \
--set-env-vars "BATCH_SIZE=$BATCH_SIZE" \
--set-env-vars "SEQUENCE_LENGTH=$SEQUENCE_LENGTH" \

Dostęp do niektórych modeli może wymagać dodatkowych zmiennych środowiskowych. W razie potrzeby zapoznaj się z instrukcjami z Kaggle Hub (używanego do modeli KerasNLP) i Hugging Face Hub.

5-c. Dostęp do serwera modelu

Po utworzeniu serwera modelu uruchomioną usługę znajdziesz w sekcji Cloud Run w projekcie GCP.

Wybierz utworzony przez siebie serwer modeli. Upewnij się, że nazwa usługi jest taka sama jak MODEL_SERVICE_NAME.

Lista Cloud Run w konsoli Google Cloud

Adres URL usługi znajdziesz, klikając właśnie wdrożony model usługi.

Adres URL usługi Google Cloud Find

W sekcji LOGS możesz sprawdzać aktywność, wyświetlać komunikaty o błędach i śledzić postęp wdrożenia.

Plik dziennika Cloud Run w konsoli Google Cloud

Dane usługi możesz wyświetlić w sekcji DANE.

Dane Cloud Run w konsoli Google Cloud

5-d: wczytywanie modeli hostowanych lokalnie

Jeśli w kroku 3 użyjesz serwera proxy dla serwera LIT (patrz sekcja Rozwiązywanie problemów), musisz uzyskać token tożsamości GCP, wykonując to polecenie.

# Find your GCP identity token.
gcloud auth print-identity-token

Poniższe czynności pozwolą Ci załadować hostowane samodzielnie modele i dostosować ich parametry.

  1. Kliknij opcję Configure w interfejsie LIT.
  2. Wybierz opcję LLM (self hosted) w sekcji Select a base model.
  3. W pliku new_name musisz nadać nazwę modelowi.
  4. Wpisz adres URL serwera modelu w postaci base_url.
  5. Wpisz uzyskany token tożsamości w identity_token, jeśli korzystasz z serwera proxy aplikacji LIT (patrz kroki 3 i 7). W przeciwnym razie pozostaw je puste.
  6. Kliknij Load Model.
  7. Kliknij Submit.

LIT Load LLM Models

6. Interakcje z zespołem pomocy Google Cloud

LIT oferuje bogaty zestaw funkcji, które ułatwiają debugowanie i rozumienie zachowań modelu. Możesz wykonać proste zapytanie do modelu, wpisując tekst w polu i sprawdzając prognozy modelu, lub dokładniej przyjrzeć się modelom za pomocą zestawu zaawansowanych funkcji LIT, takich jak:

6-a: Przesyłanie zapytania do modelu za pomocą interfejsu LIT

Po wczytaniu modelu i zbioru danych LIT automatycznie wysyła zapytanie do zbioru danych. Aby wyświetlić odpowiedź każdego modelu, wybierz odpowiedź w kolumnach.

LIT View Response

Odpowiedź LIT

6-b: Użycie techniki określania skuteczności sekwencyjnej

Obecnie technika Sequence Salience w LIT obsługuje tylko modele własne.

Wyraźność sekwencji to narzędzie wizualne, które ułatwia debugowanie promptów LLM, ponieważ wyróżnia te części promptu, które są najważniejsze dla danego wyjścia. Więcej informacji o tej funkcji znajdziesz w samouczku.

Aby uzyskać dostęp do wyników dotyczącego znaczenia, kliknij dowolne dane wejściowe lub wyjściowe w promptach bądź odpowiedziach. Wyniki dotyczące znaczenia zostaną wyświetlone.

Wyniki testu LIT Sequence Salience

6-c: Prompt i cel edycji Manullay

LIT umożliwia ręczne edytowanie wartości prompttarget dla istniejącego punktu danych. Gdy klikniesz Add, nowe dane wejściowe zostaną dodane do zbioru danych.

LIT Mannully Edit

6 d: porównaj prompty obok siebie

LIT umożliwia bezpośrednie porównywanie promptów z oryginalnymi i edytowanymi przykładami. Możesz ręcznie edytować przykład i wyświetlić wynik przewidywania oraz analizę znaczenia sekwencji zarówno w wersji oryginalnej, jak i zmienionej. Możesz zmodyfikować prompt dla każdego punktu danych, a LIT wygeneruje odpowiednią odpowiedź, wysyłając zapytanie do modelu.

Porównywanie zbiorów danych LIT

6-e: Porównaj ze sobą kilka modeli

LIT umożliwia bezpośrednie porównywanie modeli na poszczególnych wygenerowanych tekstach i przykładach punktacji, a także na zbiorczych przykładach dotyczących konkretnych wskaźników. Wysyłając zapytanie do różnych załadowanych modeli, możesz łatwo porównać różnice w ich odpowiedziach.

LIT Porównaj odpowiedź modelu

6-f: Automatyczne kontrfaktyczne generatory

Możesz używać automatycznych generatorów kontrafaktualnych, aby tworzyć alternatywne dane wejściowe i od razu sprawdzać, jak zachowuje się Twój model.

LIT automatycznie generuje dane wejściowe

6-g. Ocenianie skuteczności modelu

Wydajność modelu możesz ocenić za pomocą wskaźników (obecnie obsługują wyniki BLEU i ROUGE do generowania tekstu) w całym zbiorze danych lub dowolnych podzbiorach filtrowanych lub wybranych przykładów.

Dane modelu widoku LIT

7. Rozwiązywanie problemów

7-a: Potencjalne problemy z dostępem i ich rozwiązania

Podczas wdrażania do Cloud Run jest stosowany parametr --no-allow-unauthenticated, więc możesz napotkać błędy dostępu, jak pokazano poniżej.

Błąd Forbidden w Google Cloud

Dostęp do usługi aplikacji LIT można uzyskać na 2 sposoby.

1. Serwer proxy do usługi lokalnej

Możesz przekierować usługę do hosta lokalnego za pomocą podanego niżej polecenia.

# Proxy the service to local host.
gcloud run services proxy $LIT_SERVICE_NAME

Następnie powinieneś mieć dostęp do serwera LIT, klikając link do usługi proxy.

2. Bezpośrednie uwierzytelnianie użytkowników

Aby uwierzytelnić użytkowników i zezwolić na bezpośredni dostęp do usługi aplikacji LIT, możesz użyć tego linku. Dzięki temu możesz też przyznać dostęp do usługi grupie użytkowników. W przypadku prac wymagających współpracy z wieloma osobami jest to skuteczniejsze rozwiązanie.

7-b: Sprawdzanie, czy serwer modelu został uruchomiony

Aby sprawdzić, czy serwer modelu został uruchomiony, możesz wysłać do niego zapytanie. Serwer modelu udostępnia 3 punkty końcowe: predict, tokenizesalience. Pamiętaj, aby w prośbie podać pola prompttarget.

# Query the model server predict endpoint.
curl -X POST  http://YOUR_MODEL_SERVER_URL/predict -H "Content-Type: application/json" -d '{"inputs":[{"prompt":"[YOUR PROMPT]", "target":[YOUR TARGET]}]}'

# Query the model server tokenize endpoint.
curl -X POST  http://YOUR_MODEL_SERVER_URL/tokenize -H "Content-Type: application/json" -d '{"inputs":[{"prompt":"[YOUR PROMPT]", "target":[YOUR TARGET]}]}'

# Query the model server salience endpoint.
curl -X POST  http://YOUR_MODEL_SERVER_URL/salience -H "Content-Type: application/json" -d '{"inputs":[{"prompt":"[YOUR PROMPT]", "target":[YOUR TARGET]}]}'

Jeśli napotkasz problem z dostępem, zapoznaj się z sekcją 7a powyżej.

8. Gratulacje

Gratulujemy ukończenia ćwiczeń z programowania. Czas na relaks!

Czyszczenie danych

Aby wyczyścić laboratorium, usuń wszystkie usługi Google Cloud utworzone na potrzeby laboratorium. Użyj Google Cloud Shell do uruchomienia tych poleceń.

Jeśli połączenie z Google Cloud zostanie utracone z powodu braku aktywności, zresetuj zmienne, wykonując czynności opisane powyżej.

# Delete the LIT App Service.
gcloud run services delete $LIT_SERVICE_NAME

Jeśli uruchomiono serwer modelu, musisz też usunąć serwer modelu.

# Delete the Model Service.
gcloud run services delete $MODEL_SERVICE_NAME

Więcej informacji

Aby dowiedzieć się więcej o funkcjach narzędzia LIT, skorzystaj z tych materiałów:

  • Gemma: link
  • Baza kodu open source LIT: repozytorium Git
  • Dokument LIT: ArXiv
  • Dokument na temat debugowania promptów LIT: ArXiv
  • Demonstracja funkcji LIT w filmie: YouTube
  • Prezentacja debugowania promptu LIT: YouTube
  • Zestaw narzędzi odpowiedzialnej generatywnej AI: link

Nawiązanie kontaktu,

Jeśli masz pytania lub problemy związane z tym Codelab, skontaktuj się z nami na GitHub.

Licencja

To zadanie jest licencjonowane na podstawie ogólnej licencji Creative Commons Uznanie autorstwa 4.0.