Establece la configuraci�n de los contenedores para el entrenamiento personalizado

Cuando realizas un entrenamiento personalizado, debes especificar qu� c�digo de aprendizaje autom�tico (AA) deseas que Vertex AI ejecute. Para ello, establece la configuraci�n de los contenedores de entrenamiento para un contenedor personalizado o una aplicaci�n de entrenamiento de Python que se ejecuta en un contenedor compilado previamente.

Para determinar si deseas usar un contenedor personalizado o uno ya compilado, lee Requisitos del c�digo de entrenamiento.

En este documento, se describen los campos de la API de Vertex AI que debes especificar en cualquiera de los casos anteriores.

D�nde especificar la configuraci�n del contenedor

Especifica los detalles de configuraci�n dentro de un WorkerPoolSpec. Seg�n c�mo realices el entrenamiento personalizado, coloca este WorkerPoolSpec en uno de los siguientes campos de la API:

Si realizas un entrenamiento distribuido, puedes usar opciones de configuraci�n diferentes para cada grupo de trabajadores.

Configura el Contenedor de la siguiente forma:

Seg�n si usas un contenedor previamente compilado o un contenedor personalizado, debes especificar campos diferentes dentro de WorkerPoolSpec. Selecciona la pesta�a de tu situaci�n:

Contenedor previamente compilado

  1. Selecciona un contenedor compilado previamente que admita el framework del AA que planeas usar para el entrenamiento. Especifica uno de los URI de la imagen de contenedor en el campo pythonPackageSpec.executorImageUri.

  2. Especifica los URI de Cloud�Storage de tu aplicaci�n de entrenamiento de Python en el campo pythonPackageSpec.packageUris.

  3. Especifica el m�dulo de punto de entrada de la aplicaci�n de entrenamiento en el campo pythonPackageSpec.pythonModule.

  4. De manera opcional, especifica una lista de argumentos de la l�nea de comandos para pasar al m�dulo de punto de entrada de tu aplicaci�n de entrenamiento en el campo pythonPackageSpec.args.

En los ejemplos siguientes, se destaca d�nde especificar�s estas opciones de configuraci�n del contenedor cuando creas un CustomJob:

Consola

En la consola de Google Cloud, no puedes crear un CustomJob directamente. Sin embargo, puedes crear un TrainingPipeline que cree un CustomJob. Cuando creas un TrainingPipeline en la consola de Google Cloud, puedes especificar una configuraci�n de contenedor compilado previamente en ciertos campos del paso Contenedor de entrenamiento:

  • pythonPackageSpec.executorImageUri: usa las listas desplegables Model Framework y Model Framework version.

  • pythonPackageSpec.packageUris: usa el campo Package location.

  • pythonPackageSpec.pythonModule: usa el campo Python module.

  • pythonPackageSpec.args: Usa el campo Argumentos.

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 obtener m�s informaci�n, lee la gu�a para crear un CustomJob.

Contenedor personalizado

  1. Especifica el URI de Artifact Registry o Docker Hub de tu contenedor personalizado en el campo containerSpec.imageUri.

  2. De forma opcional, si deseas anular las instrucciones ENTRYPOINT o CMD en tu contenedor, especifica los campos containerSpec.command o containerSpec.args. Estos campos afectan c�mo se ejecuta el contenedor de acuerdo con las siguientes reglas:

    • Si no especificas ning�n campo: el contenedor se ejecuta seg�n su instrucci�n ENTRYPOINT y la instrucci�n CMD (si existe). Consulta la documentaci�n de Docker sobre c�mo interact�an CMD y ENTRYPOINT.

    • Si especificas solo containerSpec.command: el contenedor se ejecutar� con el valor de containerSpec.command, y se reemplazar� la instrucci�n ENTRYPOINT. Si el contenedor tiene una instrucci�n CMD, se ignora.

    • Si especificas solo containerSpec.args: tu contenedor se ejecuta seg�n su instrucci�n ENTRYPOINT y el valor de containerSpec.args reemplaza a su instrucci�n CMD.

    • Si especificas ambos campos: Tu contenedor se ejecuta con containerSpec.command y reemplaza su instrucci�n ENTRYPOINT y containerSpec.args con el reemplazo de la instrucci�n CMD.

En el siguiente ejemplo, se destaca d�nde puedes especificar algunas de estas configuraciones de contenedor cuando creas un CustomJob:

Consola

En la consola de Google Cloud, no puedes crear un CustomJob directamente. Sin embargo, puedes crear un TrainingPipeline que cree un CustomJob. Cuando creas un TrainingPipeline en la consola de Google�Cloud, puedes especificar una configuraci�n de contenedor personalizado en ciertos campos del paso Contenedor de entrenamiento:

  • containerSpec.imageUri: usa el campo Container image.

  • containerSpec.command: este campo de API no se puede configurar en la consola de Google�Cloud.

  • containerSpec.args: Usa el campo Argumentos.

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 probar este ejemplo, sigue las instrucciones de configuraci�n para Java incluidas en la gu�a de inicio r�pido de Vertex AI sobre c�mo usar bibliotecas cliente. Para obtener m�s informaci�n, consulta la documentaci�n de referencia de la API de Vertex AI Java.

Para autenticarte en Vertex AI, configura las credenciales predeterminadas de la aplicaci�n. Si deseas obtener m�s informaci�n, consulta Configura la autenticaci�n para un entorno de desarrollo 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_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

Antes de probar este ejemplo, sigue las instrucciones de configuraci�n para Node.js incluidas en la gu�a de inicio r�pido de Vertex AI sobre c�mo usar bibliotecas cliente. Para obtener m�s informaci�n, consulta la documentaci�n de referencia de la API de Vertex AI Node.js.

Para autenticarte en Vertex AI, configura las credenciales predeterminadas de la aplicaci�n. Si deseas obtener m�s informaci�n, consulta Configura la autenticaci�n para un entorno de desarrollo 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_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

Si deseas obtener informaci�n para instalar o actualizar el SDK de Vertex AI para Python, consulta Instala el SDK de Vertex AI para Python. Si deseas obtener m�s informaci�n, consulta la documentaci�n de referencia de la API de 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)

Para obtener m�s informaci�n, lee la gu�a para crear un CustomJob.

�Qu� sigue?