Addestra un modello ML con PyTorch

Questo tutorial descrive come eseguire un job di addestramento che utilizza il framework di machine learning PyTorch. Il tutorial descrive in che modo la configurazione del job per l'utilizzo di PyTorch differisce leggermente dall'utilizzo di altri framework di ML supportati da AI Platform Training. Poi mostra come eseguire un job di addestramento utilizzando un codice PyTorch di esempio che addestra un modello in base ai dati del set di dati Chicago Taxi Trips.

Il tutorial mostra anche come utilizzare PyTorch con le GPU e con l'ottimizzazione degli iperparametri.

Container PyTorch

Le versioni di runtime di AI Platform Training non includono PyTorch come dipendenza. Per eseguire invece un job di addestramento che usa PyTorch, specifica un container PyTorch predefinito da utilizzare per AI Platform Training.

La configurazione di un container predefinito per l'addestramento utilizza parte della stessa sintassi di un container personalizzato. Tuttavia, non devi creare il tuo container Docker, ma devi specificare l'URI di un'immagine container fornita da AI Platform e fornire un pacchetto di addestramento Python creato da te.

AI Platform fornisce i seguenti container PyTorch predefiniti:

URI immagine container Versione PyTorch Processori supportati
gcr.io/cloud-ml-public/training/pytorch-xla.1-11 1.11 CPU, TPU
gcr.io/cloud-ml-public/training/pytorch-gpu.1-11 1.11 GPU
gcr.io/cloud-ml-public/training/pytorch-xla.1-10 1,1 CPU, TPU
gcr.io/cloud-ml-public/training/pytorch-gpu.1-10 1,1 GPU
gcr.io/cloud-ml-public/training/pytorch-xla.1-9 1.9 CPU, TPU
gcr.io/cloud-ml-public/training/pytorch-gpu.1-9 1.9 GPU
gcr.io/cloud-ml-public/training/pytorch-xla.1-7 1,7 CPU, TPU
gcr.io/cloud-ml-public/training/pytorch-gpu.1-7 1,7 GPU
gcr.io/cloud-ml-public/training/pytorch-xla.1-6 1.6 CPU, TPU
gcr.io/cloud-ml-public/training/pytorch-gpu.1-6 1.6 GPU
gcr.io/cloud-ml-public/training/pytorch-cpu.1-4 1.4 CPU
gcr.io/cloud-ml-public/training/pytorch-gpu.1-4 1.4 GPU

Queste immagini container sono derivate da Deep Learning Containers e includono le dipendenze fornite da Deep Learning Containers.

Se vuoi utilizzare una versione di PyTorch non disponibile in uno dei container predefiniti, segui la guida all'utilizzo di un container personalizzato.

Prima di iniziare

  1. 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.
  2. Nella pagina del selettore di progetti della console Google Cloud, seleziona o crea un progetto Google Cloud.

    Vai al selettore progetti

  3. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

  4. Attiva l'API AI Platform Training & Prediction.

    Abilita l'API

  5. Installa Google Cloud CLI.
  6. Per initialize gcloud CLI, esegui questo comando:

    gcloud init
  7. Nella pagina del selettore di progetti della console Google Cloud, seleziona o crea un progetto Google Cloud.

    Vai al selettore progetti

  8. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

  9. Attiva l'API AI Platform Training & Prediction.

    Abilita l'API

  10. Installa Google Cloud CLI.
  11. Per initialize gcloud CLI, esegui questo comando:

    gcloud init

Download del codice campione in corso...

Esegui i comandi seguenti per scaricare l'applicazione di addestramento PyTorch di esempio e vai alla directory con l'applicazione di addestramento:

git clone --depth=1 \
  https://github.com/GoogleCloudPlatform/ai-platform-samples.git

cd ai-platform-samples/training/pytorch/structured/python_package

Se vuoi, controlla la struttura del codice di addestramento:

ls -pR

La directory trainer/ contiene l'applicazione di addestramento PyTorch e setup.py fornisce i dettagli di configurazione per pacchettizzare l'applicazione di addestramento.

Creazione di un bucket Cloud Storage

Crea un bucket Cloud Storage per archiviare il codice di addestramento pacchettizzato e gli artefatti del modello creati dal job di addestramento. Esegui questo comando:

gsutil mb -l us-central1 gs://BUCKET_NAME

Sostituisci BUCKET_NAME con un nome univoco scelto per il bucket. Scopri di più sui requisiti per i nomi dei bucket.

In alternativa, puoi utilizzare un bucket Cloud Storage esistente nel tuo progetto Google Cloud. Per questo tutorial, assicurati di utilizzare un bucket nella regione us-central1.

Addestramento di un modello PyTorch

Questo tutorial mostra diversi modi per addestrare un modello PyTorch su AI Platform Training:

  • Su un'istanza di macchina virtuale (VM) con un processore CPU
  • Su una VM con un processore GPU
  • Utilizzo dell'ottimizzazione degli iperparametri (su una VM con processore CPU)

Scegli subito uno di questi metodi e segui le istruzioni nelle schede corrispondenti per il resto di questo tutorial. Puoi ripetere questa sezione se vuoi provare l'addestramento con una delle altre configurazioni.

Preparazione della creazione di un job di addestramento

Prima di creare un job di addestramento, assicurati che il codice di addestramento sia pronto e specifica alcune opzioni di configurazione nel tuo ambiente locale.

CPU

Imposta diverse variabili Bash da utilizzare quando crei il job di addestramento:

BUCKET_NAME=BUCKET_NAME
JOB_NAME=getting_started_pytorch_cpu
JOB_DIR=gs://${BUCKET_NAME}/${JOB_NAME}/models

Sostituisci BUCKET_NAME con il nome del bucket Cloud Storage che hai creato in una sezione precedente.

GPU

  1. Assicurati che il codice di addestramento PyTorch sia a conoscenza della GPU sulla VM utilizzata dal job di addestramento, in modo che PyTorch trasferisca correttamente i tensori e i moduli sulla GPU.

    Se utilizzi il codice campione fornito, non devi fare nulla, perché il codice campione contiene una logica per rilevare se la macchina che esegue il codice ha una GPU:

    cuda_availability = torch.cuda.is_available()
    if cuda_availability:
      device = torch.device('cuda:{}'.format(torch.cuda.current_device()))
    else:
      device = 'cpu'

    Se modifichi il codice di addestramento, leggi la guida di PyTorch alla semantica CUDA per assicurarti che venga utilizzata la GPU.

  2. Imposta diverse variabili Bash da utilizzare quando crei il job di addestramento:

    BUCKET_NAME=BUCKET_NAME
    JOB_NAME=getting_started_pytorch_gpu
    JOB_DIR=gs://${BUCKET_NAME}/${JOB_NAME}/models
    

    Sostituisci BUCKET_NAME con il nome del bucket Cloud Storage che hai creato in una sezione precedente.

Ottimizzazione degli iperparametri

Il codice campione per questo tutorial ottimizza i parametri del tasso di apprendimento e delle dimensioni del batch al fine di ridurre al minimo la perdita di test.

  1. Assicurati che il tuo codice di addestramento sia pronto per l'ottimizzazione degli iperparametri in AI Platform Training:

  2. Esegui questo comando per creare un file config.yaml che specifichi le opzioni di ottimizzazione degli iperparametri:

    cat > config.yaml <<END
    trainingInput:
      hyperparameters:
        goal: MINIMIZE
        hyperparameterMetricTag: test_loss
        maxTrials: 2
        maxParallelTrials: 2
        enableTrialEarlyStopping: True
        params:
        - parameterName: learning-rate
          type: DOUBLE
          minValue: 0.0001
          maxValue: 1
          scaleType: UNIT_LOG_SCALE
        - parameterName: batch-size
          type: INTEGER
          minValue: 1
          maxValue: 256
          scaleType: UNIT_LINEAR_SCALE
    END
    

    Queste opzioni ottimizzano gli iperparametri --learning-rate e --batch-size per ridurre al minimo la perdita di modelli.

  3. Imposta diverse variabili Bash da utilizzare quando crei il job di addestramento:

    BUCKET_NAME=BUCKET_NAME
    JOB_NAME=getting_started_pytorch_hptuning
    JOB_DIR=gs://${BUCKET_NAME}/${JOB_NAME}/models
    

    Sostituisci BUCKET_NAME con il nome del bucket Cloud Storage che hai creato in una sezione precedente.

Queste variabili Bash hanno i seguenti scopi:

  • JOB_NAME è un identificatore del job di AI Platform Training. Deve essere univoco tra i job di AI Platform Training nel progetto Google Cloud.
  • JOB_DIR viene utilizzato da AI Platform Training per determinare dove esattamente caricare l'applicazione di addestramento. L'applicazione di addestramento utilizza anche JOB_DIR per determinare dove esportare gli artefatti del modello al termine dell'addestramento.

Creazione di un job di addestramento

Esegui questo comando per creare un job di addestramento:

CPU

gcloud ai-platform jobs submit training ${JOB_NAME} \
  --region=us-central1 \
  --master-image-uri=gcr.io/cloud-ml-public/training/pytorch-xla.1-10 \
  --scale-tier=BASIC \
  --job-dir=${JOB_DIR} \
  --package-path=./trainer \
  --module-name=trainer.task \
  -- \
  --train-files=gs://cloud-samples-data/ai-platform/chicago_taxi/training/small/taxi_trips_train.csv \
  --eval-files=gs://cloud-samples-data/ai-platform/chicago_taxi/training/small/taxi_trips_eval.csv \
  --num-epochs=10 \
  --batch-size=100 \
  --learning-rate=0.001

GPU

gcloud ai-platform jobs submit training ${JOB_NAME} \
  --region=us-central1 \
  --master-image-uri=gcr.io/cloud-ml-public/training/pytorch-gpu.1-10 \
  --scale-tier=CUSTOM \
  --master-machine-type=n1-standard-8 \
  --master-accelerator=type=nvidia-tesla-p100,count=1 \
  --job-dir=${JOB_DIR} \
  --package-path=./trainer \
  --module-name=trainer.task \
  -- \
  --train-files=gs://cloud-samples-data/ai-platform/chicago_taxi/training/small/taxi_trips_train.csv \
  --eval-files=gs://cloud-samples-data/ai-platform/chicago_taxi/training/small/taxi_trips_eval.csv \
  --num-epochs=10 \
  --batch-size=100 \
  --learning-rate=0.001

Ottimizzazione degli iperparametri

gcloud ai-platform jobs submit training ${JOB_NAME} \
  --region=us-central1 \
  --master-image-uri=gcr.io/cloud-ml-public/training/pytorch-xla.1-10 \
  --scale-tier=BASIC \
  --job-dir=${JOB_DIR} \
  --package-path=./trainer \
  --module-name=trainer.task \
  --config=config.yaml \
  -- \
  --train-files=gs://cloud-samples-data/ai-platform/chicago_taxi/training/small/taxi_trips_train.csv \
  --eval-files=gs://cloud-samples-data/ai-platform/chicago_taxi/training/small/taxi_trips_eval.csv \
  --num-epochs=10

Leggi la guida ai job di addestramento per saperne di più sui flag di configurazione e su come utilizzarli per personalizzare l'addestramento.

Il comando restituisce un messaggio simile al seguente:

Job [JOB_NAME] submitted successfully.
Your job is still active. You may view the status of your job with the command

  $ gcloud ai-platform jobs describe JOB_NAME

or continue streaming the logs with the command

  $ gcloud ai-platform jobs stream-logs JOB_NAME
jobId: JOB_NAME
state: QUEUED

Puoi monitorare lo stato del job con il seguente comando:

gcloud ai-platform jobs describe ${JOB_NAME}

Puoi creare un flusso dei log di addestramento del job con il seguente comando:

gcloud ai-platform jobs stream-logs ${JOB_NAME}

Al termine del job di addestramento, il modello ML addestrato viene salvato in un file denominato model.pth in una directory con timestamp all'interno della directory JOB_DIR Cloud Storage specificata.

Passaggi successivi