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

1. Wprowadzenie

Dlaczego dostrajanie ma znaczenie

Modele podstawowe są trenowane do celów ogólnych i niekiedy nie wykonują zadań tak, jak chcesz. Może to wynikać z tego, że zadania, które ma wykonać model, to specjalistyczne zadania, których trudno jest nauczyć modelu przy użyciu samego projektowania promptów. W takich przypadkach możesz użyć dostrajania modelu, aby poprawić jego wydajność w przypadku określonych zadań. Dostrajanie modelu może też 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ć ogromne ilości informacji i wykonywać wiele zadań, ale są doskonałe tylko wtedy, gdy zostaną odpowiednio przeszkolone. Dostrajanie może wytrenować LLM, co pozwoli Ci dostosować wytrenowany model do własnych potrzeb.

Z tego ćwiczenia w Codelabs dowiesz się, jak dostrajać model LLM z użyciem metody dostrajania nadzorowanego.

Dostrajanie nadzorowane poprawia wydajność modelu przez nauczanie nowej umiejętności. Dane, które zawierają setki oznaczonych etykietami przykładów, są używane do nauki modelu naśladowania pożądanego zachowania lub zadania. Udostępnimy zbiór danych oznaczony etykietami w przypadku tekstu wejściowego (promptu) i tekstu wyjściowego (odpowiedzi), aby nauczyć model, jak dostosowywać odpowiedzi do konkretnego przypadku użycia.

Więcej informacji o dostosowywaniu modelu znajdziesz tutaj.

Co utworzysz

Przykład zastosowania: generowanie nagłówków artykułów z wiadomościami

Załóżmy, że chcesz automatycznie generować nagłówki artykułów z wiadomościami. Za pomocą Vertex AI możesz dostroić LLM generujący odpowiedni podsumowany tytuł w określonym stylu i dostosowując go zgodnie z wytycznymi kanału informacyjnego.

W ramach tego ćwiczenia w Codelabs:

  • Użyj metody BBC FULLTEXT DATA (udostępnionej przez publiczny zbiór danych BigQuery bigquery-public-data.bbc_news.fulltext).
  • Dostrój LLM (text-bison@002) do nowego dostrojonego modelu o nazwie „bbc-news-summary-tuned” i porównasz wynik z odpowiedzią modelu podstawowego. W repozytorium jest dostępny przykładowy plik JSONL do tego ćwiczenia z programowania. Możesz przesłać plik do zasobnika Cloud Storage i wykonać te kroki dostrajania:
  • Przygotuj dane: zacznij od zbioru danych zawierającego artykuły z wiadomościami wraz z odpowiadającymi im nagłówkami, np. zbiór danych BBC News użyty w przykładowym kodzie.
  • Dostrajanie wytrenowanego modelu: wybierz model podstawowy, taki jak „text-bison@002”. i dostrajać je na podstawie swoich danych za pomocą pakietu SDK Vertex AI dla Pythona.
  • Ocena wyników: porównaj skuteczność dostrojonego modelu z modelem podstawowym, by sprawdzić, jak poprawiła się jakość generowania nagłówków.
  • Wdróż i używaj modelu: udostępnij dostrojony model przez punkt końcowy interfejsu API i zacznij automatycznie generować nagłówki nowych artykułów.

2. Zanim zaczniesz

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

3. Dostrajanie dużego modelu językowego

W ramach tych ćwiczeń w Codelabs używany jest Vertex AI SDK dla Pythona, aby dostroić model. Możesz też dostrajać je za pomocą innych opcji – HTTP, polecenia CURL, pakietu Java SDK lub konsoli.

W 5 krokach możesz dostroić i ocenić model pod kątem dostosowanych odpowiedzi. Pełny kod znajdziesz w pliku llm_fine_tuning_supervised.ipynb z repozytorium.

4. Krok 1. Zainstaluj i zaimportuj 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. Pamiętaj, aby zastąpić 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 wczytaj dane treningowe

Zastąp TWÓJ_ZASOBNIK swoim zasobnikiem i prześlij do niego przykładowy plik danych treningowych TRAIN.jsonl. W linku powyżej udostępniliśmy przykładowe dane na potrzeby tego przypadku użycia.

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

Ten krok powinien sprawić, że:

17274866af36a47c.png

6. Krok 3. Dostrój duży model językowy

W tym momencie możesz dostroić dowolny duży model językowy (na podstawie dostępności pomocy) . Jednak w tym fragmencie dostrajamy już wytrenowany model „text-bison@002” ramką danych z danymi treningowymi wczytanymi 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",
)

Wykonanie tego kroku może zająć kilka godzin. Postęp dostrajania możesz śledzić, korzystając z linku do zadania potoku w wyniku.

7. Krok 4. Przeprowadź prognozę przez zastosowanie nowego dostrojonego modelu

Po zakończeniu zadania dostrajania możesz przeprowadzać prognozy w nowym modelu. Aby prognozować na podstawie 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ę następujący wynik:

67061c36b7ba39b7.png

Aby wygenerować prognozę na podstawie modelu podstawowego (text-bison@002) w celu porównania, uruchom 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ę następujący wynik:

22ec58e4261405d6.png

Choć oba wygenerowane tytuły wyglądają odpowiednio, pierwszy (wygenerowany za pomocą dostrojonego modelu) lepiej pasuje do stylu tytułów używanych w danym zbiorze danych.

Wczytaj model dostrojony

Łatwiejsze może być wczytanie modelu, który przed chwilą dostrojony. Pamiętaj jednak, że w kroku 3 jest on wywoływany w zakresie samego kodu, więc nadal przechowuje dostrojony model w zmiennej dostrojone_model. Co jednak w sytuacji, gdy chcesz wywołać model dostrojony w przeszłości?

W tym celu możesz wywołać metodę get_tuned_model() w LLM z pełnym adresem URL punktu końcowego wdrożonego dostrojonego modelu z Vertex AI Model Registry. Pamiętaj, że w tym przypadku zamiast odpowiednich identyfikatorów podajesz 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 dostrojony model

Ocena jest kluczowym aspektem oceny jakości i trafności wygenerowanej odpowiedzi. Polega ona na analizowaniu danych wyjściowych generowanych przez generatywny model językowy w celu określenia ich spójności, dokładności i zgodności z podanym promptem. Ocena modelu pomaga zidentyfikować obszary wymagające poprawy, zoptymalizować wydajność modelu i zapewnić, że wygenerowany tekst spełnia pożądane standardy jakości i przydatności. Więcej informacji na ten temat znajdziesz w dokumentacji. Na razie pokażemy, jak można uzyskać niektóre wskaźniki oceny z dostrojonego modelu i porównać go z modelem podstawowym.

  1. Wczytaj zbiór danych EVALUATION:
json_url = 'https://storage.googleapis.com/YOUR_BUCKET/EVALUATE.jsonl'
df = pd.read_json(json_url, lines=True)
print (df)
  1. Zdefiniuj specyfikację oceny dla zadania podsumowywania tekstu na dostrojonym modelu.
task_spec = EvaluationTextSummarizationSpec(
 task_name = "summarization",
 ground_truth_data=df
)

Wykonanie tego kroku może potrwać kilka minut. Postęp możesz śledzić, korzystając z dostępnego w wynikach linku do zadania potoku. Po zakończeniu oceny powinien pojawić się następujący wynik oceny:

387843d6c970e02.png

Dane rougeLSum w wyniku oceny określają wynik ROUGE-L dla podsumowania. ROUGE-L to wskaźnik bazujący na czułości, który mierzy pokrywanie się podsumowania i podsumowania referencyjnego. Aby go obliczyć, dzielimy najdłuższy wspólny podciąg (LCS) z obu podsumowań przez długość podsumowania referencyjnego.

Wynik rougeLSum w podanym wyrażeniu to 0,36600753600753694, co oznacza, że podsumowanie pokrywa się z podsumowaniem pliku referencyjnego w 36,6%.

Jeśli przeprowadzisz etap oceny na modelu bazowym, zauważysz, że wynik podsumowania jest względnie wyższy w przypadku dostrojonego modelu.

Wyniki oceny znajdziesz w katalogu wyjściowym Cloud Storage określonym podczas tworzenia zadania oceniania. Plik nazywa się evaluation_metrics.json. W przypadku dostrojonych modeli możesz też wyświetlić wyniki oceny w konsoli Google Cloud na stronie Model Registry w Vertex AI.

9. Ważne informacje

  • Pomoc dotycząca modelu: najnowszą zgodność zawsze znajdziesz w dokumentacji modelu.
  • Szybki rozwój: dziedzina LLM szybko się rozwija. Nowszy, wydajniejszy model może potencjalnie przewyższać model dostrojony na bazie starszej wersji. Dobra wiadomość jest taka, że możesz zastosować te techniki dostrajania w nowszych modelach, gdy taka funkcja stanie się dostępna.
  • LoRA: LoRA to technika skutecznego dostrajania LLM. Robi to przez wprowadzenie możliwych do trenowania macierzy rozkładu niskiego rangi do istniejących już wytrenowanych warstw modelu. Więcej informacji na ten temat znajdziesz tutaj. Zamiast aktualizować wszystkie parametry ogromnego LLM, LoRA uczy się mniejszych macierzy, które są dodawane do macierzy wag oryginalnego modelu lub przez nie mnożone. Pozwala to znacznie ograniczyć liczbę dodatkowych parametrów wprowadzanych podczas dostrajania.

10. Czyszczenie danych

Aby uniknąć obciążenia konta Google Cloud opłatami za zasoby zużyte w tym ćwiczeniu z programowania, 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, otworzyć kartę wdrażania i testowania modelu, wycofać wdrożenie punktu końcowego i usunąć wdrożony model dostrojony.

11. Gratulacje

Gratulacje! Udało Ci się użyć Vertex AI do dostrojenia modelu LLM. Dostrajanie to zaawansowana technika, która umożliwia dostosowywanie modeli LLM do domeny i zadań. Vertex AI udostępnia narzędzia i zasoby potrzebne do wydajnego i efektywnego dostrajania modeli.

Przejrzyj repozytoria GitHub i eksperymentuj z przykładowym kodem, aby bezpośrednio dostrajać i oceniać. Zastanów się, w jaki sposób dostrojone duże modele językowe mogą sprostać Twoim konkretnym potrzebom, od generowania ukierunkowanego tekstu marketingowego po streszczanie złożonych dokumentów czy tłumaczenie języków z uwzględnieniem kulturowych niuansów. Korzystaj z kompleksowego zestawu narzędzi i usług oferowanych przez Vertex AI, aby łatwo tworzyć, trenować, oceniać i wdrażać dopracowane modele.