TF_CONFIG e addestramento distribuito

Quando esegui un job di addestramento, AI Platform Training imposta una variabile di ambiente denominata TF_CONFIG su ogni istanza di macchina virtuale (VM) che fa parte del tuo job. Il codice di addestramento, che viene eseguito su ogni VM, può utilizzare la variabile di ambiente TF_CONFIG per accedere ai dettagli sul job di addestramento e sul ruolo della VM su cui è in esecuzione.

TensorFlow utilizza la variabile di ambiente TF_CONFIG per facilitare l'addestramento distribuito, ma probabilmente non sarà necessario accedervi direttamente nel codice di addestramento. Questo documento descrive la variabile di ambiente TF_CONFIG e il suo utilizzo nei job TensorFlow distribuiti e di ottimizzazione degli iperparametri.

Il formato di TF_CONFIG

AI Platform Training imposta la variabile di ambiente TF_CONFIG su ogni VM di ogni job di addestramento per soddisfare le specifiche richieste da TensorFlow per l'addestramento distribuito. Tuttavia, AI Platform Training imposta anche campi aggiuntivi nella variabile di ambiente TF_CONFIG oltre a quelli richiesti da TensorFlow.

La variabile di ambiente TF_CONFIG è una stringa JSON con il seguente formato:

TF_CONFIG campi
cluster

La descrizione del cluster TensorFlow. Un dizionario che mappa uno o più nomi di attività (chief, worker, ps o master) a elenchi di indirizzi di rete in cui sono in esecuzione queste attività. Per un determinato job di addestramento, il dizionario è lo stesso su ogni VM.

Questo è un primo argomento valido per il costruttore tf.train.ClusterSpec. Tieni presente che questo dizionario non contiene mai evaluator come chiave, poiché i valutatori non sono considerati parte del cluster di addestramento anche se li utilizzi per il tuo job.

Scopri di più sulla differenza tra chief e master in un'altra sezione di questo documento.

task

La descrizione dell'attività della VM in cui è impostata questa variabile di ambiente. Per un determinato job di addestramento, questo dizionario è diverso per ogni VM. Puoi utilizzare queste informazioni per personalizzare il codice eseguito su ogni VM in un job di addestramento distribuito. Puoi utilizzarlo anche per modificare il comportamento del codice di addestramento per diverse prove di un job di ottimizzazione degli iperparametri.

Questo dizionario include le seguenti coppie chiave-valore:

task campi
type

Il tipo di attività eseguita da questa VM. Questo valore è impostato su worker sui worker, ps sui server dei parametri e evaluator sui valutatori. Nel worker master del job, il valore è impostato su chief o master. Scopri di più sulla differenza tra i due nella sezione chief e master di questo documento.

index

L'indice in base zero dell'attività. Ad esempio, se il job di addestramento include due worker, questo valore è impostato su 0 su uno e 1 sull'altro.

trial

L'ID della prova di ottimizzazione degli iperparametri attualmente in esecuzione su questa VM. Questo campo viene impostato solo se il job di addestramento attuale è un job di ottimizzazione degli iperparametri.

Per i job di ottimizzazione degli iperparametri, AI Platform Training esegue il tuo codice di addestramento ripetutamente in molte prove con iperparametri diversi. Questo campo contiene il numero della prova attuale, a partire da 1 per la prima prova.

cloud

Un ID utilizzato internamente da AI Platform Training. Puoi ignorare questo campo.

job

Il campo TrainingInput fornito per creare il job di addestramento attuale, rappresentato come dizionario.

environment

La stringa cloud.

Per i job di addestramento con container personalizzati, AI Platform Training imposta una variabile di ambiente aggiuntiva denominata CLUSTER_SPEC, che ha un formato simile a TF_CONFIG ma con diverse importanti differenze. Scopri di più sulla variabile di ambiente CLUSTER_SPEC.

Esempio

Il codice di esempio seguente stampa la variabile di ambiente TF_CONFIG nei log di addestramento:

import json
import os

tf_config_str = os.environ.get('TF_CONFIG')
tf_config_dict  = json.loads(tf_config_str)

# Convert back to string just for pretty printing
print(json.dumps(tf_config_dict, indent=2))

In un job di ottimizzazione degli iperparametri in esecuzione in runtime 2.1 o versione successiva e che utilizza un worker master, due worker e un server dei parametri, questo codice produce il log seguente per uno dei worker durante la prima prova di ottimizzazione degli iperparametri. L'output di esempio nasconde il campo job per la concisione e sostituisce alcuni ID con valori generici.

{
  "cluster": {
    "chief": [
      "cmle-training-chief-[ID_STRING_1]-0:2222"
    ],
    "ps": [
      "cmle-training-ps-[ID_STRING_1]-0:2222"
    ],
    "worker": [
      "cmle-training-worker-[ID_STRING_1]-0:2222",
      "cmle-training-worker-[ID_STRING_1]-1:2222"
    ]
  },
  "environment": "cloud",
  "job": {
    ...
  },
  "task": {
    "cloud": "[ID_STRING_2]",
    "index": 0,
    "trial": "1",
    "type": "worker"
  }
}

chief contro master

La VM worker master in AI Platform Training corrisponde al tipo di attività chief in TensorFlow. Sebbene TensorFlow possa designare un'attività worker che agisca come chief, AI Platform Training indica sempre esplicitamente un chief.

master è un tipo di attività deprecato in TensorFlow. master ha rappresentato un'attività che svolgeva un ruolo simile a chief, ma che funzionava anche come evaluator in alcune configurazioni. TensorFlow 2 non supporta le variabili di ambiente TF_CONFIG contenenti un'attività master.

AI Platform Training utilizza chief nei campi cluster e task della variabile di ambiente TF_CONFIG se si verifica una delle seguenti condizioni:

In caso contrario, per motivi di compatibilità, AI Platform Training utilizza il tipo di attività master deprecato anziché chief.

Quando utilizzare TF_CONFIG

Come menzionato in una sezione precedente, probabilmente non è necessario interagire con la variabile di ambiente TF_CONFIG direttamente nel codice di addestramento. Accedi alla variabile di ambiente TF_CONFIG solo se le strategie di distribuzione di TensorFlow e il flusso di lavoro di ottimizzazione degli iperparametri standard di AI Platform Training, entrambi descritti nelle sezioni successive, non funzionano per il tuo job.

Addestramento distribuito

AI Platform Training imposta la variabile di ambiente TF_CONFIG per estendere le specifiche richieste da TensorFlow per l'addestramento distribuito.

Per eseguire l'addestramento distribuito con TensorFlow, utilizza l'API tf.distribute.Strategy. In particolare, ti consigliamo di utilizzare l'API Keras insieme a MultiWorkerMirroredStrategy oppure, se specifichi i server dei parametri per il job, ParameterServerStrategy. Tuttavia, tieni presente che al momento TensorFlow fornisce supporto solo per queste strategie.

Queste strategie di distribuzione utilizzano la variabile di ambiente TF_CONFIG per assegnare i ruoli a ciascuna VM nel job di addestramento e per facilitare la comunicazione tra le VM. Non è necessario accedere alla variabile di ambiente TF_CONFIG direttamente nel codice di addestramento, perché è TensorFlow a occuparsene per te.

Analizza direttamente la variabile di ambiente TF_CONFIG solo se vuoi personalizzare il comportamento delle diverse VM che eseguono il job di addestramento.

Ottimizzazione degli iperparametri

Quando esegui un job di ottimizzazione degli iperparametri, AI Platform Training fornisce argomenti diversi al codice di addestramento per ogni prova. Il codice di addestramento non deve necessariamente essere a conoscenza di quale prova è attualmente in esecuzione. Inoltre, AI Platform Training offre strumenti per monitorare l'avanzamento dei job di ottimizzazione degli iperparametri.

Se necessario, il tuo codice può leggere l'attuale numero di prova dal campo trial del campo task della variabile di ambiente TF_CONFIG.

Passaggi successivi