1. Przegląd
W tym laboratorium dowiesz się, jak używać Vertex AI do uzyskiwania prognoz online i prognoz zbiorczych z modelu wytrenowanego niestandardowo.
Ten moduł wchodzi w skład serii filmów Od prototypu do produkcji. Zanim zaczniesz ten moduł, ukończ poprzedni. Więcej informacji znajdziesz w powiązanym filmie:
.
Czego się nauczysz
Dowiesz się, jak:
- Przesyłanie modeli do rejestru modeli Vertex AI
- wdrażać model w punkcie końcowym;
- uzyskiwać prognozy online i zbiorcze za pomocą interfejsu i pakietu SDK.
Całkowity koszt ukończenia tego laboratorium w Google Cloud wynosi około 1 USD.
2. Wprowadzenie do Vertex AI
W tym laboratorium używamy najnowszej oferty produktów AI dostępnej w Google Cloud. Vertex AI integruje oferty ML w Google Cloud, zapewniając płynne środowisko programistyczne. Wcześniej modele trenowane za pomocą AutoML i modele niestandardowe były dostępne za pomocą oddzielnych usług. Nowa oferta łączy obie te usługi w jedno API wraz z innymi nowymi usługami. Możesz też przenieść istniejące projekty do Vertex AI.
Vertex AI obejmuje wiele różnych usług, które obsługują kompleksowe przepływy pracy ML. W tym laboratorium skupimy się na produktach wyróżnionych poniżej: Predictions i Workbench.

3. Konfigurowanie środowiska
Aby skonfigurować środowisko, wykonaj czynności opisane w module Trenowanie modeli niestandardowych za pomocą Vertex AI.
4. Przesyłanie modelu do rejestru
Zanim będziemy mogli użyć modelu do uzyskiwania prognoz, musimy przesłać go do rejestru modeli Vertex AI, czyli repozytorium, w którym możesz zarządzać cyklem życia modeli ML.
Modele możesz przesyłać podczas konfigurowania niestandardowego zadania trenowania, jak pokazano poniżej.

Możesz też importować modele po zakończeniu zadania trenowania, o ile artefakty zapisanego modelu są przechowywane w zasobniku Cloud Storage. W tym laboratorium użyjemy tej opcji.
W konsoli przejdź do sekcji Modele.

Kliknij IMPORT.

Kliknij Importuj jako nowy model i podaj nazwę modelu.

W sekcji Ustawienia modelu zaimportuj model za pomocą gotowego kontenera i użyj TensorFlow 2.8. Pełną listę gotowych kontenerów prognozowania znajdziesz tutaj.
Następnie podaj ścieżkę do zasobnika Cloud Storage, w którym zostały zapisane artefakty modelu podczas niestandardowego zadania trenowania. Powinna ona wyglądać mniej więcej tak: gs://{PROJECT_ID}-bucket/model_output.
Pominiemy sekcję Wyjaśnialność, ale jeśli chcesz dowiedzieć się więcej o Vertex Explainable AI, zapoznaj się z dokumentacją.
Po zaimportowaniu modelu zobaczysz go w rejestrze.

Jeśli chcesz to zrobić za pomocą pakietu SDK zamiast interfejsu, możesz uruchomić w notatniku Workbench to polecenie, aby przesłać model.
from google.cloud import aiplatform
my_model = aiplatform.Model.upload(display_name='flower-model',
artifact_uri='gs://{PROJECT_ID}-bucket/model_output',
serving_container_image_uri='us-docker.pkg.dev/vertex-ai/prediction/tf2-cpu.2-8:latest')
5. Wdrażanie modelu w punkcie końcowym
W Vertex AI możemy uruchamiać 2 typy zadań prognozowania: zbiorcze i online.
Prognozowanie zbiorcze to żądanie asynchroniczne. Jest to dobre rozwiązanie, gdy nie potrzebujesz natychmiastowej odpowiedzi i chcesz przetworzyć zgromadzone dane w jednym żądaniu.
Z drugiej strony, jeśli chcesz uzyskiwać prognozy o niskim opóźnieniu na podstawie danych przekazywanych do modelu na bieżąco, użyj prognozy online.
Teraz, gdy model jest w rejestrze, możemy go używać do prognoz zbiorczych.
Jeśli jednak chcemy uzyskiwać prognozy online, musimy wdrożyć model w punkcie końcowym. Powiąże to zapisane artefakty modelu z zasobami fizycznymi, co umożliwi uzyskiwanie prognoz o niskim opóźnieniu.
Aby wdrożyć model w punkcie końcowym, kliknij 3 kropki po prawej stronie modelu, a następnie Wdróż w punkcie końcowym.

Nadaj punktowi końcowemu nazwę, a następnie pozostaw resztę ustawień bez zmian i kliknij DALEJ.

Punkty końcowe obsługują autoskalowanie, co oznacza, że możesz ustawić minimalną i maksymalną liczbę węzłów obliczeniowych, a węzły będą się skalować w celu zaspokojenia zapotrzebowania na ruch w tych granicach.
Ponieważ ten moduł służy tylko do demonstracji i nie będziemy używać tego punktu końcowego do obsługi dużego ruchu, możesz ustawić Maksymalną liczbę węzłów obliczeniowych na 1 i wybrać n1-standard-4 jako Typ maszyny.

Pominiemy monitorowanie modelu, ale jeśli chcesz dowiedzieć się więcej o tej funkcji, zapoznaj się z dokumentacją.
Następnie kliknij WDROŻ.
Wdrożenie zajmie kilka minut, ale gdy się zakończy, zobaczysz, że stan wdrożenia modelu zmienił się na Wdrożono w Vertex AI.
Jeśli chcesz wdrożyć model za pomocą pakietu SDK, uruchom to polecenie.
my_model = aiplatform.Model("projects/{PROJECT_NUMBER}/locations/us-central1/models/{MODEL_ID}")
endpoint = my_model.deploy(
deployed_model_display_name='my-endpoint',
traffic_split={"0": 100},
machine_type="n1-standard-4",
accelerator_count=0,
min_replica_count=1,
max_replica_count=1,
)
6. Pobieraj prognozy
Prognozy online
Gdy model zostanie wdrożony w punkcie końcowym, możesz go wywoływać jak każdy inny punkt końcowy REST. Oznacza to, że możesz go wywoływać z funkcji w Cloud Functions, czatbota, aplikacji internetowej itp.
Na potrzeby demonstracji wywołamy ten punkt końcowy z Workbench.
Wróć do notatnika utworzonego w poprzednim laboratorium. W programie uruchamiającym utwórz nowy notatnik TensorFlow 2.

Zaimportuj Vertex AI Python SDK, numpy i PIL.
from google.cloud import aiplatform
import numpy as np
from PIL import Image
Pobierz obraz poniżej i prześlij go do instancji Workbench. Przetestujemy model na tym obrazie mniszka lekarskiego.

Najpierw zdefiniuj punkt końcowy. Musisz zastąpić {PROJECT_NUMBER} i {ENDPOINT_ID} poniżej.
endpoint = aiplatform.Endpoint(
endpoint_name="projects/{PROJECT_NUMBER}/locations/us-central1/endpoints/{ENDPOINT_ID}")
Identyfikator endpoint_id znajdziesz w sekcji Punkty końcowe w Cloud Console.

Numer projektu znajdziesz na stronie głównej konsoli. Pamiętaj, że różni się on od identyfikatora projektu.

Poniższy kod otwiera i zmienia rozmiar obrazu za pomocą PIL.
IMAGE_PATH = "test-image.jpg"
im = Image.open(IMAGE_PATH)
Następnie przekonwertuj dane numpy na typ float32 i na listę. Konwertujemy na listę, ponieważ dane numpy nie są serializowane w formacie JSON, więc nie możemy ich wysłać w treści żądania.
x_test = np.asarray(im).astype(np.float32).tolist()
Na koniec wywołaj endpoint.predict.
endpoint.predict(instances=x_test).predictions
Wynik to dane wyjściowe modelu, czyli warstwa softmax z 5 jednostkami. Jeśli chcesz napisać niestandardową logikę, która będzie zwracać etykietę tekstową zamiast indeksu, możesz użyć niestandardowych procedur prognozowania.
Prognozy zbiorcze
Dane do prognoz zbiorczych możesz formatować na różne sposoby. Dla uproszczenia zrzucimy dane numpy do pliku JSON i zapiszemy go w Cloud Storage.
with open('test-data.json', 'w') as fp:
json.dump(x_test, fp)
!gsutil cp test-data.json gs://{YOUR_BUCKET}
Następnie zdefiniuj model. Jest to podobne do definiowania punktu końcowego, z tym że musisz podać MODEL_ID zamiast ENDPOINT_ID.
my_model=aiplatform.Model("projects/{PROJECT_NUMBER}/locations/us-central1/models/{MODEL_ID}")
Identyfikator modelu znajdziesz, klikając nazwę i wersję modelu w sekcji Modele w konsoli, a następnie klikając SZCZEGÓŁY WERSJI.

Na koniec użyj pakietu SDK, aby wywołać zadanie prognozowania zbiorczego, przekazując ścieżkę do Cloud Storage, w której został zapisany plik JSON, oraz lokalizację w Cloud Storage, w której mają być przechowywane wyniki prognozowania.
batch_prediction_job = my_model.batch_predict(
job_display_name='flower_batch_predict',
gcs_source='gs://{YOUR_BUCKET}/test-data.json',
gcs_destination_prefix='gs://{YOUR_BUCKET}/prediction-results',
machine_type='n1-standard-4',)
Postęp zadania możesz śledzić w sekcji Prognozy zbiorcze w konsoli. Pamiętaj, że uruchamianie zadania prognozowania zbiorczego dla jednego obrazu nie jest wydajne.

Co dalej?
W tym przykładzie przed wywołaniem prognozy przekonwertowaliśmy obraz testowy na NumPy. W bardziej realistycznych przypadkach użycia prawdopodobnie będziesz chcieć wysłać sam obraz, a nie najpierw wczytywać go do NumPy. Aby to zrobić, musisz dostosować funkcję obsługi TensorFlow, aby dekodowała bajty obrazu. Wymaga to nieco więcej pracy, ale będzie znacznie wydajniejsze w przypadku większych obrazów i tworzenia aplikacji. Przykład znajdziesz w tym notatniku.
🎉 Gratulacje! 🎉
Dowiedziałeś się, jak używać Vertex AI do:
- przesyłania modeli do rejestru modeli Vertex AI
- uzyskiwania prognoz zbiorczych i online.
Więcej informacji o różnych częściach Vertex znajdziesz w dokumentacji.
7. Czyszczenie
Jeśli nie planujesz używać modeli, wycofaj ich wdrożenie w punkcie końcowym. Możesz też całkowicie usunąć punkt końcowy. W razie potrzeby zawsze możesz ponownie wdrożyć model w punkcie końcowym.

W przypadku zarządzanych notatników Workbench po 180 minutach bezczynności automatycznie następuje przekroczenie limitu czasu, więc nie musisz się martwić o wyłączenie instancji. Jeśli chcesz ręcznie wyłączyć instancję, kliknij przycisk Zatrzymaj w sekcji Vertex AI Workbench w konsoli. Jeśli chcesz całkowicie usunąć notatnik, kliknij przycisk Usuń.

Aby usunąć zasobnik Storage, w menu nawigacyjnym Cloud Console przejdź do sekcji Storage, wybierz zasobnik i kliknij Usuń.
