Configure as definições do contentor para a preparação personalizada

Quando realiza uma preparação personalizada, tem de especificar o código de aprendizagem automática (ML) que quer que o Vertex AI execute. Para o fazer, configure as definições do contentor de preparação para um contentor personalizado ou uma aplicação de preparação Python executada num contentor pré-criado.

Para determinar se quer usar um contentor personalizado ou um contentor pré-criado, leia os requisitos do código de preparação.

Este documento descreve os campos da API Vertex AI que tem de especificar em qualquer um dos casos anteriores.

Onde especificar as definições do contentor

Especifique os detalhes da configuração num elemento WorkerPoolSpec. Consoante a forma como realiza a preparação personalizada, coloque este WorkerPoolSpec num dos seguintes campos da API:

Se estiver a realizar treino distribuído, pode usar diferentes definições para cada conjunto de trabalhadores.

Configure as definições do contentor

Consoante esteja a usar um contentor pré-criado ou um contentor personalizado, tem de especificar campos diferentes no elemento WorkerPoolSpec. Selecione o separador do seu cenário:

Contentor pré-criado

  1. Selecione um contentor pré-criado que suporte a framework de ML que planeia usar para a preparação. Especifique um dos URIs da imagem do contentor no campo pythonPackageSpec.executorImageUri.

  2. Especifique os URIs do Cloud Storage da sua aplicação de formação em Python no campo pythonPackageSpec.packageUris.

  3. Especifique o módulo do ponto de entrada da sua aplicação de preparação no campo pythonPackageSpec.pythonModule.

  4. Opcionalmente, especifique uma lista de argumentos da linha de comandos a transmitir ao módulo do ponto de entrada da aplicação de preparação no campo pythonPackageSpec.args.

Os exemplos seguintes realçam onde especifica estas definições do contentor quando cria um CustomJob:

Consola

Na Google Cloud consola, não pode criar um CustomJob diretamente. No entanto, pode criar um TrainingPipeline que crie um CustomJob. Quando cria um TrainingPipeline na Google Cloud consola, pode especificar definições de contentores pré-criadas em determinados campos no passo Contentor de preparação:

  • pythonPackageSpec.executorImageUri: use as listas pendentes Estrutura do modelo e Versão da estrutura do modelo.

  • pythonPackageSpec.packageUris: use o campo Localização da embalagem.

  • pythonPackageSpec.pythonModule: use o campo Módulo Python.

  • pythonPackageSpec.args: use o campo Arguments.

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

Para mais contexto, leia o guia de criação de um CustomJob.

Contentor personalizado

  1. Especifique o URI do Artifact Registry ou do Docker Hub do seu contentor personalizado no campo containerSpec.imageUri.

  2. Opcionalmente, se quiser substituir as instruções de ENTRYPOINT ou CMD no seu contentor, especifique os campos containerSpec.command ou containerSpec.args. Estes campos afetam a forma como o seu contentor é executado de acordo com as seguintes regras:

    • Se não especificar nenhum dos campos: o seu contentor é executado de acordo com a respetiva instrução ENTRYPOINT e instrução CMD (se existir). Consulte a documentação do Docker sobre como o CMD e o ENTRYPOINT interagem.

    • Se especificar apenas containerSpec.command: o contentor é executado com o valor de containerSpec.command a substituir a respetiva instrução ENTRYPOINT. Se o contentor tiver uma instrução CMD, esta é ignorada.

    • Se especificar apenas containerSpec.args: o contentor é executado de acordo com a respetiva instrução ENTRYPOINT, com o valor de containerSpec.args a substituir a respetiva instrução CMD.

    • Se especificar ambos os campos: o seu contentor é executado com containerSpec.command a substituir a respetiva instrução ENTRYPOINT e containerSpec.args a substituir a respetiva instrução CMD.

O exemplo seguinte realça onde pode especificar algumas destas definições do contentor quando cria um CustomJob:

Consola

Na Google Cloud consola, não pode criar um CustomJob diretamente. No entanto, pode criar um TrainingPipeline que crie um CustomJob. Quando cria um TrainingPipeline na Google Cloud consola, pode especificar definições do contentor personalizadas em determinados campos no passo Contentor de treino:

  • containerSpec.imageUri: use o campo Imagem do contentor.

  • containerSpec.command: este campo da API não é configurável na Google Cloud consola.

  • containerSpec.args: use o campo Arguments.

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

Antes de experimentar este exemplo, siga as Javainstruções de configuração no início rápido do Vertex AI com bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Java Vertex AI.

Para se autenticar no Vertex AI, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.


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

Antes de experimentar este exemplo, siga as Node.jsinstruções de configuração no início rápido do Vertex AI com bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Node.js Vertex AI.

Para se autenticar no Vertex AI, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.

/**
 * 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_T4',
            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

Para saber como instalar ou atualizar o SDK Vertex AI para Python, consulte o artigo Instale o SDK Vertex AI para Python. Para mais informações, consulte a Python documentação de referência da 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)

Para mais contexto, leia o guia de criação de um CustomJob.

O que se segue?