Configura le impostazioni dei container per l'addestramento personalizzato

Quando esegui l'addestramento personalizzato, devi specificare quale modello che vuoi eseguire con Vertex AI. A questo scopo, configura il container di addestramento per un container personalizzato o un'applicazione di addestramento Python che viene eseguita su un container.

Per determinare se utilizzare un container personalizzato o un container predefinito di addestramento, consulta Requisiti del codice di addestramento.

Questo documento descrive i campi dell'API Vertex AI che devi specificare nei casi precedenti.

Dove specificare le impostazioni del contenitore

Specifica i dettagli di configurazione all'interno di un WorkerPoolSpec. In base a come esegui l'addestramento personalizzato, inserisci questo WorkerPoolSpec in uno dei seguenti Campi API:

Se stai eseguendo distribuzioni addestramento, puoi utilizzare diversi impostazioni per ogni pool di worker.

Configura le impostazioni del contenitore

A seconda che tu stia utilizzando un container predefinito o un container personalizzato, devi specificare campi diversi all'interno di WorkerPoolSpec. Seleziona la scheda relativa al tuo scenario:

Container predefinito

  1. Seleziona un container predefinito che supporta il framework ML che prevedi di usare per l'addestramento. Specifica uno dei seguenti valori: gli URI dell'immagine container in pythonPackageSpec.executorImageUri .

  2. Specifica gli URI Cloud Storage del tuo addestramento Python dell'applicazione pythonPackageSpec.packageUris campo.

  3. Specifica il modulo del punto di ingresso dell'applicazione di addestramento pythonPackageSpec.pythonModule .

  4. Facoltativamente, specifica un elenco di argomenti della riga di comando da passare al il modulo del punto di accesso dell'applicazione di addestramento nel pythonPackageSpec.args .

I seguenti esempi evidenziano dove specifichi queste impostazioni del contenitore quando crei un CustomJob:

Console

Nella console Google Cloud, non puoi creare direttamente un CustomJob. Tuttavia, puoi creare un TrainingPipeline che crea un CustomJob. Quando crei un TrainingPipeline nella console Google Cloud, puoi specificare impostazioni del container in alcuni campi nel passaggio Container di addestramento:

  • pythonPackageSpec.executorImageUri: utilizza il framework modello e Elenchi a discesa Versione framework modello.

  • pythonPackageSpec.packageUris: utilizza il campo Località pacchetto.

  • pythonPackageSpec.pythonModule: utilizza il campo del modulo Python.

  • pythonPackageSpec.args: utilizza il campo Argomenti.

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

Per saperne di più, leggi la guida alla creazione di una CustomJob.

Container personalizzato

  1. Specifica l'URI Artifact Registry o Docker Hub del tuo container personalizzato nel containerSpec.imageUri campo.

  2. Facoltativamente, se vuoi eseguire l'override ENTRYPOINT oppure CMD istruzioni nel tuo container, specifica containerSpec.command o containerSpec.args campi. Questi campi influiscono sul modo in cui il container viene eseguito in base ai seguenti parametri: regole:

    • Se non specifichi nessuno di questi campi: il container viene eseguito in base alle sue istruzione ENTRYPOINT e istruzione CMD (se esistente). Consulta la documentazione di Docker su come CMD e ENTRYPOINT interagire.

    • Se specifichi solo containerSpec.command: il container viene eseguito con il valore di containerSpec.command sostituisce il relativo ENTRYPOINT istruzioni. Se il contenitore ha un'istruzione CMD, questa viene ignorata.

    • Se specifichi solo containerSpec.args: il container viene eseguito in base alla sua istruzione ENTRYPOINT, con il valore containerSpec.args sostituisce la relativa istruzione CMD.

    • Se specifichi entrambi i campi: il container viene eseguito con containerSpec.command sostituisce l'istruzione ENTRYPOINT e containerSpec.args sostituisce la relativa istruzione CMD.

L'esempio seguente evidenzia dove puoi specificare alcuni di questi impostazioni del contenitore quando crei un CustomJob:

Console

Nella console Google Cloud, non puoi creare direttamente un CustomJob. Tuttavia, puoi creare un TrainingPipeline che crea un CustomJob. Quando crei un TrainingPipeline nella console Google Cloud, puoi specificare impostazioni del container in alcuni campi nel passaggio Container di addestramento:

  • containerSpec.imageUri: utilizza il campo Immagine container.

  • containerSpec.command: questo campo API non è configurabile nella sezione nella console Google Cloud.

  • containerSpec.args: utilizza il campo Argomenti.

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

Prima di provare questo esempio, segui le istruzioni per la configurazione di Java nel Guida rapida di Vertex AI con librerie client. Per ulteriori informazioni, consulta API Java Vertex AI documentazione di riferimento.

Per eseguire l'autenticazione su Vertex AI, configura Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.


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_T4)
              .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

Prima di provare questo esempio, segui le istruzioni per la configurazione di Node.js nel Guida rapida di Vertex AI con librerie client. Per ulteriori informazioni, consulta API Node.js Vertex AI documentazione di riferimento.

Per eseguire l'autenticazione su Vertex AI, configura Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.

/**
 * 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

Per scoprire come installare o aggiornare l'SDK Vertex AI per Python, vedi Installare l'SDK Vertex AI per Python. Per ulteriori informazioni, consulta documentazione di riferimento dell'API Python.

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)

Per saperne di più, leggi la guida alla creazione di una CustomJob.

Passaggi successivi