Ł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 korzystania z interfejsu LIT do szybkiego debugowania i interpretacji modelu.

W tym module użytkownicy dowiedzą się, jak:

  • Skonfiguruj serwer LIT w GCP.
  • Połącz serwer LIT z modelami Gemini Vertex AI lub innymi hostowanymi lokalnie LLM.
  • Korzystaj z interfejsu LIT, aby analizować, debugować i interpretować prompty, co pozwoli Ci zwiększyć skuteczność modelu i uzyskać więcej 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 systemów uczących się oraz aplikacji AI oraz dostosowywanie modeli LLM do stosowania 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.

Co należy zrobić

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 otworzysz 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 można otworzyć w dowolnym miejscu 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 też tworzyć, kompilować, debugować i wdrażać aplikacje działające w chmurze przy użyciu edytora Cloud Shell online. 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).

Uruchomienie konsoli Google Cloud

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. Wdróż aplikację 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. Format zbioru danych powinien być .jsonl, a każdy rekord powinien zawierać pole prompt oraz opcjonalne pola targetsource. 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 parametru MAX_EXAMPLES pozwala określić maksymalną liczbę przykładów do załadowania z każdego zbioru do 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świetlanie 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 demo LIT

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

3-c. Wczytaj zbiory 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.

Zbiór danych LIT Load

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, aby można było używać tych modeli do generowania. 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ę 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 rolą Vertex AI User na liście dozwolonych uprawnień uprawnień IAM.

Dodawanie adresu e-mail konta usługi

4-b. Wczytaj modele Gemini

Postępując zgodnie z podanymi niżej instrukcjami, załaduj modele Gemini i dostosuj 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

Samodzielne hostowanie LLM z obrazem Dockera serwera modelu LIT umożliwia korzystanie z funkcji saliencji i tokenizacji, aby uzyskać lepszy 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 może być konieczne wprowadzenie pewnych korekt.

# 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 backendowa do głębokiego uczenia się, 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 nadać nazwę serwerowi model-server.

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

Następnie uruchom to polecenie, aby wdrożyć kontener do Cloud Run. Jeśli nie skonfigurujesz 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ędniaj 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ę można znaleźć 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.

URL usługi Google Cloud Find

W sekcji LOGS możesz monitorować 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. W opcji Select a base model wybierz opcję LLM (self hosted).
  3. Musisz nadać nazwę modelowi w sekcji new_name.
  4. W polu base_url wpisz adres URL serwera modelu.
  5. Wpisz uzyskany token tożsamości w polu identity_token, jeśli używasz serwera aplikacji LIT jako serwera proxy (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. Możesz wyświetlić odpowiedź każdego modelu, wybierając ją w kolumnach.

LIT View Response

Odpowiedź LIT

6-b. Użyj techniki wyróżniania sekwencji

Obecnie technika sekwencyjnego wyróżniania w ramach interfejsu Language Identification Tool obsługuje tylko modele hostowane lokalnie.

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 lub odpowiedziach. Wyniki dotyczące znaczenia zostaną wyświetlone.

Wyniki testu LIT Sequence Salience

6-c. Ręczne edytowanie promptu i miejsca docelowego

LIT umożliwia ręczne edytowanie wartości prompttarget dla istniejącego punktu danych. Kliknięcie Add spowoduje dodanie nowego źródła danych do zbioru danych.

LIT Mannully Edit

6-d: Porównaj prompty obok siebie

LIT umożliwia porównywanie promptów obok siebie w przypadku oryginalnych i zmienionych przykładów. Możesz ręcznie edytować przykład i wyświetlić wynik przewidywania oraz analizę wyrazistości 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

Interakcja z modelem umożliwia porównywanie modeli na podstawie pojedynczych przykładów generowania i oceny tekstu, a także zbiorczych przykładów pod kątem określonych danych. 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 generatory kontrafaktycznych

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

Możesz oceniać skuteczność modelu za pomocą danych (obecnie obsługujemy wyniki BLEU i ROUGE w przypadku generowania tekstu) w całym zbiorze danych lub w dowolnych podzbiorach przefiltrowanych lub wybranych przykładów.

Dane modelu LIT View

7. Rozwiązywanie problemów

7-a: Możliwe 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 Google Cloud Forbidden

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

1. Pośrednictwo w usługach lokalnych

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 umożliwić im bezpośredni dostęp do usługi aplikacji LIT, kliknij ten link. Dzięki temu możesz też przyznać dostęp do usługi grupie użytkowników. W przypadku projektowania z udziałem wielu osób jest to skuteczniejsza opcja.

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 odpoczynek.

Czyszczenie danych

Aby wyczyścić laboratorium, usuń wszystkie usługi Google Cloud utworzone na potrzeby laboratorium. Użyj Google Cloud Shell, aby uruchomić te polecenia.

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, zapoznaj się z tymi materiałami:

  • Gemma: link
  • Baza kodu źródłowego open source LIT: repozytorium Git
  • Dokument LIT: ArXiv
  • Dokument na temat debugowania promptów LIT: ArXiv
  • Demonstracja funkcji LIT w filmie: YouTube
  • Demo debugowania prompta 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.