Addestramento di DLRM e DCN su Cloud TPU (TF 2.x)


Questo tutorial mostra come addestrare i modelli di ranking DLRM e DCN v2 che possono essere utilizzati per attività come la previsione della percentuale di clic (CTR). Consulta la nota in Eseguire la configurazione per il modello DLRM o DCN per scoprire come impostare i parametri per addestrare un modello di ranking DLRM o DCN 2.

Gli input del modello sono caratteristiche numeriche e categoriche e l'output è un tipo scalare (ad es. la probabilità di clic). Il modello può essere addestrato e valutato su Cloud TPU. I modelli di ranking profondo usano entrambi la memoria (per l'incorporamento tabelle e ricerche) e ad alta intensità di calcolo per reti profonde (MLP). Le TPU sono progettato per entrambi.

Il modello utilizza uno strato TPUEmbedding per le caratteristiche categoriche. L'embedding TPU supporta tabelle di embedding di grandi dimensioni con ricerca rapida. Le dimensioni delle tabelle di embedding aumentano in modo lineare con le dimensioni di un pod TPU. È possibile creare tabelle di incorporamento fino a 90 GB utilizzata per TPU v3-8, 5,6 TB per un pod v3-512 e 22,4 TB per un pod di TPU v3-2048.

Il codice del modello si trova nella libreria dei motori per suggerimenti di TensorFlow. mentre la pipeline di input, la configurazione e il loop di addestramento sono descritti nel TensorFlow Model Garden.

Obiettivi

  • configura l'ambiente di addestramento
  • Esegui il job di addestramento utilizzando dati sintetici
  • Verificare i risultati di output

Costi

In questo documento utilizzi i seguenti componenti fatturabili di Google Cloud:

  • Compute Engine
  • Cloud TPU
  • Cloud Storage

Per generare una stima dei costi basata sull'utilizzo previsto, utilizza il Calcolatore prezzi. I nuovi utenti di Google Cloud potrebbero essere idonei per una prova gratuita.

Prima di iniziare

Prima di iniziare questo tutorial, verifica che il tuo progetto Google Cloud sia corretto configurazione.

  1. 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.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  5. Make sure that billing is enabled for your Google Cloud project.

  6. Questa procedura dettagliata utilizza i componenti fatturabili di Google Cloud. Consulta la pagina Prezzi per Cloud TPU per stimare i costi. Assicurati di pulire le risorse TPU che crei quando per evitare addebiti inutili.

Configura le risorse

Questa sezione fornisce informazioni sulla configurazione del bucket Cloud Storage, della VM e delle risorse Cloud TPU utilizzate da questo tutorial.

  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.

    Per ulteriori informazioni sul comando gcloud, consulta la documentazione su Google Cloud CLI.

    gcloud config set project ${PROJECT_ID}

    La prima volta che esegui questo comando in una nuova VM Cloud Shell, Pagina Authorize Cloud Shell visualizzata. Fai clic su Authorize nella parte inferiore della pagina per consentire a gcloud di effettuare chiamate API con le tue credenziali.

  4. Creare un account di servizio per il progetto Cloud TPU.

    gcloud beta services identity create --service tpu.googleapis.com --project $PROJECT_ID

    Il comando restituisce un account di servizio Cloud TPU con il seguente formato:

    service-PROJECT_NUMBER@cloud-tpu.iam.gserviceaccount.com
    

  5. Crea un bucket Cloud Storage utilizzando il seguente comando, in cui l'opzione --location specifica la regione in cui deve essere creato il bucket. Per ulteriori dettagli su zone e regioni, consulta Tipi e zone:

    gcloud storage buckets create gs://bucket-name --project=${PROJECT_ID} --location=europe-west4

    Questo bucket Cloud Storage archivia i dati che utilizzi per addestrare il modello e i risultati dell'addestramento. Lo strumento gcloud compute tpus tpu-vm utilizzato in questo tutorial configura le autorizzazioni predefinite per l'account di servizio Cloud TPU configurato nel passaggio precedente. Se vuoi autorizzazioni più granulari, rivedi le autorizzazioni a livello di accesso.

    La località del bucket deve trovarsi nella stessa regione di Compute Engine (VM) e il tuo nodo Cloud TPU.

  6. Avvia una VM di Compute Engine e Cloud TPU utilizzando il comando gcloud.

    $ gcloud compute tpus tpu-vm create dlrm-dcn-tutorial \
        --zone=europe-west4-a \
        --accelerator-type=v3-8 \
        --version=tpu-vm-tf-2.17.0-se

    Descrizioni flag di comando

    zone
    La zona in cui prevedi di creare la tua Cloud TPU.
    accelerator-type
    Il tipo di acceleratore specifica la versione e le dimensioni della Cloud TPU che vuoi creare. Per ulteriori informazioni sui tipi di acceleratori supportati per ogni versione di TPU, vedi Versioni TPU.
    version
    La versione software di Cloud TPU.
  7. Connettiti all'istanza Compute Engine tramite SSH. Quando sei connesso alla VM, il prompt della shell cambia da username@projectname a username@vm-name:

    gcloud compute tpus tpu-vm ssh dlrm-dcn-tutorial --zone=europe-west4-a

Imposta le variabili del bucket Cloud Storage

Configura le seguenti variabili di ambiente, sostituendo bucket-name con il nome del tuo bucket Cloud Storage:

(vm)$ export STORAGE_BUCKET=gs://bucket-name
(vm)$ export PYTHONPATH="/usr/share/tpu/models/:${PYTHONPATH}"
(vm)$ export EXPERIMENT_NAME=dlrm-exp

Imposta una variabile di ambiente per il nome della TPU.

  (vm)$ export TPU_NAME=local
  

L'applicazione di addestramento si aspetta che i dati di addestramento siano accessibili in Cloud Storage. L'applicazione di addestramento utilizza anche il tuo bucket Cloud Storage per archiviare i checkpoint durante l'addestramento.

Configura per eseguire il modello DLRM o DCN con dati sintetici

Il modello può essere addestrato su vari set di dati. Due tra i più utilizzati sono Criteo Terabyte e Criteo Kaggle. Questo tutorial addestra i dati sintetici impostando il flag use_synthetic_data=True.

Il set di dati sintetico è utile solo per capire come utilizzare Cloud TPU e convalidare le prestazioni end-to-end. L'accuratezza i numeri e il modello salvato non saranno significativi.

Visita Criteo Terabyte e Criteo Kaggle siti web per informazioni su come scaricare pre-elaborazione di questi set di dati.

  1. Installa i pacchetti richiesti.

    (vm)$ pip3 install tensorflow-recommenders
    (vm)$ pip3 install -r /usr/share/tpu/models/official/requirements.txt
  2. Passa alla directory dello script.

    (vm)$ cd /usr/share/tpu/models/official/recommendation/ranking
  3. Esegui lo script di addestramento. Viene utilizzato un set di dati falso simile a Criteo per addestrare il modello DLRM. L'addestramento richiede circa 20 minuti.

    export EMBEDDING_DIM=32
    
    python3 train.py --mode=train_and_eval \
         --model_dir=${STORAGE_BUCKET}/model_dirs/${EXPERIMENT_NAME} --params_override="
         runtime:
             distribution_strategy: 'tpu'
         task:
             use_synthetic_data: true
             train_data:
                 input_path: '${DATA_DIR}/train/*'
                 global_batch_size: 16384
             validation_data:
                 input_path: '${DATA_DIR}/eval/*'
                 global_batch_size: 16384
             model:
                 num_dense_features: 13
                 bottom_mlp: [512,256,${EMBEDDING_DIM}]
                 embedding_dim: ${EMBEDDING_DIM}
                 top_mlp: [1024,1024,512,256,1]
                 interaction: 'dot'
                 vocab_sizes: [39884406, 39043, 17289, 7420, 20263, 3, 7120, 1543, 63,
                     38532951, 2953546, 403346, 10, 2208, 11938, 155, 4, 976, 14,
                     39979771, 25641295, 39664984, 585935, 12972, 108, 36]
         trainer:
             use_orbit: false
             validation_interval: 1000
             checkpoint_interval: 1000
             validation_steps: 500
             train_steps: 1000
             steps_per_loop: 1000
         "
    

Questo addestramento viene eseguito per circa 10 minuti su una TPU v3-8. Al termine, visualizzerai messaggi simili ai seguenti:

I0621 21:32:58.519792 139675269142336 tpu_embedding_v2_utils.py:907] Done with log of TPUEmbeddingConfiguration.
I0621 21:32:58.540874 139675269142336 tpu_embedding_v2.py:389] Done initializing TPU Embedding engine.
1000/1000 [==============================] - 335s 335ms/step - auc: 0.7360 - accuracy: 0.6709 - prediction_mean: 0.4984
- label_mean: 0.4976 - loss: 0.0734 - regularization_loss: 0.0000e+00 - total_loss: 0.0734 - val_auc: 0.7403
- val_accuracy: 0.6745 - val_prediction_mean: 0.5065 - val_label_mean: 0.4976 - val_loss: 0.0749
- val_regularization_loss: 0.0000e+00 - val_total_loss: 0.0749

Model: "ranking"
_________________________________________________________________
Layer (type)                 Output Shape              Param #
=================================================================
tpu_embedding (TPUEmbedding) multiple                  1
_________________________________________________________________
mlp (MLP)                    multiple                  154944
_________________________________________________________________
mlp_1 (MLP)                  multiple                  2131969
_________________________________________________________________
dot_interaction (DotInteract multiple                  0
_________________________________________________________________
ranking_1 (Ranking)          multiple                  0
=================================================================
Total params: 2,286,914
Trainable params: 2,286,914
Non-trainable params: 0
_________________________________________________________________
I0621 21:43:54.977140 139675269142336 train.py:177] Train history: {'auc': [0.7359596490859985],
'accuracy': [0.67094486951828], 'prediction_mean': [0.4983849823474884], 'label_mean': [0.4975697994232178],
'loss': [0.07338511198759079], 'regularization_loss': [0], 'total_loss': [0.07338511198759079],
'val_auc': [0.7402724623680115], 'val_accuracy': [0.6744520664215088], 'val_prediction_mean': [0.5064718723297119],
'val_label_mean': [0.4975748658180237], 'val_loss': [0.07486172765493393],
'val_regularization_loss': [0], 'val_total_loss': [0.07486172765493393]}

Esegui la pulizia

Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo tutorial, elimina il progetto che contiene le risorse oppure mantieni il progetto ed elimina le singole risorse.

  1. Se non l'hai ancora fatto, disconnetti dall'istanza Compute Engine:

    (vm)$ exit

    Il tuo prompt ora dovrebbe essere username@projectname per indicare che stai in Cloud Shell.

  2. Elimina le risorse Cloud TPU.

    $ gcloud compute tpus tpu-vm delete dlrm-dcn-tutorial \
      --zone=europe-west4-a
  3. Verifica che le risorse siano state eliminate eseguendo gcloud compute tpus tpu-vm list. L'eliminazione potrebbe richiedere alcuni minuti. L'output del comando seguente non devono includere nessuna delle risorse create in questo tutorial:

    $ gcloud compute tpus tpu-vm list --zone=europe-west4-a
  4. Elimina il bucket Cloud Storage utilizzando la CLI gcloud. Sostituisci bucket-name con il nome del tuo bucket Cloud Storage.

    $ gcloud storage rm gs://bucket-name --recursive

Passaggi successivi

I tutorial di TensorFlow Cloud TPU generalmente addestrano il modello utilizzando un set di dati di esempio. I risultati di questo addestramento non sono utilizzabili per l'inferenza. A per l'inferenza, puoi addestrare i dati su una o il tuo set di dati. Modelli TensorFlow addestrati su Cloud TPU richiedono generalmente che i set di dati siano TFRecord.

Puoi utilizzare lo strumento di conversione dei set di dati sample per convertire un'immagine in formato TFRecord. Se non utilizzi un modello di classificazione delle immagini, dovrai convertire autonomamente il tuo set di dati in formato TFRecord. Per ulteriori informazioni, consulta TFRecord e tf.Example.

Ottimizzazione degli iperparametri

Per migliorare le prestazioni del modello con il tuo set di dati, puoi ottimizzare e regolare gli iperparametri. Puoi trovare informazioni sugli iperparametri comuni a tutti i modelli supportati da TPU su GitHub. Puoi trovare informazioni sugli iperparametri specifici del modello nella fonte per ciascuno un modello di machine learning. Per ulteriori informazioni sull'ottimizzazione degli iperparametri, consulta la Panoramica delle ottimizzazione degli iperparametri e Tune e regolare gli iperparametri.

Inferenza

Una volta addestrato il modello, puoi utilizzarlo per l'inferenza (chiamato anche previsione). Puoi utilizzare lo strumento di conversione per l'inferenza Cloud TPU per preparare e ottimizzare un modello TensorFlow per l'inferenza su Cloud TPU v5e. Per ulteriori informazioni sull'inferenza su Cloud TPU v5e, consulta l'introduzione all'inferenza su Cloud TPU v5e.