1. Omówienie
W tym module wykorzystasz Vertex AI do uruchomienia niestandardowego zadania trenowania.
Ten moduł należy do serii filmów Prototyp – produkcja. Utworzysz model klasyfikacji obrazów na podstawie zbioru danych Flowers. Aby dowiedzieć się więcej, możesz obejrzeć film:
.
Czego się nauczysz
Poznasz takie zagadnienia jak:
- Tworzenie zarządzanego notatnika Vertex AI Workbench
- Konfigurowanie i uruchamianie niestandardowego zadania trenowania w interfejsie Vertex AI
- Skonfiguruj i uruchom niestandardowe zadanie treningowe za pomocą pakietu SDK Vertex AI w języku Python.
Łączny koszt przeprowadzenia tego laboratorium w Google Cloud wynosi około 1 USD.
2. Wprowadzenie do Vertex AI
Ten moduł wykorzystuje najnowszą ofertę usług AI dostępną w Google Cloud. Vertex AI integruje ofertę systemów uczących się z całego Google Cloud, tworząc bezproblemowe środowisko programistyczne. Wcześniej modele wytrenowane za pomocą AutoML i modele niestandardowe były dostępne za pomocą oddzielnych usług. Nowa oferta łączy oba te interfejsy API z innymi nowymi usługami. Możesz też przenieść istniejące projekty do Vertex AI.
Vertex AI zawiera wiele różnych usług, które obsługują kompleksowe przepływy pracy związane z systemami uczącymi się. Ten moduł będzie dotyczył podanych niżej usług: szkolenia i Workbench.
3. Konfigurowanie środowiska
Aby uruchomić to ćwiczenie, musisz mieć projekt Google Cloud Platform z włączonym rozliczeniem. Aby utworzyć projekt, postępuj zgodnie z tymi instrukcjami.
Krok 1. Włącz interfejs Compute Engine API
Przejdź do Compute Engine i wybierz opcję Włącz, jeśli nie jest jeszcze włączona.
Krok 2. Włącz interfejs Artifact Registry API
Otwórz Artifact Registry i kliknij Włącz, jeśli nie zostało to jeszcze zrobione. Użyjesz go do utworzenia kontenera na potrzeby niestandardowego zadania trenowania.
Krok 3. Włącz interfejs Vertex AI API
W konsoli Cloud przejdź do sekcji Vertex AI i kliknij Włącz interfejs Vertex AI API.
Krok 4. Utwórz instancję Vertex AI Workbench
W konsoli Cloud w sekcji Vertex AI kliknij Workbench:
Włącz interfejs Notebooks API, jeśli nie jest jeszcze włączony.
Po włączeniu kliknij ZARZĄDZANE NOTATKI:
Następnie wybierz NOWY NOTATNIK.
Nadaj notebookowi nazwę, a w sekcji Uprawnienia wybierz Konto usługi.
Kliknij Ustawienia zaawansowane.
W sekcji Zabezpieczenia wybierz „Włącz terminal”, jeśli nie jest jeszcze włączony.
Pozostałe ustawienia zaawansowane możesz pozostawić bez zmian.
Następnie kliknij Utwórz. Udostępnienie instancji zajmie kilka minut.
Po utworzeniu instancji kliknij OTWÓRZ JUPYTERLAB.
4. Umieszczenie kodu aplikacji do trenowania w kontenerze
Przesyłasz to zadanie trenowania do Vertex AI, umieszczając kod aplikacji do trenowania w kontenerze Dockera i przesyłając ten kontener do Google Artifact Registry. Dzięki temu możesz wytrenować model utworzony za pomocą dowolnego frameworku.
Aby rozpocząć, w menu Launcher otwórz okno Terminala w instancji notatek:
Krok 1. Utwórz zasobnik Cloud Storage
W tym zadaniu treningowym wyeksportujesz wytrenowany model TensorFlow do zasobnika Cloud Storage. Dane do trenowania również przechowujesz w zasośniku Cloud Storage.
W terminalu uruchom to polecenie, aby zdefiniować zmienną środowiskową dla projektu. Pamiętaj, aby zastąpić your-cloud-project
identyfikatorem projektu:
PROJECT_ID='your-cloud-project'
Następnie uruchom w terminalu to polecenie, aby utworzyć nowy zasobnik w projekcie.
BUCKET="gs://${PROJECT_ID}-bucket"
gsutil mb -l us-central1 $BUCKET
Krok 2. Skopiuj dane do zasobnika Cloud Storage
Musimy przenieść zbiór danych kwiatów do Cloud Storage. Na potrzeby demonstracji najpierw pobierz zbiór danych do tej instancji Workbench, a potem skopiuj go do zasobnika.
Pobierz i rozpakuj dane.
wget https://storage.googleapis.com/download.tensorflow.org/example_images/flower_photos.tgz
tar xvzf flower_photos.tgz
Następnie skopiuj go do utworzonego przed chwilą zasobnika. Dodajemy -r, ponieważ chcemy skopiować cały katalog, a -m, aby wykonać kopię wieloprocesorową, co przyspieszy proces.
gsutil -m cp -r flower_photos $BUCKET
Krok 3. Napisać kod treningowy
Utwórz nowy katalog o nazwie flowers
i przejdź do niego:
mkdir flowers
cd flowers
Uruchom poniższe polecenia, aby utworzyć katalog dla kodu szkoleniowego i plik Pythona, do którego dodasz kod.
mkdir trainer
touch trainer/task.py
W katalogu flowers/
powinien teraz znajdować się ten plik:
+ trainer/
+ task.py
Więcej informacji o tym, jak uporządkować kod aplikacji do trenowania, znajdziesz w dokumentacji.
Następnie otwórz utworzony plik task.py
i skopiuj kod poniżej.
Zastąp {your-gcs-bucket}
nazwą utworzonego właśnie zasobnika Cloud Storage.
Dzięki narzędziu FUSE Cloud Storage zadania treningowe w Vertex AI Training mogą uzyskiwać dostęp do danych w Cloud Storage jako pliki w lokalnym systemie plików. Po uruchomieniu niestandardowego zadania trenowania zadanie otrzyma katalog /gcs
, który zawiera wszystkie zasobniki Cloud Storage jako podkatalogi. Dlatego ścieżki danych w kodzie treningowym zaczynają się od /gcs
.
import tensorflow as tf
import numpy as np
import os
## Replace {your-gcs-bucket} !!
BUCKET_ROOT='/gcs/{your-gcs-bucket}'
# Define variables
NUM_CLASSES = 5
EPOCHS=10
BATCH_SIZE = 32
IMG_HEIGHT = 180
IMG_WIDTH = 180
DATA_DIR = f'{BUCKET_ROOT}/flower_photos'
def create_datasets(data_dir, batch_size):
'''Creates train and validation datasets.'''
train_dataset = tf.keras.utils.image_dataset_from_directory(
data_dir,
validation_split=0.2,
subset="training",
seed=123,
image_size=(IMG_HEIGHT, IMG_WIDTH),
batch_size=batch_size)
validation_dataset = tf.keras.utils.image_dataset_from_directory(
data_dir,
validation_split=0.2,
subset="validation",
seed=123,
image_size=(IMG_HEIGHT, IMG_WIDTH),
batch_size=batch_size)
train_dataset = train_dataset.cache().shuffle(1000).prefetch(buffer_size=tf.data.AUTOTUNE)
validation_dataset = validation_dataset.cache().prefetch(buffer_size=tf.data.AUTOTUNE)
return train_dataset, validation_dataset
def create_model():
'''Creates model.'''
model = tf.keras.Sequential([
tf.keras.layers.Resizing(IMG_HEIGHT, IMG_WIDTH),
tf.keras.layers.Rescaling(1./255, input_shape=(IMG_HEIGHT, IMG_WIDTH, 3)),
tf.keras.layers.Conv2D(16, 3, padding='same', activation='relu'),
tf.keras.layers.MaxPooling2D(),
tf.keras.layers.Conv2D(32, 3, padding='same', activation='relu'),
tf.keras.layers.MaxPooling2D(),
tf.keras.layers.Conv2D(64, 3, padding='same', activation='relu'),
tf.keras.layers.MaxPooling2D(),
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(128, activation='relu'),
tf.keras.layers.Dense(NUM_CLASSES, activation='softmax')
])
return model
# CREATE DATASETS
train_dataset, validation_dataset = create_datasets(DATA_DIR, BATCH_SIZE)
# CREATE/COMPILE MODEL
model = create_model()
model.compile(optimizer=tf.keras.optimizers.Adam(),
loss=tf.keras.losses.SparseCategoricalCrossentropy(),
metrics=['accuracy'])
# TRAIN MODEL
history = model.fit(
train_dataset,
validation_data=validation_dataset,
epochs=EPOCHS
)
# SAVE MODEL
model.save(f'{BUCKET_ROOT}/model_output')
Krok 4. Utwórz plik Dockerfile
Aby skonteneryzować kod, musisz utworzyć plik Dockerfile. W pliku Dockerfile musisz umieścić wszystkie polecenia potrzebne do uruchomienia obrazu. Spowoduje to zainstalowanie wszystkich niezbędnych bibliotek i ustawienie punktu wejścia dla kodu trenowania.
W terminalu utwórz pusty plik Dockerfile w katalogu głównym katalogu flowers:
touch Dockerfile
W katalogu flowers/
powinien teraz znajdować się ten plik:
+ Dockerfile
+ trainer/
+ task.py
Otwórz plik Dockerfile i wklej do niego ten kod:
FROM gcr.io/deeplearning-platform-release/tf2-gpu.2-8
WORKDIR /
# Copies the trainer code to the docker image.
COPY trainer /trainer
# Sets up the entry point to invoke the trainer.
ENTRYPOINT ["python", "-m", "trainer.task"]
Przyjrzyjmy się poleceń w tym pliku.
Polecenie FROM określa obraz podstawowy, czyli obraz nadrzędny, na podstawie którego zostanie utworzony tworzony obraz. Jako obrazu bazowego użyjesz obrazu Dockera TensorFlow Enterprise 2.8 na GPU dla Deep Learning Container. Kontenery do głębokiego uczenia się w Google Cloud są dostarczane z wstępnie zainstalowanymi popularnymi platformami do tworzenia systemów uczących się i narzędzi do analizy danych.
Polecenie WORKDIR określa katalog na obrazie, w którym są wykonywane kolejne instrukcje.
Polecenie COPY (Kopiuj) kopiuje kod trenera do obrazu Dockera. W tym przykładzie mamy tylko 1 plik Pythona w katalogu trenera, ale aby uzyskać bardziej realistyczny przykład, należałoby mieć dodatkowe pliki. Może jeden o nazwie data.py
, który zajmuje się wstępną obróbką danych, i jeden o nazwie model.py
, który zawiera tylko kod modelu, itp. W przypadku bardziej złożonego kodu trenowania zapoznaj się z dokumentacją Pythona dotyczącą pakowania projektów Pythona.
Jeśli chcesz dodać dodatkowe biblioteki, możesz użyć polecenia RUN, aby zainstalować pip (np. RUN pip install -r requirements.txt
). W naszym przykładzie nie potrzebujemy jednak niczego dodatkowego.
Na koniec polecenie ENTRYPOINT konfiguruje punkt wejścia do wywołania trenera. To polecenie zostanie uruchomione po rozpoczęciu zadania trenowania. W naszym przypadku jest to plik task.py
.
Więcej informacji o tworzeniu plików Dockerfiles na potrzeby trenowania tutaj.
Krok 4. Utwórz kontener
Na terminalu notatnika Workbench uruchom to polecenie, aby zdefiniować zmienną env dla swojego projektu. Pamiętaj, aby zastąpić your-cloud-project
identyfikatorem projektu:
PROJECT_ID='your-cloud-project'
Tworzenie repozytorium w Artifact Registry
REPO_NAME='flower-app'
gcloud artifacts repositories create $REPO_NAME --repository-format=docker \
--location=us-central1 --description="Docker repository"
Zdefiniuj zmienną z identyfikatorem URI obrazu kontenera w Google Artifact Registry:
IMAGE_URI=us-central1-docker.pkg.dev/$PROJECT_ID/$REPO_NAME/flower_image:latest
Konfigurowanie Dockera
gcloud auth configure-docker \
us-central1-docker.pkg.dev
Następnie utwórz kontener, uruchamiając to polecenie w katalogu głównym flower
:
docker build ./ -t $IMAGE_URI
Na koniec prześlij go do Artifact Registry:
docker push $IMAGE_URI
Po przeniesieniu kontenera do Artifact Registry możesz rozpocząć zadanie trenowania.
5. Uruchamianie niestandardowego zadania treningowego w Vertex AI
W tym laboratorium korzystamy z niestandardowego trenowania za pomocą niestandardowego kontenera w Google Artifact Registry, ale możesz też uruchomić zadanie trenowania za pomocą gotowych kontenerów.
Zacznij od sekcji Trenowanie w sekcji Vertex w konsoli Cloud:
Krok 1. Skonfiguruj zadanie trenowania
Aby podać parametry zadania trenowania, kliknij Utwórz.
- W sekcji Zbiór danych wybierz Brak zarządzanego zbioru danych.
- Następnie wybierz Trenowanie niestandardowe (zaawansowane) jako metodę trenowania i kliknij Dalej.
- Wybierz Wytrenuj nowy model, a następnie w polu Nazwa modelu wpisz
flowers-model
(lub dowolną nazwę). - Kliknij Dalej.
Na etapie ustawień kontenera wybierz Kontener niestandardowy:
W pierwszym polu (Obraz kontenera) wpisz wartość zmiennej IMAGE_URI
z poprzedniej sekcji. Powinien on mieć postać us-central1-docker.pkg.dev/{PROJECT_ID}/flower-app/flower_image:latest
z identyfikatorem Twojego projektu. Pozostałe pola pozostaw puste i kliknij Dalej.
Pomiń krok Hiperparametry, klikając ponownie Dalej.
Krok 2. Skonfiguruj klaster obliczeniowy
Skonfiguruj pulę instancji roboczych 0 w ten sposób:
Na razie pominiesz krok 6 i skonfigurujesz kontener prognozy w następnym module w tej serii.
Aby rozpocząć zadanie trenowania, kliknij ROZPOCZNIJ TRENOWANIE. W sekcji Trenowanie w konsoli na karcie PROCESY TRENINGOWE zobaczysz nowo uruchomione zadanie:
🎉 Gratulacje! 🎉
Poznałeś/poznałaś już te sposoby korzystania z Vertex AI:
- Uruchom zadanie treningowe niestandardowe dla kodu treningowego udostępnionego w kontenerze niestandardowym. W tym przykładzie użyto modelu TensorFlow, ale możesz wytrenować model utworzony za pomocą dowolnej platformy za pomocą niestandardowych lub wbudowanych kontenerów.
Więcej informacji o różnych elementach Vertex znajdziesz w dokumentacji.
6. [Opcjonalnie] Użyj pakietu SDK Vertex AI Python
W poprzedniej sekcji pokazaliśmy, jak uruchomić zadanie treningowe za pomocą interfejsu użytkownika. W tej sekcji znajdziesz alternatywny sposób przesyłania zadania treningowego za pomocą pakietu SDK Vertex AI dla Pythona.
Wróć do instancji notatnika i utwórz notatnik TensorFlow 2 w menu Launcher:
Zaimportuj pakiet Vertex AI SDK.
from google.cloud import aiplatform
Następnie utwórz CustomContainerTrainingJob
. W wierszu container_uri
zastąp tekst {PROJECT_ID}
nazwą projektu, a w wierszu staging_bucket
– tekst {BUCKET}
nazwą utworzonego wcześniej zasobnika.
my_job = aiplatform.CustomContainerTrainingJob(display_name='flower-sdk-job',
container_uri='us-central1-docker.pkg.dev/{PROJECT_ID}/flower-app/flower_image:latest',
staging_bucket='gs://{BUCKET}')
Następnie uruchom zadanie.
my_job.run(replica_count=1,
machine_type='n1-standard-8',
accelerator_type='NVIDIA_TESLA_V100',
accelerator_count=1)
W celu demonstracji to zadanie zostało skonfigurowane do uruchomienia na większym komputerze niż w poprzedniej sekcji. Dodatkowo korzystamy z procesora graficznego. Jeśli nie określisz wartości machine-type
, accelerator_type
ani accelerator_count
, zadanie zostanie domyślnie uruchomione w klasie n1-standard-4
.
Zadanie trenowania znajdziesz w sekcji Szkolenia w konsoli na karcie NIESTANDARDOWE ZADANIA.
7. Czyszczenie
Zarządzane notatniki Vertex AI Workbench mają funkcję wyłączania bezczynnego urządzenia, więc nie musimy się martwić wyłączeniem instancji. Jeśli chcesz ręcznie wyłączyć instancję, w konsoli Vertex AI Workbench kliknij przycisk Zatrzymaj. Jeśli chcesz całkowicie usunąć zeszyt, kliknij przycisk Usuń.
Aby usunąć zasobnik Cloud Storage, w menu nawigacyjnym konsoli Cloud przejdź do usługi Storage, wybierz zasobnik i kliknij Usuń: