Utilizzo di Vertex AI TensorBoard con addestramento personalizzato

Quando utilizzi l'addestramento personalizzato per addestrare i modelli, puoi configurare il tuo job di addestramento per caricare automaticamente Vertex AI TensorBoard a Vertex AI TensorBoard.

Puoi utilizzare questa integrazione per monitorare l'addestramento quasi in tempo reale Vertex AI TensorBoard trasmette i flussi di dati in Vertex AI TensorBoard così come vengono scritti in Cloud Storage.

Per la configurazione iniziale, vedi Configura Vertex AI TensorBoard.

Modifiche allo script di addestramento

Lo script di addestramento deve essere configurato per scrivere i log di TensorBoard nell'interfaccia Bucket Cloud Storage, la località in cui viene eseguito il Vertex AI Training Il servizio sarà automaticamente disponibile tramite un ambiente predefinito la variabile AIP_TENSORBOARD_LOG_DIR.

In genere questa operazione può essere eseguita fornendo os.environ['AIP_TENSORBOARD_LOG_DIR'] come directory di log per le API open source di scrittura di log di TensorBoard. La posizione di AIP_TENSORBOARD_LOG_DIR viene generalmente impostato con staging_bucket .

Per configurare lo script di addestramento in TensorFlow 2.x, crea una TensorBoard e imposta la variabile log_dir su os.environ['AIP_TENSORBOARD_LOG_DIR'] Il callback di TensorBoard viene quindi incluso nei callback model.fit di TensorFlow dall'elenco di lettura.

  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.

Crea 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 Ciao addestramento personalizzato. Per conoscere i passaggi per per creare container di addestramento personalizzati, Crea 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 console Google Cloud pagina di benvenuto.
  • location: la posizione in cui eseguire il job personalizzato. Questa dovrebbe essere la stessa posizione dell'istanza TensorBoard fornita.
  • staging_bucket: il bucket Cloud Storage per posizionare gli artefatti 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 del file system locale, allo script che è il punto di ingresso per il codice di addestramento.
  • container_uri: l'URI dell'immagine del container di addestramento può essere Vertex AI. di addestramento predefinito o un container personalizzato.
  • model_serving_container_image_uri: l'URI del container di gestione del modello adatto a fornire il 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 utilizzare. Nella maggior parte dei casi, imposta questo valore su 1 per primo pool di worker.
  • machine_type: tipo di VM da utilizzare. Per un elenco di le 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 ciascun a una 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 il metodo in modo sincrono.
  • tensorboard_resource_name: il nome della risorsa dell'istanza Vertex TensorBoard in cui CustomJob caricherà i log di TensorBoard.
  • service_account: richiesta quando viene eseguita con TensorBoard. Consulta Crea un account di servizio con le autorizzazioni richieste.

REST

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

  • LOCATION_ID: la posizione in cui eseguire l'operazione CustomJob, ad esempio us-central1. Questa dovrebbe 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 in cui vengono archiviati i log di Vertex AI TensorBoard:
    projects/PROJECT_ID/locations/LOCATION_ID/tensorboards/TENSORBOARD_INSTANCE_ID
    Nota: se l'istanza TensorBoard non è esistente, il parametro customJobs genera un errore 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 di Google Cloud in cui vengono inseriti tutti gli output l'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 delle seguenti 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