Containereinstellungen für benutzerdefiniertes Training konfigurieren

Wenn Sie ein benutzerdefiniertes Training durchführen, müssen Sie angeben, welcher Code für maschinelles Lernen (ML) von Vertex AI ausgeführt werden soll. Konfigurieren Sie dazu die Einstellungen für den Trainingscontainer für einen benutzerdefinierten Container oder eine Python-Trainingsanwendung, die in einem vordefinierten Container ausgeführt wird.

Um zu bestimmen, ob Sie einen benutzerdefinierten Container oder einen vordefinierten Container verwenden möchten, finden Sie unter Anforderungen für den Trainingscode.

In diesem Dokument werden die Felder der Vertex AI API beschrieben, die Sie in beiden der oben genannten Fälle angeben müssen.

Wo Containereinstellungen angeben

Geben Sie die Konfigurationsdetails in einem WorkerPoolSpec an. Je nachdem, wie Sie das benutzerdefinierte Training durchführen, platzieren Sie diese WorkerPoolSpec in einem der folgenden API-Felder:

Wenn Sie ein verteiltes Training machen, können Sie für jeden Worker-Pool unterschiedliche Einstellungen verwenden.

Konfigurieren Sie die Werte für Containereinstellungen.

Je nachdem, ob Sie einen vordefinierten Container oder einen benutzerdefinierten Container verwenden, müssen Sie im WorkerPoolSpec verschiedene Felder angeben. Wählen Sie den Tab für Ihr Szenario aus:

Vordefinierter Container

  1. Wählen Sie einen vordefinierten Container aus, der das ML-Framework unterstützt, das Sie für das Training verwenden möchten. Geben Sie einen der URIs des Container-Images im Feld pythonPackageSpec.executorImageUri an.

  2. Geben Sie die Cloud Storage-URIs Ihrer Python-Trainingsanwendung im Feld pythonPackageSpec.packageUris an.

  3. Geben Sie das Einstiegspunktmodul der Trainingsanwendung im Feld pythonPackageSpec.pythonModule an.

  4. Optional können Sie im Feld pythonPackageSpec.args eine Liste von Befehlszeilenargumenten angeben, die an das Einstiegspunktmodul der Trainingsanwendung übergeben werden.

In den folgenden Beispielen wird hervorgehoben, wo Sie diese Containereinstellungen beim Erstellen eines CustomJob angeben:

Console

In der Google Cloud Console können Sie einen CustomJob nicht direkt erstellen. Sie können jedoch eine TrainingPipeline erstellen, die einen CustomJob erstellt. Wenn Sie eine TrainingPipeline in der Google Cloud Console erstellen, können Sie in bestimmten Feldern im Schritt Trainingscontainer vordefinierte Containereinstellungen festlegen:

  • pythonPackageSpec.executorImageUri: Verwenden Sie die Drop-down-Listen Modell-Framework und Modell-Framework-Version.

  • pythonPackageSpec.packageUris: Verwenden Sie das Feld Paketstandort.

  • pythonPackageSpec.pythonModule: Verwenden Sie das Feld Python-Modul.

  • pythonPackageSpec.args: Verwenden Sie das Feld Argumente.

gcloud

gcloud ai custom-jobs create \
  --region=LOCATION \
  --display-name=JOB_NAME \
  --python-package-uris=PYTHON_PACKAGE_URIS \
  --worker-pool-spec=machine-type=MACHINE_TYPE,replica-count=REPLICA_COUNT,executor-image-uri=PYTHON_PACKAGE_EXECUTOR_IMAGE_URI,python-module=PYTHON_MODULE

Weitere Informationen finden Sie im Leitfaden zum Erstellen von CustomJob.

Benutzerdefinierter Container

  1. Geben Sie den Artifact Registry- oder Docker Hub-URI Ihres benutzerdefinierten Containers im Feld containerSpec.imageUri an.

  2. Wenn Sie die Anleitung ENTRYPOINT oder CMD in Ihrem Container überschreiben möchten, geben Sie die Felder containerSpec.command oder containerSpec.args an. Diese Felder wirken sich nach den folgenden Regeln auf die Ausführung Ihres Containers aus:

    • Wenn Sie kein Feld angeben: Der Container wird gemäß der Anweisung ENTRYPOINT und der Anweisung CMD (falls vorhanden) ausgeführt. Weitere Informationen finden Sie unterDocker-Dokumentation zur Interaktion von CMD undENTRYPOINT.

    • Wenn Sie nur containerSpec.command angeben: Der Container wird ausgeführt, wobei der Wert von containerSpec.command die ENTRYPOINT-Anweisung ersetzt. Wenn der Container eine CMD-Anweisung hat, wird sie ignoriert.

    • Wenn Sie nur containerSpec.args angeben: Der Container wird gemäß seiner ENTRYPOINT-Anweisung ausgeführt, wobei der Wert für containerSpec.args die CMD-Anweisung ersetzt.

    • Wenn Sie beide Felder angeben: Der Container wird mit containerSpec.command ausgeführt, wobei die ENTRYPOINT-Anweisung ersetzt und containerSpec.args durch die Anweisung CMD ersetzt wird.

Im folgenden Beispiel wird gezeigt, wo Sie einige dieser Containereinstellungen bei der Erstellung eines CustomJob angeben können:

Console

In der Google Cloud Console können Sie einen CustomJob nicht direkt erstellen. Sie können jedoch eine TrainingPipeline erstellen, die einen CustomJob erstellt. Wenn Sie eine TrainingPipeline in der Google Cloud Console erstellen, können Sie im Schritt Trainingscontainer in bestimmten Feldern benutzerdefinierte Containereinstellungen festlegen:

  • containerSpec.imageUri: Verwenden Sie das Feld Container-Image.

  • containerSpec.command: Dieses API-Feld kann in der Google Cloud Console nicht konfiguriert werden.

  • containerSpec.args: Verwenden Sie das Feld Argumente.

gcloud

gcloud ai custom-jobs create \
  --region=LOCATION \
  --display-name=JOB_NAME \
  --worker-pool-spec=machine-type=MACHINE_TYPE,replica-count=REPLICA_COUNT,container-image-uri=CUSTOM_CONTAINER_IMAGE_URI

Java

Bevor Sie dieses Beispiel anwenden, folgen Sie den Java Schritten zur Einrichtung in der Vertex AI-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur Vertex AI Java API.

Richten Sie zur Authentifizierung bei Vertex AI Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.


import com.google.cloud.aiplatform.v1.AcceleratorType;
import com.google.cloud.aiplatform.v1.ContainerSpec;
import com.google.cloud.aiplatform.v1.CustomJob;
import com.google.cloud.aiplatform.v1.CustomJobSpec;
import com.google.cloud.aiplatform.v1.JobServiceClient;
import com.google.cloud.aiplatform.v1.JobServiceSettings;
import com.google.cloud.aiplatform.v1.LocationName;
import com.google.cloud.aiplatform.v1.MachineSpec;
import com.google.cloud.aiplatform.v1.WorkerPoolSpec;
import java.io.IOException;

// Create a custom job to run machine learning training code in Vertex AI
public class CreateCustomJobSample {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    String project = "PROJECT";
    String displayName = "DISPLAY_NAME";

    // Vertex AI runs your training application in a Docker container image. A Docker container
    // image is a self-contained software package that includes code and all dependencies. Learn
    // more about preparing your training application at
    // https://cloud.google.com/vertex-ai/docs/training/overview#prepare_your_training_application
    String containerImageUri = "CONTAINER_IMAGE_URI";
    createCustomJobSample(project, displayName, containerImageUri);
  }

  static void createCustomJobSample(String project, String displayName, String containerImageUri)
      throws IOException {
    JobServiceSettings settings =
        JobServiceSettings.newBuilder()
            .setEndpoint("us-central1-aiplatform.googleapis.com:443")
            .build();
    String location = "us-central1";

    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests.
    try (JobServiceClient client = JobServiceClient.create(settings)) {
      MachineSpec machineSpec =
          MachineSpec.newBuilder()
              .setMachineType("n1-standard-4")
              .setAcceleratorType(AcceleratorType.NVIDIA_TESLA_K80)
              .setAcceleratorCount(1)
              .build();

      ContainerSpec containerSpec =
          ContainerSpec.newBuilder().setImageUri(containerImageUri).build();

      WorkerPoolSpec workerPoolSpec =
          WorkerPoolSpec.newBuilder()
              .setMachineSpec(machineSpec)
              .setReplicaCount(1)
              .setContainerSpec(containerSpec)
              .build();

      CustomJobSpec customJobSpecJobSpec =
          CustomJobSpec.newBuilder().addWorkerPoolSpecs(workerPoolSpec).build();

      CustomJob customJob =
          CustomJob.newBuilder()
              .setDisplayName(displayName)
              .setJobSpec(customJobSpecJobSpec)
              .build();
      LocationName parent = LocationName.of(project, location);
      CustomJob response = client.createCustomJob(parent, customJob);
      System.out.format("response: %s\n", response);
      System.out.format("Name: %s\n", response.getName());
    }
  }
}

Node.js

Bevor Sie dieses Beispiel anwenden, folgen Sie den Node.js-Einrichtungsschritten in der Vertex AI-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur Vertex AI Node.js API.

Richten Sie zur Authentifizierung bei Vertex AI Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

/**
 * TODO(developer): Uncomment these variables before running the sample.\
 * (Not necessary if passing values as arguments)
 */

// const customJobDisplayName = 'YOUR_CUSTOM_JOB_DISPLAY_NAME';
// const containerImageUri = 'YOUR_CONTAINER_IMAGE_URI';
// const project = 'YOUR_PROJECT_ID';
// const location = 'YOUR_PROJECT_LOCATION';

// Imports the Google Cloud Job Service Client library
const {JobServiceClient} = require('@google-cloud/aiplatform');

// Specifies the location of the api endpoint
const clientOptions = {
  apiEndpoint: 'us-central1-aiplatform.googleapis.com',
};

// Instantiates a client
const jobServiceClient = new JobServiceClient(clientOptions);

async function createCustomJob() {
  // Configure the parent resource
  const parent = `projects/${project}/locations/${location}`;
  const customJob = {
    displayName: customJobDisplayName,
    jobSpec: {
      workerPoolSpecs: [
        {
          machineSpec: {
            machineType: 'n1-standard-4',
            acceleratorType: 'NVIDIA_TESLA_K80',
            acceleratorCount: 1,
          },
          replicaCount: 1,
          containerSpec: {
            imageUri: containerImageUri,
            command: [],
            args: [],
          },
        },
      ],
    },
  };
  const request = {parent, customJob};

  // Create custom job request
  const [response] = await jobServiceClient.createCustomJob(request);

  console.log('Create custom job response:\n', JSON.stringify(response));
}
createCustomJob();

Python

Informationen zum Installieren oder Aktualisieren von Python finden Sie unter Vertex AI SDK für Python installieren. Weitere Informationen finden Sie in der Referenzdokumentation zur Python API.

from google.cloud import aiplatform

def create_custom_job_sample(
    project: str,
    display_name: str,
    container_image_uri: str,
    location: str = "us-central1",
    api_endpoint: str = "us-central1-aiplatform.googleapis.com",
):
    # The AI Platform services require regional API endpoints.
    client_options = {"api_endpoint": api_endpoint}
    # Initialize client that will be used to create and send requests.
    # This client only needs to be created once, and can be reused for multiple requests.
    client = aiplatform.gapic.JobServiceClient(client_options=client_options)
    custom_job = {
        "display_name": display_name,
        "job_spec": {
            "worker_pool_specs": [
                {
                    "machine_spec": {
                        "machine_type": "n1-standard-4",
                        "accelerator_type": aiplatform.gapic.AcceleratorType.NVIDIA_TESLA_K80,
                        "accelerator_count": 1,
                    },
                    "replica_count": 1,
                    "container_spec": {
                        "image_uri": container_image_uri,
                        "command": [],
                        "args": [],
                    },
                }
            ]
        },
    }
    parent = f"projects/{project}/locations/{location}"
    response = client.create_custom_job(parent=parent, custom_job=custom_job)
    print("response:", response)

Weitere Informationen finden Sie im Leitfaden zum Erstellen von CustomJob.

Nächste Schritte

  • Weitere Informationen zum Ausführen eines benutzerdefinierten Trainings erhalten Sie unter CustomJob erstellen.