Utilizzo di Vertex AI TensorBoard con addestramento personalizzato

Quando utilizzi l'addestramento personalizzato per addestrare i modelli, puoi configurare il tuo job di addestramento in modo che carichi automaticamente i log di Vertex AI TensorBoard su Vertex AI TensorBoard.

Puoi utilizzare questa integrazione per monitorare l'addestramento quasi in tempo reale mentre Vertex AI TensorBoard streamma i log di Vertex AI TensorBoard man mano che vengono scritti in Cloud Storage.

Per la configurazione iniziale, consulta Configurazione per Vertex AI TensorBoard.

Modifiche allo script di allenamento

Lo script di addestramento deve essere configurato per scrivere i log TensorBoard nel bucket Cloud Storage, la località in cui il servizio Vertex AI Training metterà automaticamente a disposizione tramite una variabile di ambiente predefinita AIP_TENSORBOARD_LOG_DIR.

In genere, questo può essere fatto specificando os.environ['AIP_TENSORBOARD_LOG_DIR'] come directory dei log per le API di scrittura dei log di TensorBoard open source. La posizione del AIP_TENSORBOARD_LOG_DIR viene in genere impostata con la variabile staging_bucket.

Per configurare lo script di addestramento in TensorFlow 2.x, crea un callback di TensorBoard e imposta la variabile log_dir su os.environ['AIP_TENSORBOARD_LOG_DIR']. Il callback di TensorBoard viene poi incluso nell'elenco dei callback model.fit di TensorFlow.

  tensorboard_callback = tf.keras.callbacks.TensorBoard(
       log_dir=os.environ['AIP_TENSORBOARD_LOG_DIR'],
       histogram_freq=1
  )
  
  model.fit(
       x=x_train,
       y=y_train,
       epochs=epochs,
       validation_data=(x_test, y_test),
       callbacks=[tensorboard_callback],
  )
  

Scopri di più su come Vertex AI imposta le variabili di ambiente nel tuo ambiente di addestramento personalizzato.

Creare un job di addestramento personalizzato

L'esempio seguente mostra come creare un job di addestramento personalizzato.

Per un esempio dettagliato di come creare un job di addestramento personalizzato, consulta Hello custom training. Per la procedura di costruzione di container di addestramento personalizzati, consulta Creare un'immagine container personalizzata per l'addestramento.

Per creare un job di addestramento personalizzato, utilizza l'SDK Vertex AI per Python o REST.

Python

Python

def create_training_pipeline_custom_job_sample(
    project: str,
    location: str,
    staging_bucket: str,
    display_name: str,
    script_path: str,
    container_uri: str,
    model_serving_container_image_uri: str,
    dataset_id: Optional[str] = None,
    model_display_name: Optional[str] = None,
    args: Optional[List[Union[str, float, int]]] = None,
    replica_count: int = 0,
    machine_type: str = "n1-standard-4",
    accelerator_type: str = "ACCELERATOR_TYPE_UNSPECIFIED",
    accelerator_count: int = 0,
    training_fraction_split: float = 0.8,
    validation_fraction_split: float = 0.1,
    test_fraction_split: float = 0.1,
    sync: bool = True,
    tensorboard_resource_name: Optional[str] = None,
    service_account: Optional[str] = None,
):
    aiplatform.init(project=project, location=location, staging_bucket=staging_bucket)

    job = aiplatform.CustomTrainingJob(
        display_name=display_name,
        script_path=script_path,
        container_uri=container_uri,
        model_serving_container_image_uri=model_serving_container_image_uri,
    )

    # This example uses an ImageDataset, but you can use another type
    dataset = aiplatform.ImageDataset(dataset_id) if dataset_id else None

    model = job.run(
        dataset=dataset,
        model_display_name=model_display_name,
        args=args,
        replica_count=replica_count,
        machine_type=machine_type,
        accelerator_type=accelerator_type,
        accelerator_count=accelerator_count,
        training_fraction_split=training_fraction_split,
        validation_fraction_split=validation_fraction_split,
        test_fraction_split=test_fraction_split,
        sync=sync,
        tensorboard=tensorboard_resource_name,
        service_account=service_account,
    )

    model.wait()

    print(model.display_name)
    print(model.resource_name)
    print(model.uri)
    return model

  • project: il tuo ID progetto. Puoi trovare questi ID nella pagina di benvenuto della console Google Cloud.
  • location: la posizione in cui eseguire il job personalizzato. Deve essere la stessa posizione dell'istanza TensorBoard fornita.
  • staging_bucket: il bucket Cloud Storage per eseguire lo staging degli elementi durante le chiamate API, inclusi i log di TensorBoard.
  • display_name: nome visualizzato del job di addestramento personalizzato.
  • script_path: il percorso relativo alla directory di lavoro nel file system locale e in cui si trova lo script che funge da punto di ingresso per il codice di addestramento.
  • container_uri: l'URI dell'immagine del contenitore di addestramento può essere Vertex AI. un container di addestramento predefinito o un container personalizzato.
  • model_serving_container_image_uri: l'URI del contenitore di gestione del modello adatto alla gestione del modello prodotto dallo script di addestramento.
  • dataset_id: il numero ID del set di dati da utilizzare per l'addestramento.
  • model_display_name: nome visualizzato del modello addestrato.
  • args: argomenti della riga di comando da passare allo script Python.
  • replica_count: il numero di repliche dei worker da usare. Nella maggior parte dei casi, imposta questo valore su 1 per il primo pool di worker.
  • machine_type: il tipo di VM da utilizzare. Per un elenco delle VM supportate, consulta Tipi di macchine.
  • accelerator_type: il tipo di GPU da collegare a ogni VM nel pool di risorse. Per un elenco delle GPU supportate, consulta GPU.
  • accelerator_count Il numero di GPU da collegare a ogni VM nel pool di risorse. Il valore predefinito è 1.
  • training_fraction_split: la frazione del set di dati da utilizzare per addestrare il modello.
  • validation_fraction_split: la frazione del set di dati da utilizzare per convalidare il modello.
  • test_fraction_split: la frazione del set di dati da utilizzare per valutare il modello.
  • sync: indica se eseguire questo metodo in modo sincrono.
  • tensorboard_resource_name: il nome della risorsa dell'istanza Vertex TensorBoard a cui CustomJob caricherà i log di TensorBoard.
  • service_account: obbligatorio quando viene eseguito con TensorBoard. Consulta Creare un account di servizio con le autorizzazioni richieste.

REST

Prima di utilizzare i dati della richiesta, apporta le seguenti sostituzioni:

  • LOCATION_ID: la posizione in cui eseguire CustomJob, ad esempio us-central1. Deve essere la stessa posizione dell'istanza TensorBoard fornita.
  • PROJECT_ID: il tuo ID progetto.
  • TENSORBOARD_INSTANCE_NAME: (obbligatorio) Il nome completo dell'istanza Vertex AI TensorBoard esistente che memorizza i log di Vertex AI TensorBoard:
    projects/PROJECT_ID/locations/LOCATION_ID/tensorboards/TENSORBOARD_INSTANCE_ID
    Nota: se l'istanza TensorBoard non esiste, la creazione di customJobs genera un codice 404.
  • GCS_BUCKET_NAME: "${PROJECT_ID}-tensorboard-logs-${LOCATION}"
  • USER_SA_EMAIL: (obbligatorio) l'account di servizio creato nei passaggi precedenti o il tuo account di servizio. "USER_SA_NAME@${PROJECT_ID}.iam.gserviceaccount.com"
  • TRAINING_CONTAINER: TRAINING_CONTAINER.
  • INVOCATION_TIMESTAMP: "$(date +'%Y%m%d-%H%M%S')"
  • JOB_NAME: "tensorboard-example-job-${INVOCATION_TIMESTAMP}"
  • BASE_OUTPUT_DIR: (obbligatorio) il percorso Google Cloud in cui viene scritto tutto l'output dell'addestramento. "gs://$GCS_BUCKET_NAME/$JOB_NAME"

Metodo HTTP e URL:

POST https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/customJobs

Corpo JSON della richiesta:

{
"displayName": JOB_NAME,
"jobSpec":{
"workerPoolSpecs":[
  {
    "replicaCount": "1",
     "machineSpec": {
        "machineType": "n1-standard-8",
      },
      "containerSpec": {
        "imageUri": TRAINING_CONTAINER,
      }
    }
  ],
  
  "base_output_directory": {
  "output_uri_prefix": BASE_OUTPUT_DIR,
   },
  "serviceAccount": USER_SA_EMAIL,
  "tensorboard": TENSORBOARD_INSTANCE_NAME,
  }
}

Per inviare la richiesta, espandi una di queste opzioni:

Dovresti ricevere una risposta JSON simile alla seguente:

{
  "name": "projects/PROJECT_ID/locations/LOCATION_ID/customJobs/CUSTOM_JOB_ID",
  "displayName": "DISPLAY_NAME",
  "jobSpec": {
    "workerPoolSpecs": [
      {
        "machineSpec": {
          "machineType": "n1-standard-8"
        },
        "replicaCount": "1",
        "diskSpec": {
          "bootDiskType": "pd-ssd",
          "bootDiskSizeGb": 100
        },
        "containerSpec": {
          "imageUri": "IMAGE_URI"
        }
      }
    ],
    "serviceAccount": "SERVICE_ACCOUNT",
    "baseOutputDirectory": {
      "outputUriPrefix": "OUTPUT_URI_PREFIX"
    },
    "tensorboard": "projects//locations/LOCATION_ID/tensorboards/tensorboard-id"
  },
  "state": "JOB_STATE_PENDING",
  "createTime": "CREATE-TIME",
  "updateTime": "UPDATE-TIME"
}

Passaggi successivi