1. Wprowadzenie
Dlaczego dostrajanie ma znaczenie
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, aby model wykonywał, są specjalistyczne i trudno jest nauczyć model ich wykonywania za pomocą samego projektowania promptów. W takich przypadkach możesz użyć dostrajania modelu, aby poprawić jego wydajność w wykonywaniu 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ć ogromne ilości informacji i wykonywać wiele zadań, ale osiągają najlepsze wyniki tylko wtedy, gdy są specjalistycznie trenowane. Dostrojenie może wytrenować LLM, co pozwala dostosować wstępnie wytrenowany LLM do Twoich konkretnych potrzeb.
Z tego ćwiczenia dowiesz się, jak przeprowadzić dostrajanie modelu LLM za pomocą metody dostrajania nadzorowanego.
Dostrajanie nadzorowane zwiększa wydajność modelu, ucząc go nowych umiejętności. Dane zawierające setki oznaczonych etykietami przykładów są używane do nauczenia modelu naśladowania pożądanego zachowania lub zadania. Dostarczymy oznaczony zbiór danych z tekstem wejściowym (promptem) i tekstem wyjściowym (odpowiedzią), aby nauczyć model dostosowywania odpowiedzi do naszego konkretnego przypadku użycia.
Więcej informacji o dostosowywaniu modeli znajdziesz tutaj.
Co utworzysz
Przypadek użycia: generowanie nagłówków artykułów
Załóżmy, że chcesz automatycznie generować nagłówki artykułów informacyjnych. Za pomocą Vertex AI możesz dostroić LLM, który generuje odpowiedni tytuł podsumowania w określonym stylu i dostosowuje go do wytycznych kanału informacyjnego.
W tym ćwiczeniu wykonasz te czynności:
- Użyj
BBC FULLTEXT DATA(udostępnionego przez publiczny zbiór danych BigQuerybigquery-public-data.bbc_news.fulltext). - Dostrój model LLM (
text-bison@002) do nowego modelu dostrojonego o nazwie „bbc-news-summary-tuned” i porównaj wynik z odpowiedzią modelu podstawowego. Przykładowy plik JSONL jest dostępny w tym ćwiczeniu w repozytorium. Możesz przesłać plik do zasobnika Cloud Storage i wykonać te czynności związane z dostrajaniem: - Przygotuj dane: zacznij od zbioru danych zawierającego artykuły i odpowiadające im nagłówki, np. zbioru danych BBC News użytego w przykładzie kodu.
- Dostrajanie wstępnie wytrenowanego modelu: wybierz model podstawowy, np. „
text-bison@002”, i dostrój go za pomocą danych o wiadomościach, korzystając z pakietu SDK Vertex AI dla Pythona. - Ocena wyników: porównaj skuteczność dostrojonego modelu z modelem podstawowym, aby sprawdzić, czy jakość generowanych nagłówków się poprawiła.
- Wdróż i używaj modelu: udostępnij dostrojony model w punkcie końcowym interfejsu API i zacznij automatycznie generować nagłówki nowych artykułów.
2. Zanim zaczniesz
- W konsoli Google Cloud na stronie selektora projektów wybierz lub utwórz projekt Google Cloud.
- 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.
- Otwórz notatnik Colab i zaloguj się na to samo konto, które jest obecnie aktywne na Google Cloud.
3. Dostrajanie dużego modelu językowego
W tym ćwiczeniu do dostrajania modelu używamy pakietu Vertex AI SDK for Python. Dostrajanie możesz też przeprowadzić za pomocą innych opcji: HTTP, polecenia CURL, pakietu Java SDK i 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 w 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 kroki zgodnie z instrukcjami w pliku .ipynb w repozytorium. Zastąp 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 YOUR_BUCKET nazwą swojego zasobnika i prześlij do niego przykładowy plik danych treningowych TRAIN.jsonl. Przykładowe dane zostały udostępnione na potrzeby tego przypadku użycia pod linkiem podanym powyżej.
json_url = 'https://storage.googleapis.com/YOUR_BUCKET/TRAIN.jsonl'
df = pd.read_json(json_url, lines=True)
print (df)
Po wykonaniu tego kroku powinny pojawić się te wyniki:

6. Krok 3. Dostosuj duży model językowy
Na tym etapie możesz dostroić dowolny duży model językowy (w zależności od dostępności obsługi) . W tym fragmencie dostrajamy wstępnie wytrenowany model „text-bison@002” za pomocą ramki danych zawierającej dane treningowe, które zostały wczytane 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ć za pomocą linku do zadania potoku w wyniku.
7. Krok 4. Prognozowanie za pomocą nowego modelu po dostrajaniu
Po zakończeniu zadania dostrajania możesz korzystać z nowego modelu do prognozowania. Aby generować prognozy 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ę ten wynik:

Aby porównać wyniki z modelem podstawowym (text-bison@002), 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ę ten wynik:

Chociaż oba wygenerowane tytuły wyglądają odpowiednio, pierwszy z nich (wygenerowany za pomocą dostrojonego modelu) jest bardziej zgodny ze stylem tytułów używanych w danym zbiorze danych.
Wczytaj dostrojony model
Łatwiej może być wczytać model, który został właśnie dostrojony. Pamiętaj jednak, że w kroku 3 jest ona wywoływana w zakresie samego kodu, więc nadal zawiera dostrojony model w zmiennej tuned_model. A co, 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, podając pełny adres URL punktu końcowego wdrożonego dostrojonego modelu z Vertex AI Model Registry. Pamiętaj, że w tym przypadku wpisujesz PROJECT_NUMBER i MODEL_NUMBER zamiast odpowiednich identyfikatorów.
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. Ocena nowego modelu po dostrojeniu
Ocena jest kluczowym aspektem sprawdzania jakości i trafności wygenerowanej odpowiedzi. Polega na sprawdzeniu danych wyjściowych generatywnego modelu językowego pod kątem 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 zapewnić, że wygenerowany tekst spełnia oczekiwane standardy jakości i użyteczności. Więcej informacji znajdziesz w dokumentacji. Na razie zobaczymy, jak uzyskać niektóre dane oceny modelu dostrojonego i porównać je z modelem podstawowym.
- 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)
- Określ specyfikację oceny zadania podsumowania tekstu w przypadku dostrojonego modelu.
task_spec = EvaluationTextSummarizationSpec(
task_name = "summarization",
ground_truth_data=df
)
Wykonanie tego kroku zajmie kilka minut. Postępy możesz śledzić za pomocą linku do zadania potoku w wyniku. Po zakończeniu powinny pojawić się te wyniki oceny:

Wskaźnik rougeLSum w wyniku oceny określa wynik ROUGE-L dla podsumowania. ROUGE-L to wskaźnik oparty na czułości, który mierzy pokrywanie się podsumowania z podsumowaniem referencyjnym. Oblicza się go, biorąc najdłuższy wspólny podciąg (LCS) między dwoma podsumowaniami i dzieląc go przez długość podsumowania referencyjnego.
Wartość rougeLSum w podanym wyrażeniu wynosi 0,36600753600753694, co oznacza, że podsumowanie pokrywa się z podsumowaniem referencyjnym w 36,6%.
Jeśli przeprowadzisz ocenę modelu podstawowego, zauważysz, że wynik podsumowania jest względnie wyższy w przypadku modelu dostrojonego.
Wyniki oceny znajdziesz w katalogu wyjściowym Cloud Storage, który został określony 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. Istotne kwestie
- Obsługiwane modele: najnowsze informacje o zgodności znajdziesz w dokumentacji modelu.
- Szybki rozwój: dziedzina LLM szybko się rozwija. Nowszy, bardziej zaawansowany model może osiągać lepsze wyniki niż model dostrojony oparty na starszym modelu podstawowym. Dobra wiadomość jest taka, że gdy ta funkcja będzie dostępna, możesz zastosować te techniki dostrajania do nowszych modeli.
- LoRA: LoRA to technika wydajnego dostrajania modeli LLM. W tym celu wprowadza do warstw istniejącego wytrenowanego modelu macierze rozkładu o niskiej randze, które można trenować. Więcej informacji na ten temat znajdziesz tutaj. Zamiast aktualizować wszystkie parametry ogromnego modelu LLM, LoRA uczy się mniejszych macierzy, które są dodawane do macierzy wag oryginalnego modelu lub przez nie mnożone. Znacząco zmniejsza to liczbę dodatkowych parametrów wprowadzanych podczas dostrajania.
10. Czyszczenie danych
Aby uniknąć obciążenia konta Google Cloud opłatami za zasoby użyte w tym ćwiczeniu w Codelabs, wykonaj te czynności:
- W konsoli Google Cloud otwórz stronę Zarządzanie zasobami.
- Z listy projektów wybierz projekt do usunięcia, a potem kliknij Usuń.
- W oknie wpisz identyfikator projektu i kliknij Wyłącz, aby usunąć projekt.
- Możesz też otworzyć Rejestr modeli, przejść do karty wdrożenia i testowania modelu, wycofać wdrożenie punktu końcowego i usunąć wdrożony dostrojony model.
11. Gratulacje
Gratulacje! Udało Ci się dostroić model LLM za pomocą Vertex AI. Dostrajanie to zaawansowana technika, która umożliwia dostosowywanie dużych modeli językowych do Twojej domeny i zadań. Vertex AI udostępnia narzędzia i zasoby potrzebne do wydajnego i skutecznego dostrajania modeli.
Przejrzyj repozytoria GitHub i wypróbuj przykładowy kod, aby samodzielnie przetestować dostrajanie i ocenianie. Zastanów się, jak dostrojone modele LLM mogą zaspokoić Twoje konkretne potrzeby, od generowania ukierunkowanych tekstów marketingowych po podsumowywanie złożonych dokumentów lub tłumaczenie języków z uwzględnieniem niuansów kulturowych. Korzystaj z kompleksowego zestawu narzędzi i usług oferowanych przez Vertex AI, aby łatwo tworzyć, trenować, oceniać i wdrażać dostrojone modele.