Addestra un modello ML con container personalizzati
AI Platform Training supporta l'addestramento in container personalizzati, consentendo agli utenti di utilizzare i propri container Docker con qualsiasi framework o algoritmo ML preinstallato da eseguire su AI Platform Training. Questo tutorial fornisce una procedura dettagliata introduzione che mostra come addestrare un modello PyTorch sull'AI Platform Training con un container personalizzato.
Panoramica
Questa guida introduttiva illustra il processo di addestramento con container personalizzati in AI Platform Training, utilizzando un modello base che classifica le cifre scritte a mano in base al set di dati MNIST.
Questa guida illustra i seguenti passaggi:
- Configurazione del progetto e dell'ambiente locale
- Crea un container personalizzato.
- Scrivi un Dockerfile
- Crea e testa la tua immagine Docker in locale
- Esegui il push dell'immagine in Container Registry
- invia un job di addestramento di container personalizzati
- Invia un job di ottimizzazione degli iperparametri
- Utilizzo di GPU con un container personalizzato
Prima di iniziare
Per questa guida introduttiva, utilizza qualsiasi ambiente in cui è installata Google Cloud CLI.(Facoltativo) Esamina le informazioni concettuali sull'addestramento con container personalizzati.
Completa i seguenti passaggi per configurare un account Google Cloud, abilitare le API richieste e installare e attivare Cloud SDK.
- Accedi al tuo account Google Cloud. Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti gratuiti per l'esecuzione, il test e il deployment dei carichi di lavoro.
-
Nella pagina del selettore di progetti della console Google Cloud, seleziona o crea un progetto Google Cloud.
-
Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.
-
Abilita le API AI Platform Training & Prediction, Compute Engine and Container Registry.
- Installa Google Cloud CLI.
-
Per initialize gcloud CLI, esegui questo comando:
gcloud init
-
Nella pagina del selettore di progetti della console Google Cloud, seleziona o crea un progetto Google Cloud.
-
Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.
-
Abilita le API AI Platform Training & Prediction, Compute Engine and Container Registry.
- Installa Google Cloud CLI.
-
Per initialize gcloud CLI, esegui questo comando:
gcloud init
- Installa Docker.
Se utilizzi un sistema operativo basato su Linux, come Ubuntu o Debian, aggiungi il tuo nome utente al gruppo
docker
in modo da poter eseguire Docker senza utilizzaresudo
:sudo usermod -a -G docker ${USER}
Potrebbe essere necessario riavviare il sistema dopo esserti aggiunto al gruppo
docker
. - Apri Docker. Per assicurarti che Docker sia in esecuzione, esegui il comando Docker seguente,
che restituisce la data e l'ora correnti:
docker run busybox date
- Usa
gcloud
come assistente per le credenziali per Docker:gcloud auth configure-docker
-
(Facoltativo) Se vuoi eseguire il container utilizzando GPU localmente, installa
nvidia-docker
.
Configura il bucket Cloud Storage
Questa sezione mostra come creare un nuovo bucket. Puoi utilizzare un bucket esistente, ma deve trovarsi nella stessa regione in cui prevedi di eseguire job AI Platform. Inoltre, se non fa parte del progetto che stai utilizzando per eseguire AI Platform Training, devi concedere esplicitamente l'accesso agli account di servizio di AI Platform Training.
-
Specifica un nome per il nuovo bucket. Il nome deve essere univoco in tutti i bucket in Cloud Storage.
BUCKET_NAME="YOUR_BUCKET_NAME"
Ad esempio, utilizza il nome del progetto con l'aggiunta di
-aiplatform
:PROJECT_ID=$(gcloud config list project --format "value(core.project)") BUCKET_NAME=${PROJECT_ID}-aiplatform
-
Controlla il nome del bucket che hai creato.
echo $BUCKET_NAME
-
Seleziona una regione per il bucket e imposta una variabile di ambiente
REGION
.Utilizza la stessa regione in cui prevedi di eseguire job di AI Platform Training. Consulta le regioni disponibili per i servizi di AI Platform Training.
Ad esempio, il seguente codice crea
REGION
e lo imposta suus-central1
:REGION=us-central1
-
Crea il nuovo bucket:
gsutil mb -l $REGION gs://$BUCKET_NAME
Scarica il codice per questo tutorial
Inserisci il comando seguente per scaricare il file ZIP di esempio di AI Platform Training:
wget https://github.com/GoogleCloudPlatform/cloudml-samples/archive/master.zip
Decomprimi il file per estrarre la directory
cloudml-samples-master
.unzip master.zip
Vai alla directory
cloudml-samples-master > pytorch > containers > quickstart > mnist
. I comandi di questa procedura dettagliata devono essere eseguiti dalla directorymnist
.cd cloudml-samples-master/pytorch/containers/quickstart/mnist
Creazione di un container personalizzato
Per creare un container personalizzato, la prima cosa da fare è definire un Dockerfile per installare le dipendenze richieste per il job di addestramento. Quindi, crea e testa l'immagine Docker localmente per verificarla prima di utilizzarla con AI Platform Training.
Scrivi un Dockerfile
Il Dockerfile di esempio fornito in questo tutorial svolge i seguenti passaggi:
- Utilizza un'immagine di base Python 2.7 con dipendenze Python integrate.
- Installa dipendenze aggiuntive, tra cui PyTorch,
gcloud CLI e
cloudml-hypertune
per l'ottimizzazione degli iperparametri. - Copia nel container il codice dell'applicazione di addestramento.
- Configura il punto di ingresso affinché AI Platform Training esegua il codice di addestramento all'avvio del container.
Il Dockerfile potrebbe includere logica aggiuntiva, a seconda delle tue esigenze. Scopri di più sulla scrittura di Dockerfile.
Crea e testa la tua immagine Docker in locale
Crea l'URI dell'immagine corretto utilizzando le variabili di ambiente e crea l'immagine Docker. Il flag
-t
assegna all'immagine il nome e il tag con le tue scelte perIMAGE_REPO_NAME
eIMAGE_TAG
. Puoi scegliere un nome e un tag diversi per l'immagine.export PROJECT_ID=$(gcloud config list project --format "value(core.project)") export IMAGE_REPO_NAME=mnist_pytorch_custom_container export IMAGE_TAG=mnist_pytorch_cpu export IMAGE_URI=gcr.io/$PROJECT_ID/$IMAGE_REPO_NAME:$IMAGE_TAG docker build -f Dockerfile -t $IMAGE_URI ./
Verifica l'immagine eseguendola localmente in un nuovo container. Tieni presente che il flag
--epochs
viene passato allo script del trainer.docker run $IMAGE_URI --epochs 1
Esegui il push dell'immagine in Container Registry
Se l'esecuzione locale funziona, puoi eseguire il push dell'immagine Docker in Container Registry nel tuo progetto.
Innanzitutto, esegui gcloud auth configure-docker
, se non l'hai ancora fatto.
docker push $IMAGE_URI
Invia e monitora il job
Definisci le variabili di ambiente per la richiesta di job.
MODEL_DIR
indica una nuova directory con timestamp all'interno del bucket Cloud Storage in cui viene archiviato il file del modello salvato al termine dell'addestramento.REGION
specifica una regione valida per l'addestramento di AI Platform Training.
export MODEL_DIR=pytorch_model_$(date +%Y%m%d_%H%M%S) export REGION=us-central1 export JOB_NAME=custom_container_job_$(date +%Y%m%d_%H%M%S)
Invia il job di addestramento ad AI Platform Training utilizzando gcloud CLI. Passa l'URI all'immagine Docker utilizzando il flag
--master-image-uri
:gcloud ai-platform jobs submit training $JOB_NAME \ --region $REGION \ --master-image-uri $IMAGE_URI \ -- \ --model-dir=gs://$BUCKET_NAME/$MODEL_DIR \ --epochs=10
Dopo aver inviato il job, puoi monitorare lo stato del job e trasmettere i log:
gcloud ai-platform jobs describe $JOB_NAME gcloud ai-platform jobs stream-logs $JOB_NAME
Invia un job di ottimizzazione degli iperparametri
Sono necessarie alcune modifiche per un job di ottimizzazione degli iperparametri. Prendi nota di queste aree nel codice campione:
- Il Dockerfile di esempio include il pacchetto
cloudml-hypertune
per installarlo nel container personalizzato. - Il codice campione (
mnist.py
):- Utilizza
cloudml-hypertune
per segnalare i risultati di ogni prova chiamando la relativa funzione helper,report_hyperparameter_tuning_metric
. Il codice campione segnala i risultati dell'ottimizzazione degli iperparametri dopo la valutazione, a meno che il job non venga inviato come job di ottimizzazione degli iperparametri. - Aggiunge argomenti della riga di comando per ogni iperparametro e gestisce l'analisi dell'argomento con
argparse
.
- Utilizza
- La richiesta di job include
HyperparameterSpec
nell'oggettoTrainingInput
. In questo caso, ottimizziamo--lr
e--momentum
per ridurre al minimo la perdita del modello.
Crea un file
config.yaml
per definire le specifiche degli iperparametri. RidefinisciMODEL_DIR
eJOB_NAME
. DefinisciREGION
se non l'hai già fatto:export MODEL_DIR=pytorch_hptuning_model_$(date +%Y%m%d_%H%M%S) export REGION=us-central1 export JOB_NAME=custom_container_job_hptuning_$(date +%Y%m%d_%H%M%S) # Creates a YAML file with job request. cat > config.yaml <<EOF trainingInput: hyperparameters: goal: MINIMIZE hyperparameterMetricTag: "my_loss" maxTrials: 20 maxParallelTrials: 5 enableTrialEarlyStopping: True params: - parameterName: lr type: DOUBLE minValue: 0.0001 maxValue: 0.1 - parameterName: momentum type: DOUBLE minValue: 0.2 maxValue: 0.8 EOF
Invia il job di ottimizzazione degli iperparametri ad AI Platform Training:
gcloud ai-platform jobs submit training $JOB_NAME \ --scale-tier BASIC \ --region $REGION \ --master-image-uri $IMAGE_URI \ --config config.yaml \ -- \ --epochs=5 \ --model-dir="gs://$BUCKET_NAME/$MODEL_DIR"
Utilizzo di GPU con container personalizzati
Per inviare un job di container personalizzato utilizzando GPU, devi creare un'immagine Docker diversa da quella utilizzata in precedenza. Abbiamo fornito un Dockerfile di esempio da utilizzare con GPU che soddisfa i seguenti requisiti:
- Preinstalla il toolkit CUDA e cuDNN nel tuo container. L'utilizzo dell'immagine nvidia/cuda come immagine di base è il modo consigliato per gestire questa situazione, poiché il toolkit CUDA e cuDNN sono preinstallati e consente di configurare correttamente le variabili di ambiente correlate.
- Installa le dipendenze aggiuntive, ad esempio
wget
,curl
,pip
e qualsiasi altra necessaria all'applicazione di addestramento.
Crea e testa l'immagine Docker GPU in locale
Crea una nuova immagine per il job di addestramento GPU utilizzando il Dockerfile GPU. Per evitare di eseguire l'override dell'immagine della CPU, devi ridefinire
IMAGE_REPO_NAME
eIMAGE_TAG
con nomi diversi da quelli utilizzati in precedenza nel tutorial.export PROJECT_ID=$(gcloud config list project --format "value(core.project)") export IMAGE_REPO_NAME=mnist_pytorch_gpu_container export IMAGE_TAG=mnist_pytorch_gpu export IMAGE_URI=gcr.io/$PROJECT_ID/$IMAGE_REPO_NAME:$IMAGE_TAG docker build -f Dockerfile-gpu -t $IMAGE_URI ./
Se disponi di GPU disponibili sulla tua macchina e hai installato
nvidia-docker
, puoi verificare l'immagine eseguendola localmente:docker run --runtime=nvidia $IMAGE_URI --epochs 1
Esegui il push dell'immagine Docker in Container Registry. Innanzitutto, esegui
gcloud auth configure-docker
, se non l'hai ancora fatto.docker push $IMAGE_URI
Invia il job
In questo esempio viene utilizzato il livello di scalabilità GPU di base per inviare la richiesta del job di addestramento. Consulta altre opzioni per le macchine per l'addestramento con GPU.
Ridefinisci
MODEL_DIR
eJOB_NAME
. DefinisciREGION
se non lo hai già fatto:export MODEL_DIR=pytorch_model_gpu_$(date +%Y%m%d_%H%M%S) export REGION=us-central1 export JOB_NAME=custom_container_job_gpu_$(date +%Y%m%d_%H%M%S)
Invia il job di addestramento ad AI Platform Training utilizzando gcloud CLI. Passa l'URI all'immagine Docker utilizzando il flag
--master-image-uri
.gcloud ai-platform jobs submit training $JOB_NAME \ --scale-tier BASIC_GPU \ --region $REGION \ --master-image-uri $IMAGE_URI \ -- \ --epochs=5 \ --model-dir=gs://$BUCKET_NAME/$MODEL_DIR
Passaggi successivi
- Scopri di più sui concetti relativi all'utilizzo dei container.
- Scopri di più sull'addestramento distribuito con container personalizzati.