Addestrare DLRM su Cloud TPU utilizzando PyTorch

Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

Questo tutorial mostra come addestrare DLD Ricerca Facebook su una Cloud TPU.

Obiettivi

  • Creare e configurare l'ambiente PyTorch
  • Eseguire il job di addestramento con dati falsi
  • (Facoltativo) Esegui l'addestramento sul set di dati Criteo Kaggle

Costi

Questo tutorial utilizza i seguenti componenti fatturabili di Google Cloud:

  • Compute Engine
  • Cloud TPU

Per generare una stima dei costi in base all'utilizzo previsto, utilizza il Calcolatore prezzi. I nuovi utenti di Google Cloud possono beneficiare di una prova gratuita.

Prima di iniziare

Prima di iniziare questo tutorial, controlla che il tuo progetto Google Cloud sia configurato correttamente.

  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 dei progetti in Google Cloud Console, seleziona o crea un progetto Google Cloud.

    Vai al selettore progetti

  3. Assicurati che la fatturazione sia attivata per il tuo progetto Cloud. Scopri come verificare se la fatturazione è abilitata su un progetto.

  4. Nella pagina del selettore dei progetti in Google Cloud Console, seleziona o crea un progetto Google Cloud.

    Vai al selettore progetti

  5. Assicurati che la fatturazione sia attivata per il tuo progetto Cloud. Scopri come verificare se la fatturazione è abilitata su un progetto.

  6. Questa procedura dettagliata utilizza componenti fatturabili di Google Cloud. Controlla la pagina dei prezzi di Cloud TPU per stimare i costi. Assicurati di ripulire le risorse che crei quando hai finito di utilizzarle per evitare addebiti non necessari.

Configura un'istanza di Compute Engine

  1. Apri una finestra di Cloud Shell.

    Apri Cloud Shell

  2. Crea una variabile per l'ID del progetto.

    export PROJECT_ID=project-id
    
  3. Configura Google Cloud CLI in modo da utilizzare il progetto in cui vuoi creare Cloud TPU.

    gcloud config set project ${PROJECT_ID}
    

    La prima volta che esegui questo comando in una nuova VM Cloud Shell, viene visualizzata una pagina Authorize Cloud Shell. Fai clic su Authorize in fondo alla pagina per consentire a gcloud di effettuare chiamate API Google Cloud con le tue credenziali.

  4. Da Cloud Shell, avvia la risorsa Compute Engine richiesta per questo tutorial. Nota: ti consigliamo di utilizzare l'oggetto n1-highmem-96 machine-type se esegui l'addestramento sul set di dati Criteo Kaggle.

    gcloud compute instances create dlrm-tutorial \
    --zone=us-central1-a \
    --machine-type=n1-standard-64 \
    --image-family=torch-xla \
    --image-project=ml-images  \
    --boot-disk-size=200GB \
    --scopes=https://www.googleapis.com/auth/cloud-platform
    
  5. Connettiti alla nuova istanza di Compute Engine.

    gcloud compute ssh dlrm-tutorial --zone=us-central1-a
    

Avvia una risorsa Cloud TPU

  1. Dalla macchina virtuale Compute Engine, avvia una risorsa Cloud TPU utilizzando il seguente comando:

    (vm) $ gcloud compute tpus create dlrm-tutorial \
    --zone=us-central1-a \
    --network=default \
    --version=pytorch-1.13  \
    --accelerator-type=v3-8
    
  2. Identificare l'indirizzo IP della risorsa Cloud TPU.

    (vm) $ gcloud compute tpus describe dlrm-tutorial --zone=us-central1-a
    

Creare e configurare l'ambiente PyTorch

  1. Avvia un ambiente conda.

    (vm) $ conda activate torch-xla-1.13
    
  2. Configura le variabili di ambiente per la risorsa Cloud TPU.

    (vm) $ export TPU_IP_ADDRESS=ip-address
    
    (vm) $ export XRT_TPU_CONFIG="tpu_worker;0;$TPU_IP_ADDRESS:8470"
    

Eseguire il job di addestramento con dati falsi

  1. Installare le dipendenze.

    (vm) $ pip install onnx
    
  2. Esegui il modello su dati casuali. L'operazione dovrebbe richiedere 5-10 minuti.

    (vm) $ python /usr/share/torch-xla-1.13/tpu-examples/deps/dlrm/dlrm_tpu_runner.py \
        --arch-embedding-size=1000000-1000000-1000000-1000000-1000000-1000000-1000000-1000000 \
        --arch-sparse-feature-size=64 \
        --arch-mlp-bot=512-512-64 \
        --arch-mlp-top=1024-1024-1024-1 \
        --arch-interaction-op=dot \
        --lr-num-warmup-steps=10 \
        --lr-decay-start-step=10 \
        --mini-batch-size=2048 \
        --num-batches=1000 \
        --data-generation='random' \
        --numpy-rand-seed=727 \
        --print-time \
        --print-freq=100 \
        --num-indices-per-lookup=100 \
        --use-tpu \
        --num-indices-per-lookup-fixed \
        --tpu-model-parallel-group-len=8 \
        --tpu-metrics-debug \
        --tpu-cores=8
    

(Facoltativo) Esegui l'addestramento sul set di dati Criteo Kaggle

Questi passaggi sono facoltativi. Dovresti eseguirli solo se vuoi addestrare il set di dati di Criteo Kaggle.

  1. Scarica il set di dati.

    Scarica il set di dati dal set di dati Criteo Kaggle seguendo le istruzioni qui. Al termine del download, copia il file dac.tar.gz in una directory denominata ./criteo-kaggle/. Usa il comando tar -xzvf per estrarre i contenuti del file tar.gz nella directory ./critero-kaggle.

     (vm) $ mkdir criteo-kaggle
     (vm) $ cd criteo-kaggle
     (vm) $ # Download dataset from above link here.
     (vm) $ tar -xzvf dac.tar.gz
     (vm) $ cd ..
    
  2. Pre-elabora il set di dati.

    Avvia questo script per pre-elaborare il set di dati Criteo. Questo script produce un file denominato kaggleAdDisplayChallenge_processed.npz e richiede più di 3 ore per pre-elaborare il set di dati.

    (vm) $ python /usr/share/torch-xla-1.13/tpu-examples/deps/dlrm/dlrm_data_pytorch.py \
        --data-generation=dataset \
        --data-set=kaggle \
        --raw-data-file=criteo-kaggle/train.txt \
        --mini-batch-size=128 \
        --memory-map \
        --test-mini-batch-size=16384 \
        --test-num-workers=4
    
  3. Verifica che la pre-elaborazione sia andata a buon fine.

    Dovresti vedere il file kaggleAdDisplayChallenge_processed.npz nella directory criteo-kaggle.

  4. Esegui lo script di addestramento su un set di dati Criteo Kaggle pre-elaborato.

    (vm) $ python /usr/share/torch-xla-1.13/tpu-examples/deps/dlrm/dlrm_tpu_runner.py \
        --arch-sparse-feature-size=16 \
        --arch-mlp-bot="13-512-256-64-16" \
        --arch-mlp-top="512-256-1" \
        --data-generation=dataset \
        --data-set=kaggle \
        --raw-data-file=criteo-kaggle/train.txt \
        --processed-data-file=criteo-kaggle/kaggleAdDisplayChallenge_processed.npz \
        --loss-function=bce \
        --round-targets=True \
        --learning-rate=0.1 \
        --mini-batch-size=128 \
        --print-freq=1024 \
        --print-time \
        --test-mini-batch-size=16384 \
        --test-num-workers=4 \
        --memory-map \
        --test-freq=101376 \
        --use-tpu \
        --num-indices-per-lookup=1 \
        --num-indices-per-lookup-fixed \
        --tpu-model-parallel-group-len 8 \
        --tpu-metrics-debug \
        --tpu-cores=8
    

    L'addestramento dovrebbe essere completato in più di 2 ore con una precisione del 78,75%+.

Esegui la pulizia

Esegui una pulizia per evitare che al tuo account vengano addebitati costi inutili dopo aver utilizzato le risorse create:

  1. Disconnettiti dall'istanza di Compute Engine, se non lo hai già fatto:

    (vm) $ exit
    

    Il tuo prompt dovrebbe ora essere user@projectname, a indicare che ti trovi in Cloud Shell.

  2. In Cloud Shell, utilizza Google Cloud CLI per eliminare l'istanza di Compute Engine:

    $ gcloud compute instances delete dlrm-tutorial --zone=us-central1-a
    
  3. Utilizza Google Cloud CLI per eliminare la risorsa Cloud TPU.

    $ gcloud compute tpus delete dlrm-tutorial --zone=us-central1-a
    

Passaggi successivi

Prova i colab PyTorch: