Dostrajanie dużych modeli językowych: jak Vertex AI przenosi LLM na wyższy poziom

1. Wprowadzenie

Dlaczego dokładne dostosowanie jest ważne

Modele podstawowe są trenowane do ogólnych zastosowań i czasami nie wykonują zadań zgodnie z oczekiwaniami. Może to być spowodowane tym, że zadania, które chcesz wykonywać za pomocą modelu, są zadaniami specjalistycznymi, które trudno jest nauczyć model tylko za pomocą promptu. W takich przypadkach możesz użyć dostrajania modelu, aby poprawić jego wydajność w przypadku określonych zadań. Dostrajanie modelu może również pomóc w spełnieniu określonych wymagań dotyczących danych wyjściowych, gdy instrukcje nie są wystarczające. Duże modele językowe (LLM) mogą zawierać ogromną ilość informacji i wykonywać wiele zadań, ale sprawdzają się tylko wtedy, gdy są trenowane w specjalistyczny sposób. Dostrojenie może służyć do trenowania modelu LLM, co pozwala dostosować wytrenowany wstępnie model LLM do Twoich potrzeb.

Z tego ćwiczenia w Codelab dowiesz się, jak przeprowadzić dostrojenie za pomocą podejścia nadzorowanego w przypadku modelu LLM.

Dostrajanie nadzorowane poprawia wydajność modelu przez nauczenie go nowej umiejętności. Dane zawierające setki przykładów z etykietami służą do nauczenia modelu naśladowania pożądanego zachowania lub zadania. Dostarczymy zbiory danych z oznaczonymi tekstami wejściowymi (promptami) i tekstami wyjściowymi (odpowiedziami), aby nauczyć model, jak dostosowywać odpowiedzi do konkretnego zastosowania.

Więcej informacji o dostosowywaniu modelu znajdziesz tutaj.

Co utworzysz

Przypadek użycia: generowanie nagłówków artykułów informacyjnych

Załóżmy, że chcesz automatycznie generować nagłówki artykułów z wiadomościami. Korzystając z Vertex AI, możesz dostosować model LLM, który generuje odpowiedni tytuł podsumowania w określonym stylu i dostosowuje go zgodnie ze wskazówkami kanału wiadomości.

W tym ćwiczeniu:

  • Użyj funkcji BBC FULLTEXT DATA (udostępnionej przez publiczny zbiór danych BigQuery bigquery-public-data.bbc_news.fulltext).
  • Dostroj model LLM (text-bison@002) do nowego modelu dostosowanego o nazwie „bbc-news-summary-tuned” i porównaj wynik z odpowiedzią modelu podstawowego. Przykładowy plik JSONL jest dostępny w repozytorium dla tego Codelab. Możesz przesłać plik do zasobnika Cloud Storage i wykonywać te czynności w ramach dokładnego dostrajania:
  • Przygotuj dane: zacznij od zbioru danych z artykułami i odpowiednimi nagłówkami, np. zbioru danych BBC News użytego w przykładowym kodzie.
  • Dostosowywanie wytrenowanego wcześniej modelu: wybierz model podstawowy, np. „text-bison@002”, i dostosuj go do swoich danych o wiadomościach za pomocą pakietu Vertex AI SDK for Python.
  • Oceń wyniki: porównaj skuteczność dostrojonego modelu z modelem podstawowym, aby sprawdzić, czy poprawiła się jakość generowania nagłówków.
  • Wdróż i używaj modelu: udostępnij dopracowany model za pomocą punktu końcowego interfejsu API i zacznij automatycznie generować nagłówki nowych artykułów.

2. Zanim zaczniesz

  1. W konsoli Google Cloud na stronie selektora projektu wybierz lub utwórz projekt Google Cloud.
  2. Sprawdź, czy w projekcie Google Cloud włączone są płatności. Dowiedz się, jak sprawdzić, czy w projekcie są włączone płatności.
  3. Otwórz notatnika Colab i zaloguj się na to samo konto, na którym masz aktywne konto Google Cloud.

3. Dostosowywanie dużego modelu językowego

W tym CodeLab do dostrojenia modelu używamy pakietu Vertex AI SDK dla Pythona. Dokładne dostosowanie możesz też wykonać za pomocą innych opcji: HTTP, polecenia CURL, pakietu Java SDK i konsoli.

Możesz dostosować i ocenić model pod kątem spersonalizowanych odpowiedzi w 5 krokach. Pełny kod znajdziesz w pliku llm_fine_tuning_supervised.ipynbrepozytorium.

4. Krok 1. Zainstaluj i importuj zależności

!pip install google-cloud-aiplatform
!pip install --user datasets
!pip install --user google-cloud-pipeline-components

Wykonaj pozostałe czynności opisane w pliku .ipynb w repozytorium. Zastąp fragmenty PROJECT_ID i BUCKET_NAME swoimi danymi logowania.

import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'
import warnings
warnings.filterwarnings('ignore')
import vertexai
vertexai.init(project=PROJECT_ID, location=REGION)
import kfp
import sys
import uuid
import json
import pandas as pd
from google.auth import default
from datasets import load_dataset
from google.cloud import aiplatform
from vertexai.preview.language_models import TextGenerationModel, EvaluationTextSummarizationSpec

5. Krok 2. Przygotuj i załaduj dane do trenowania

Zastąp YOUR_BUCKET swoim zasobnikiem i prześlij do niego przykładowy plik danych treningowych TRAIN.jsonl. Przykładowe dane zostały przygotowane do tego zastosowania pod podanym powyżej linkiem.

json_url = 'https://storage.googleapis.com/YOUR_BUCKET/TRAIN.jsonl'
df = pd.read_json(json_url, lines=True)
print (df)

Powinien on przynieść następujący efekt:

17274866af36a47c.png

6. Krok 3. Dopracowywanie dużego modelu językowego

W tej chwili możesz dostosować dowolny duży model językowy (w zależności od dostępności obsługi) . W tym fragmencie kodu dostrajamy wytrenowany wcześniej model „text-bison@002” za pomocą ramki danych zawierającej dane treningowe załadowane w poprzednim kroku:

model_display_name = 'bbc-finetuned-model' # @param {type:"string"}
tuned_model = TextGenerationModel.from_pretrained("text-bison@002")
tuned_model.tune_model(
training_data=df,
train_steps=100,
tuning_job_location="europe-west4",
tuned_model_location="europe-west4",
)

Ten krok może potrwać kilka godzin. Postępy dostrajania możesz śledzić, korzystając z linku do zadania w potoku w wyniku.

7. Krok 4. Przeprowadzanie prognoz za pomocą nowego dopracowanego modelu

Po zakończeniu zadania dokładnego dostrojenia będziesz mieć możliwość prognozowania za pomocą nowego modelu. Aby prognozować za pomocą nowego dostrojonego modelu:

response = tuned_model.predict("Summarize this text to generate a title: \n Ever noticed how plane seats appear to be getting smaller and smaller? With increasing numbers of people taking to the skies, some experts are questioning if having such packed out planes is putting passengers at risk. They say that the shrinking space on aeroplanes is not only uncomfortable it it's putting our health and safety in danger. More than squabbling over the arm rest, shrinking space on planes putting our health and safety in danger? This week, a U.S consumer advisory group set up by the Department of Transportation said at a public hearing that while the government is happy to set standards for animals flying on planes, it doesn't stipulate a minimum amount of space for humans.")
print(response.text)

Powinien pojawić się taki wynik:

67061c36b7ba39b7.png

Aby dokonać porównania, utwórz prognozy za pomocą modelu podstawowego (text-bison@002), wykonując te polecenia:

base_model = TextGenerationModel.from_pretrained("text-bison@002")
response = base_model.predict("Summarize this text to generate a title: \n Ever noticed how plane seats appear to be getting smaller and smaller? With increasing numbers of people taking to the skies, some experts are questioning if having such packed out planes is putting passengers at risk. They say that the shrinking space on aeroplanes is not only uncomfortable it it's putting our health and safety in danger. More than squabbling over the arm rest, shrinking space on planes putting our health and safety in danger? This week, a U.S consumer advisory group set up by the Department of Transportation said at a public hearing that while the government is happy to set standards for animals flying on planes, it doesn't stipulate a minimum amount of space for humans.")
print(response.text)

Powinien pojawić się taki wynik:

22ec58e4261405d6.png

Mimo że oba wygenerowane tytuły wyglądają dobrze, pierwszy z nich (wygenerowany za pomocą dopracowanego modelu) jest bardziej zgodny ze stylem tytułów używanych w danym zbiorze danych.

Wczytaj dostrojony model

Łatwiej może być załadować model, który został właśnie dostrojony. Pamiętaj jednak, że w kroku 3 jest on wywoływany w zakresie samego kodu, więc nadal zawiera dostosowany model w zmiennej tuned_model. Co jednak, jeśli chcesz wywołać model, który został dostrojony w przeszłości?

Aby to zrobić, możesz wywołać metodę get_tuned_model() w LLM z pełnym adresem URL ENDPOINT wdrożonego dostrojonego modelu z Vertex AI Model Registry. Pamiętaj, że w tym przypadku zamiast identyfikatorów wpisujesz odpowiednio PROJECT_NUMBER i MODEL_NUMBER.

tuned_model_1 = TextGenerationModel.get_tuned_model("projects/<<PROJECT_NUMBER>>/locations/europe-west4/models/<<MODEL_NUMBER>>")
print(tuned_model_1.predict("YOUR_PROMPT"))

8. Krok 5. Oceń nowy model po dopracowaniu

Ocena jest kluczowym aspektem oceny jakości i trafności wygenerowanej odpowiedzi. Polega ono na badaniu wyników generatywnego modelu językowego w celu określenia ich spójności, dokładności i zgodności z podanym promptem. Ocena modelu pomaga określić obszary wymagające poprawy, zoptymalizować wydajność modelu i zadbać o to, aby generowany tekst spełniał oczekiwane standardy jakości i użyteczności. Więcej informacji znajdziesz w dokumentacji. Zobaczymy teraz, jak możemy uzyskać dane o ocenie modelu dostosowanego i porównać je z modelem podstawowym.

  1. Wczytaj zbiór danych do oceny:
json_url = 'https://storage.googleapis.com/YOUR_BUCKET/EVALUATE.jsonl'
df = pd.read_json(json_url, lines=True)
print (df)
  1. Określ specyfikację oceny zadania podsumowania tekstu na podstawie dopracowanego modelu.
task_spec = EvaluationTextSummarizationSpec(
 task_name = "summarization",
 ground_truth_data=df
)

Wykonanie tego kroku może potrwać kilka minut. Postępy możesz śledzić, korzystając z linku do zadania w pipeline podanego w wyniku. Po zakończeniu procesu powinien pojawić się ten wynik oceny:

387843d6c970e02.png

Dane rougeLSum w wyniku oceny określają wynik ROUGE-L podsumowania. ROUGE-L to wskaźnik oparty na przywołaniu, który mierzy pokrycie podsumowania i podsumowania referencyjnego. Jest ona obliczana przez wybranie najdłuższego wspólnego podciągu (LCS) między dwoma podsumowaniami i podzielenie go przez długość podsumowania referencyjnego.

Wynik rougeLSum w podanej formule to 0,36600753600753694, co oznacza, że podsumowanie pokrywa się z podsumowaniem referencyjnym w 36,6%.

Jeśli wykonasz krok oceny na modelu bazowym, zauważysz, że wynik podsumowania jest względnie wyższy w przypadku modelu dopracowanego.

Wyniki oceny znajdziesz w katalogu Cloud Storage, który został wskazany podczas tworzenia zadania oceny. Plik ma nazwę evaluation_metrics.json. W przypadku dostrojonych modeli możesz też wyświetlić wyniki oceny w konsoli Google Cloud na stronie Rejestr modeli w Vertex AI.

9. Ważne kwestie

  • Obsługiwane modele: informacje o najnowszych modelach zgodnych z usługą znajdziesz w dokumentacji.
  • Szybki rozwój: dziedzina modeli językowych LLM rozwija się bardzo dynamicznie. Nowszy, wydajniejszy model może być skuteczniejszy niż dostrojony model utworzony na podstawie starszego modelu podstawowego. Dobra wiadomość jest taka, że gdy ta funkcja stanie się dostępna, będzie można stosować te techniki dostosowania do nowych modeli.
  • LoRA: LoRA to technika efektywnego dostrajania modeli LLM. Dokonuje tego przez wprowadzenie do warstw istniejącego wytrenowanego modelu trenowalnych macierzy dekompozycji o niskim rzędzie. Więcej informacji znajdziesz tutaj. Zamiast aktualizować wszystkie parametry dużego modelu LLM, LoRA uczy się mniejszych macierzy, które są dodawane do macierzy wag oryginalnego modelu lub mnożone przez nie. Dzięki temu znacznie zmniejsza się liczba dodatkowych parametrów wprowadzanych podczas dopracowywania.

10. Czyszczenie danych

Aby uniknąć obciążenia konta Google Cloud opłatami za zasoby wykorzystane w tym ćwiczeniu, wykonaj te czynności:

  1. W konsoli Google Cloud otwórz stronę Zarządzanie zasobami.
  2. Na liście projektów wybierz projekt do usunięcia, a potem kliknij Usuń.
  3. W oknie wpisz identyfikator projektu i kliknij Wyłącz, aby usunąć projekt.
  4. Możesz też otworzyć Model Registry, przejść na kartę Wdróż i testuj model, a następnie wycofać wdrożenie punktu końcowego i usunąć wdrożony model.

11. Gratulacje

Gratulacje! Udało Ci się użyć Vertex AI do dopracowania modelu LLM. Dostrojenie to zaawansowana technika, która umożliwia dostosowanie modeli LLM do Twojej domeny i zadań. Vertex AI zapewnia narzędzia i zasoby potrzebne do wydajnego i skutecznego dostrajania modeli.

Przeglądaj repozytoria GitHub i eksperymentuj z przykładowym kodem, aby na własnej skórze przekonać się, jak działa dostrajanie i ocena. Zastanów się, jak dopracowane modele LLM mogą spełniać Twoje konkretne potrzeby, od generowania ukierunkowanych treści marketingowych po streszczanie złożonych dokumentów czy tłumaczenie języków z uwzględnieniem niuansów kulturowych. Korzystaj z obszernego zestawu narzędzi i usług oferowanych przez Vertex AI, aby łatwo tworzyć, trenować, oceniać i wdrażać dopracowane modele.