Questa guida spiega come creare il tuo container personalizzato per eseguire job su AI Platform Training.
I passaggi per utilizzare i container
I seguenti passaggi mostrano la procedura di base per l'addestramento con container personalizzati:
- Configura un progetto Google Cloud e il tuo ambiente locale.
- Crea un contenitore personalizzato:
- Scrivi un Dockerfile che configuri il container per l'utilizzo con AI Platform Training e includa le dipendenze necessarie per l'applicazione di addestramento.
- Crea e testa il tuo container Docker localmente.
- Esegui il push del contenitore in Container Registry.
- Invia un job di addestramento che viene eseguito nel tuo container personalizzato.
L'utilizzo dell'ottimizzazione degli iperparametri o delle GPU richiede alcune modifiche, ma la procedura di base è la stessa.
Prima di iniziare
Utilizza Cloud Shell o qualsiasi ambiente in cui è installata l'interfaccia a riga di comando gcloud.
Completa i seguenti passaggi per configurare un account Google Cloud, abilitare le API richieste, installare e attivare Cloud SDK.
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the AI Platform Training & Prediction, Compute Engine and Container Registry APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the AI Platform Training & Prediction, Compute Engine and Container Registry APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
- Installa Docker.
Se utilizzi un sistema operativo basato su Linux, ad esempio 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}
Potresti dover riavviare il sistema dopo aver aggiunto te stesso al gruppo
docker
. - Apri Docker. Per assicurarti che Docker sia in esecuzione, esegui il seguente comando Docker, che restituisce la data e l'ora correnti:
docker run busybox date
- Utilizza
gcloud
come assistente per le credenziali per Docker:gcloud auth configure-docker
-
(Facoltativo) Se vuoi eseguire il contenitore utilizzando la GPU in locale, installa
nvidia-docker
.
Creazione di un container personalizzato
La creazione di un container personalizzato prevede la scrittura di un Dockerfile per configurare l'immagine Docker da utilizzare per il job di addestramento. Dopodiché, crea e testa la tua immagine localmente.
Nozioni di base su Dockerfile per AI Platform Training
Quando crei un container personalizzato, utilizzi un Dockerfile per specificare tutti i comandi necessari per creare l'immagine.
Questa sezione illustra un esempio generico di Dockerfile. Puoi trovare esempi specifici in ogni tutorial sui contenitori personalizzati e nei samples correlati.
Per l'utilizzo con AI Platform Training, il file Dockerfile deve includere comandi che coprono le seguenti attività:
- Scegli un'immagine di base
- Installa le dipendenze aggiuntive
- Copia il codice di addestramento nell'immagine
- Configura il punto di ingresso per AI Platform Training in modo da richiamare il codice di addestramento
Il Dockerfile potrebbe includere una logica aggiuntiva, a seconda delle tue esigenze. Scopri di più sulla scrittura di Dockerfile e, per ulteriori informazioni su ciascun comando specifico, consulta il riferimento Dockerfile.
Comando Dockerfile | Descrizione | Esempi |
---|---|---|
FROM image:tag |
Specifica un'immagine di base e il relativo tag. | Immagini di base di esempio con tag:
|
WORKDIR /path/to/directory |
Specifica la directory dell'immagine in cui vengono eseguite le istruzioni successive. | /root |
|
Installa pacchetti aggiuntivi utilizzando pip .Nota: se l'immagine di base non ha |
Pacchetti di esempio:
|
COPY src/foo.py dest/foo.py |
Copia il codice dell'applicazione di addestramento nell'immagine. A seconda della struttura dell'applicazione di addestramento, probabilmente include più file. | Esempi di nomi di file nell'applicazione di addestramento:
|
|
Configura il punto di ingresso per l'esecuzione del codice di addestramento. | ["python", "task.py"] |
La logica del Dockerfile può variare in base alle tue esigenze, ma in generale è simile a questa:
# Specifies base image and tag FROM image:tag WORKDIR /root # Installs additional packages RUN pip install pkg1 pkg2 pkg3 # Downloads training data RUN curl https://example-url/path-to-data/data-filename --output /root/data-filename # Copies the trainer code to the docker image. COPY your-path-to/model.py /root/model.py COPY your-path-to/task.py /root/task.py # Sets up the entry point to invoke the trainer. ENTRYPOINT ["python", "task.py"]
Creare e testare il container Docker localmente
Crea l'URI immagine corretto utilizzando le variabili di ambiente, quindi crea l'immagine Docker. Il flag
-t
assegna un nome e tagga l'immagine 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=example_custom_container_image export IMAGE_TAG=example_image_tag export IMAGE_URI=gcr.io/$PROJECT_ID/$IMAGE_REPO_NAME:$IMAGE_TAG docker build -f Dockerfile -t $IMAGE_URI ./
Verifica l'immagine eseguendola localmente. Tieni presente che il flag
--epochs
viene passato allo script del trainer.docker run $IMAGE_URI --epochs 1
Esegui il push del contenitore in Container Registry
Se l'esecuzione locale funziona, puoi eseguire il push del contenitore in Container Registry nel tuo progetto.
Esegui il push del container in Container Registry. Innanzitutto,
esegui gcloud auth configure-docker
se non l'hai già fatto.
docker push $IMAGE_URI
Gestire le autorizzazioni di Container Registry
Se utilizzi un'immagine di Container Registry dallo stesso progetto che utilizzi per eseguire l'addestramento su AI Platform Training, non è necessario configurare ulteriormente le autorizzazioni per questo tutorial e puoi passare al passaggio successivo.
Il controllo dell'accesso per Container Registry si basa su un bucket Cloud Storage dietro le quinte, quindi la configurazione delle autorizzazioni di Container Registry è molto simile alla configurazione delle autorizzazioni di Cloud Storage.
Se vuoi estrarre un'immagine da Container Registry in un altro progetto, devi consentire all'account di servizio AI Platform Training di accedere all'immagine dall'altro progetto.
- Trova il bucket Cloud Storage sottostante per le autorizzazioni di Container Registry.
- Concedi un ruolo (ad esempio Visualizzatore oggetti Storage) che includa le autorizzazioni
storage.objects.get
estorage.objects.list
al tuo account di servizio AI Platform Training.
Se vuoi eseguire il push dell'immagine Docker in un progetto diverso da quello utilizzato per inviare i job di addestramento di AI Platform Training, devi concedere all'account di servizio AI Platform Training l'accesso per il recupero delle immagini nel progetto che contiene i tuoi repository Container Registry. L'account di servizio è nel formatoservice-$CMLE_PROJ_NUM@cloud-ml.google.com.iam.gserviceaccount.com
e si trova nella console IAM.
Il seguente comando aggiunge l'account di servizio AI Platform Training al progetto Container Registry distinto:
export GCR_PROJ_ID=[YOUR-PROJECT-ID-FOR-GCR] export CMLE_PROJ_NUM=[YOUR-PROJECT-NUMBER-FOR-CMLE-JOB-SUBMISSION] export \ SVC_ACCT=service-$CMLE_PROJ_NUM@cloud-ml.google.com.iam.gserviceaccount.com gcloud projects add-iam-policy-binding $GCR_PROJ_ID \ --member serviceAccount:$SVC_ACCOUNT --role roles/ml.serviceAgent
Scopri di più su come configurare controllo dell'accesso per Container Registry.
Invia il job di addestramento
Invia il job di addestramento ad AI Platform Training utilizzando gcloud CLI. Passa
l'URI all'immagine Docker utilizzando il flag --master-image-uri
:
export BUCKET_NAME=custom_containers
export MODEL_DIR=example_model_$(date +%Y%m%d_%H%M%S)
gcloud ai-platform jobs submit training $JOB_NAME \
--region $REGION \
--master-image-uri $IMAGE_URI \
-- \
--model-dir=gs://$BUCKET_NAME/$MODEL_DIR \
--epochs=10
Ottimizzazione degli iperparametri con container personalizzati
Per eseguire l'ottimizzazione degli iperparametri con i contenitori personalizzati, devi apportare le seguenti modifiche:
- Nel Dockerfile: installa
cloudml-hypertune
. - Nel codice di addestramento:
- Utilizza
cloudml-hypertune
per registrare i risultati di ogni prova chiamando la relativa funzione di supportoreport_hyperparameter_tuning_metric
. - Aggiungi gli argomenti della riga di comando per ogni iperparametro e gestisci l'analisi sintattica degli argomenti con un analizzatore degli argomenti come
argparse
.
- Utilizza
- Nella richiesta di lavoro: aggiungi un
HyperparameterSpec
all'oggettoTrainingInput
.
Utilizzo delle GPU con container personalizzati
Per l'addestramento con le GPU, il container personalizzato deve soddisfare alcuni requisiti speciali. Devi creare un'immagine Docker diversa da quella che utilizzeresti per l'addestramento con le CPU.
Preinstalla CUDA Toolkit e cuDNN nel contenitore. L'utilizzo dell'immagine nvidia/cuda come immagine di base è il modo consigliato per gestire questo problema, poiché include il toolkit CUDA e cuDNN preinstallati e ti aiuta a configurare correttamente le variabili di ambiente correlate.
Se la configurazione di addestramento utilizza GPU NVIDIA A100, il container deve utilizzare CUDA 11 o versioni successive.
Installa dipendenze aggiuntive, ad esempio
wget
,curl
,pip
e altre ancora, necessarie per la tua applicazione di formazione.
Consulta un esempio di Dockerfile per l'addestramento con GPU.
Utilizzo di TPU con container personalizzati
Se esegui l'addestramento distribuito con TensorFlow, puoi utilizzare le TPU sulle VM worker. Per farlo, devi configurare il job di addestramento per l'utilizzo delle TPU e specificare il campo tpuTfVersion
quando invii il job di addestramento.
Addestramento distribuito con container personalizzati
Quando esegui un job di addestramento distribuito con container personalizzati, puoi specificare una sola immagine da utilizzare come server master, worker e dei parametri. Puoi anche creare e specificare immagini diverse per il server master, il server worker e il server dei parametri. In questo caso, le dipendenze saranno probabilmente uguali in tutte e tre le immagini e potrai eseguire una logica di codice diversa in ciascuna immagine.
Nel codice puoi utilizzare le variabili di ambiente TF_CONFIG
e
CLUSTER_SPEC
. Queste variabili di ambiente descrivono la struttura complessiva del cluster e AI Platform Training le compila automaticamente in ogni nodo del cluster di addestramento.
Scopri di più su CLUSTER_SPEC
.
Puoi specificare le immagini all'interno dell'oggetto TrainingInput
quando invii un job o tramite i relativi flag in gcloud ai-platform submit training
.
Per questo esempio, supponiamo che tu abbia già definito tre Dockerfile distinti, uno per ogni tipo di macchina (master, worker e server di parametri). Dopodiché, assegna un nome alle immagini, creale, testale ed esegui il push su Container Registry. Infine, invii un job di addestramento che specifica le diverse immagini insieme alla configurazione della macchina per il cluster.
Innanzitutto, esegui gcloud auth configure-docker
, se non l'hai già fatto.
export PROJECT_ID=$(gcloud config list project --format "value(core.project)")
export BUCKET_NAME=custom_containers
export MASTER_IMAGE_REPO_NAME=master_image_name
export MASTER_IMAGE_TAG=master_tag
export MASTER_IMAGE_URI=gcr.io/$PROJECT_ID/$MASTER_IMAGE_REPO_NAME:$MASTER_IMAGE_TAG
export WORKER_IMAGE_REPO_NAME=worker_image_name
export WORKER_IMAGE_TAG=worker_tag
export WORKER_IMAGE_URI=gcr.io/$PROJECT_ID/$WORKER_IMAGE_REPO_NAME:$WORKER_IMAGE_TAG
export PS_IMAGE_REPO_NAME=ps_image_name
export PS_IMAGE_TAG=ps_tag
export PS_IMAGE_URI=gcr.io/$PROJECT_ID/$PS_IMAGE_REPO_NAME:$PS_IMAGE_TAG
export MODEL_DIR=distributed_example_$(date +%Y%m%d_%H%M%S)
export REGION=us-central1
export JOB_NAME=distributed_container_job_$(date +%Y%m%d_%H%M%S)
docker build -f Dockerfile-master -t $MASTER_IMAGE_URI ./
docker build -f Dockerfile-worker -t $WORKER_IMAGE_URI ./
docker build -f Dockerfile-ps -t $PS_IMAGE_URI ./
docker run $MASTER_IMAGE_URI --epochs 1
docker run $WORKER_IMAGE_URI --epochs 1
docker run $PS_IMAGE_URI --epochs 1
docker push $MASTER_IMAGE_URI
docker push $WORKER_IMAGE_URI
docker push $PS_IMAGE_URI
gcloud ai-platform jobs submit training $JOB_NAME \
--region $REGION \
--master-machine-type complex_model_m \
--master-image-uri $MASTER_IMAGE_URI \
--worker-machine-type complex_model_m \
--worker-image-uri $WORKER_IMAGE_URI \
--worker-count 9 \
--parameter-server-machine-type large_model \
--parameter-server-image-uri $PS_IMAGE_URI \
--parameter-server-count 3 \
-- \
--model-dir=gs://$BUCKET_NAME/$MODEL_DIR \
--epochs=10
Credenziale predefinita nei container personalizzati
Quando esegui un job di addestramento con container personalizzati, per impostazione predefinita la tua applicazione viene eseguita come identità Cloud ML Service Agent. Puoi trovare l'ID account di servizio dell'agente di servizio Cloud ML per il tuo progetto nella pagina IAM della console Google Cloud. Questo ID ha il seguente formato:
service-PROJECT_NUMBER@cloud-ml.google.com.iam.gserviceaccount.com
Sostituisci PROJECT_NUMBER con il numero del progetto per il tuo progetto Google Cloud.
AI Platform Training utilizza automaticamente le credenziali dell'agente di servizio Cloud ML per configurare l'autenticazione e l'autorizzazione se utilizzi TensorFlow tfds
, le librerie client di Google Cloud o altri strumenti che utilizzano la strategia delle credenziali predefinite dell'applicazione.
Passaggi successivi
- Scopri di più su concetti relativi all'utilizzo dei container.
- Addestra un modello PyTorch utilizzando container personalizzati.
- Scopri di più sull'addestramento distribuito con container personalizzati.