Vertex AI TensorBoard mit benutzerdefiniertem Training verwenden

Wenn Sie benutzerdefiniertes Training zum Trainieren von Modellen verwenden, können Sie Ihren Trainingsjob so einrichten, dass Ihre Vertex AI TensorBoard-Logs automatisch in Vertex AI TensorBoard hochgeladen werden.

Mit dieser Integration können Sie Ihr Training nahezu in Echtzeit überwachen, da Vertex AI TensorBoard-Logs in Vertex AI TensorBoard zu dem Zeitpunkt gestreamt werden, in dem sie in Cloud Storage geschrieben werden.

Informationen zur Ersteinrichtung finden Sie unter Für Vertex AI TensorBoard einrichten.

Änderungen an Ihrem Trainingsskript

Ihr Trainingsskript muss so konfiguriert sein, dass TensorBoard-Logs in den Cloud Storage-Bucket geschrieben werden. Dies ist der Speicherort, der vom Vertex AI-Trainingsdienst automatisch über die vordefinierte Umgebungsvariable AIP_TENSORBOARD_LOG_DIR verfügbar gemacht wird.

Dazu können Sie in der Regel os.environ['AIP_TENSORBOARD_LOG_DIR'] als Logverzeichnis für die Open-Source-TensorBoard-APIs zum Schreiben von Logs bereitstellen. Der Speicherort von AIP_TENSORBOARD_LOG_DIR wird normalerweise mit der Variable staging_bucket festgelegt.

Erstellen Sie zum Konfigurieren Ihres Trainingsskripts in TensorFlow 2.x einen TensorBoard-Callback und legen Sie die log_dir Variable auf os.environ['AIP_TENSORBOARD_LOG_DIR'] fest. Der TensorBoard-Callback ist dann in der TensorFlow model.fit Callback-Liste enthalten.

  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],
  )
  

Weitere Informationen darüber, wie Vertex AI Umgebungsvariablen in Ihrer benutzerdefinierten Trainingsumgebung festlegt, erhalten Sie in diesem Artikel.

Benutzerdefinierten Trainingsjob erstellen

Das folgende Beispiel zeigt, wie Sie einen eigenen benutzerdefinierten Trainingsjob erstellen.

Ein ausführliches Beispiel für das Erstellen eines benutzerdefinierten Trainingsjobs finden Sie unter Benutzerdefiniertes Hello-Training. Die Schritte zum Erstellen benutzerdefinierter Trainingscontainer werden unter Benutzerdefiniertes Container-Image für das Training erstellen erläutert.

Verwenden Sie zum Erstellen eines benutzerdefinierten Trainingsjobs entweder das Vertex AI SDK für Python oder 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: Ihre Projekt-ID. Sie finden die Projekt-IDs auf der Begrüßungsseite der Google Cloud Console.
  • location: Der Speicherort, in dem der CustomJob ausgeführt wird. Dies sollte derselbe Ort sein wie für die bereitgestellte TensorBoard-Instanz.
  • staging_bucket: Der Cloud Storage-Bucket für das Staging von Artefakten während API-Aufrufen, einschließlich TensorBoard-Logs.
  • display_name: Anzeigename des benutzerdefinierten Trainingsjobs.
  • script_path: Der Pfad relativ zum Arbeitsverzeichnis im lokalen Dateisystem zum Skript, das der Einstiegspunkt für Ihren Trainingscode ist.
  • container_uri: Der URI des Trainingscontainer-Images kann ein vordefinierter Trainingscontainer von Vertex AI oder ein benutzerdefinierter Container sein.
  • model_serving_container_image_uri: Der URI des Modellbereitstellungscontainers, der für die Bereitstellung des vom Trainingsskript erstellten Modells geeignet ist.
  • dataset_id: Die ID-Nummer für das Dataset, das für das Training verwendet werden soll.
  • model_display_name: Anzeigename des trainierten Modells.
  • args: Befehlszeilenargumente, die an das Python-Skript übergeben werden sollen.
  • replica_count: Die Anzahl der zu verwendenden Worker-Replikate. In den meisten Fällen ist dies auf 1 für den ersten Worker-Pool festgelegt.
  • machine_type: Der zu verwendende VM-Typ. Eine Liste der unterstützten VMs finden Sie unter Maschinentypen.
  • accelerator_type: Der GPU-Typ, der an die einzelnen VMs im Ressourcenpool angehängt werden soll. Eine Liste der unterstützten GPUs finden Sie unter GPUs.
  • accelerator_count: Die Anzahl der GPUs, die an jede VM im Ressourcenpool angehängt werden soll. Der Standardwert ist 1.
  • training_fraction_split: Der Anteil des Datasets, der zum Trainieren Ihres Modells verwendet wird.
  • validation_fraction_split: Der Anteil des Datasets, der zum Validieren des Modells verwendet wird.
  • test_fraction_split: Der Anteil des Datasets, der zum Bewerten des Modells verwendet wird.
  • sync: Gibt an, ob diese Methode synchron ausgeführt werden soll.
  • tensorboard_resource_name: Der Ressourcenname der Vertex TensorBoard-Instanz, in die CustomJob TensorBoard-Logs hochlädt.
  • service_account: Erforderlich beim Ausführen mit TensorBoard. Weitere Informationen finden Sie unter Dienstkonto mit erforderlichen Berechtigungen erstellen.

REST

Ersetzen Sie diese Werte in den folgenden Anfragedaten:

  • LOCATION_ID: Der Standort, in dem der CustomJob ausgeführt werden soll, z. B. us-central1. Dies sollte derselbe Ort sein wie für die bereitgestellte TensorBoard-Instanz.
  • PROJECT_ID: Ihre Projekt-ID.
  • TENSORBOARD_INSTANCE_NAME: (Erforderlich) Der vollständige Name der vorhandenen Vertex AI TensorBoard-Instanz, in der Ihre Vertex AI TensorBoard-Logs gespeichert werden:
    projects/PROJECT_ID/locations/LOCATION_ID/tensorboards/TENSORBOARD_INSTANCE_ID
    Hinweis: Wenn TensorBoard-Instanz keine vorhandene Instanz ist, wird bei der Erstellung von customJobs ein 404-Fehler ausgegeben.
  • GCS_BUCKET_NAME: "${PROJECT_ID}-tensorboard-logs-${LOCATION}"
  • USER_SA_EMAIL: (Erforderlich) Das Dienstkonto, das in den vorherigen Schritten erstellt wurde, oder Ihr eigenes Dienstkonto. "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: (Erforderlich) Der Google Cloud-Pfad, in den die gesamte Ausgabe des Trainings geschrieben wird. "gs://$GCS_BUCKET_NAME/$JOB_NAME"

HTTP-Methode und URL:

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

JSON-Text anfordern:

{
"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,
  }
}

Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:

Sie sollten eine JSON-Antwort ähnlich wie diese erhalten:

{
  "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"
}

Nächste Schritte