TF_CONFIG e addestramento distribuito

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

TensorFlow utilizza la variabile di ambiente TF_CONFIG per semplificare l'addestramento distribuito, ma probabilmente non dovrai accedervi direttamente nel codice di addestramento. Questo documento descrive la variabile di ambiente TF_CONFIG e il relativo utilizzo nei job TensorFlow distribuiti e nei job 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 nell'ambiente TF_CONFIG diversa da quella richiesta 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) agli elenchi di reti gli indirizzi IP dove vengono eseguite queste attività. Per un determinato job di addestramento, questo dizionario è lo stesso su ogni VM.

Questo è un primo argomento valido per tf.train.ClusterSpec come costruttore. 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 la 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 su 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 il codice di addestramento per le diverse prove dell'ottimizzazione degli iperparametri lavoro.

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 parametri e evaluator sugli valutatori. Per il tuo lavoro worker master, il valore viene impostato su chief o master; scopri di più sulla differenza tra i due nel chief rispetto a master di questo documento.

index

L'indice in base zero dell'attività. Ad esempio, se il tuo job di addestramento include due worker, questo valore è impostato su 0 su uno di essi e su 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 corrente è un job di ottimizzazione degli iperparametri.

Per i job di ottimizzazione degli iperparametri, AI Platform Training esegue l'addestramento scrivere il codice ripetutamente in molte prove con iperparametri diversi, nel tempo. Questo campo contiene il numero di prova corrente, che inizia da 1 per la prima prova.

cloud

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

job

Il TrainingInput che hai fornito per creare il job di addestramento corrente, rappresentato come un dizionario.

environment

La stringa cloud.

Per i job di addestramento 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 le differenze. Scopri di più sull'ambiente CLUSTER_SPEC la variabile personalizzata.

Esempio

Il codice di esempio seguente stampa la variabile di ambiente TF_CONFIG nella tua 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 eseguito nel runtime versione 2.1 o successive e utilizza un worker master, due worker e un server dei parametri, questo codice produce il seguente log per uno dei worker durante la prima ottimizzazione degli iperparametri Google Cloud. L'output di esempio nasconde il campo job per 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 rispetto a master

La VM worker principale in AI Platform Training corrisponde al chieftipo di compito in TensorFlow. Sebbene TensorFlow possa nominare un'attività worker che agisca come chief, AI Platform Training designa sempre esplicitamente un chief.

master è un tipo di attività deprecato in TensorFlow. master rappresentava un'attività che svolgeva un ruolo simile a chief, ma fungeva anche da evaluator in alcune configurazioni. TensorFlow 2 non supporta l'ambiente TF_CONFIG che contengono un'attività master.

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

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

Quando utilizzare TF_CONFIG

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

Addestramento distribuito

AI Platform Training imposta la variabile di ambiente TF_CONFIG per estendere la specifiche richieste da TensorFlow per gli addestramento.

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

Queste strategie di distribuzione utilizzano la variabile di ambiente TF_CONFIG per assegnare ruoli a ciascuna VM nel tuo job di addestramento e per facilitare la comunicazione le VM. Non è necessario accedere direttamente alla variabile di ambiente TF_CONFIG nel codice di addestramento, perché TensorFlow lo gestisce al posto tuo.

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 diversi argomenti al codice di addestramento per ogni prova. Il tuo codice di addestramento non deve necessariamente sapere quale periodo di prova è attualmente in esecuzione. Nel Inoltre, AI Platform Training offre strumenti per monitorare i progressi ottimizzazione degli iperparametri offerte di lavoro.

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

Passaggi successivi