Configura le impostazioni dei container per l'addestramento personalizzato

Quando esegui l'addestramento personalizzato, devi specificare il codice di machine learning (ML) che vuoi eseguire con Vertex AI. A tale scopo, configura le impostazioni del container di addestramento per un container personalizzato o per un'applicazione di addestramento Python eseguita su un container predefinito.

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

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

Dove specificare le impostazioni del contenitore

Specifica i dettagli di configurazione in una WorkerPoolSpec. A seconda di come esegui l'addestramento personalizzato, inserisci questo WorkerPoolSpec in uno dei seguenti campi API:

Se stai eseguendo addestramento distribuito, puoi utilizzare impostazioni diverse per ogni pool di worker.

Configura le impostazioni dei contenitori

Devi specificare diversi campi all'interno dell'WorkerPoolSpec, a seconda che utilizzi un contenitore predefinito o personalizzato. Seleziona la scheda relativa al tuo scenario:

Contenitore predefinito

  1. Seleziona un container predefinito che supporti il framework ML che prevedi di utilizzare per l'addestramento. Specifica uno degli URI dell'immagine container nel campo pythonPackageSpec.executorImageUri.

  2. Specifica gli URI Cloud Storage della tua applicazione di addestramento Python nel campo pythonPackageSpec.packageUris.

  3. Specifica il modulo del punto di contatto della tua applicazione di addestramento nel campo pythonPackageSpec.pythonModule.

  4. Se vuoi, specifica un elenco di argomenti della riga di comando da trasmettere al modulo del punto di ingresso dell'applicazione di addestramento nel campo pythonPackageSpec.args.

I seguenti esempi mettono in evidenza dove specifichi queste impostazioni del contenitore quando crei un CustomJob:

Console

In Google Cloud Console non puoi creare direttamente un CustomJob. Tuttavia, puoi creare un TrainingPipeline che crei una CustomJob. Quando crei un elemento TrainingPipeline in Cloud Console, puoi specificare impostazioni predefinite per i container in determinati campi del passaggio Contenitore addestramento:

  • pythonPackageSpec.executorImageUri: utilizza gli elenchi a discesa Framework modello e Versione framework modello.

  • pythonPackageSpec.packageUris: utilizza il campo Posizione pacchetto.

  • pythonPackageSpec.pythonModule: utilizza il campo 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ù, consulta la guida alla creazione di un elemento CustomJob.

Contenitore personalizzato

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

  2. (Facoltativo) Se vuoi eseguire l'override delle istruzioni ENTRYPOINT o CMD nel tuo contenitore, specifica i campi containerSpec.command ocontainerSpec.args. Questi campi influiscono sulla modalità di esecuzione del tuo container in base alle seguenti regole:

    • Se non specifichi nessuno dei due campi: il container viene eseguito in base alle relative istruzioni ENTRYPOINT e CMD (se presenti). Consulta la documentazione di Docker su come CMD e ENTRYPOINTinteragiscono.

    • Se specifichi solo containerSpec.command: il container viene eseguito con il valore containerSpec.command sostituendo la relativa istruzione ENTRYPOINT. Se il contenitore ha un'istruzione CMD, viene ignorato.

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

    • Se specifichi entrambi i campi: il contenitore verrà eseguito con containerSpec.command al posto dell'istruzione ENTRYPOINT e containerSpec.args sostituendo l'istruzione CMD.

L'esempio seguente mostra dove puoi specificare alcune di queste impostazioni del contenitore quando crei un CustomJob:

Console

In Google Cloud Console non puoi creare direttamente un CustomJob. Tuttavia, puoi creare un TrainingPipeline che crei una CustomJob. Quando crei un TrainingPipeline in Cloud Console, puoi specificare impostazioni personalizzate per i container in determinati campi del passaggio Contenitore addestramento:

  • containerSpec.imageUri: utilizza il campo Immagine container.

  • containerSpec.command: questo campo API non è configurabile in Cloud Console.

  • 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

Node.js

Per informazioni su come installare e utilizzare la libreria client per Vertex AI, consulta le librerie client di Vertex AI. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Vertex AI.js.

/**
 * 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 informazioni su come installare e utilizzare la libreria client per Vertex AI, consulta le librerie client di Vertex AI. Per maggiori informazioni, consulta la documentazione di riferimento dell'API Python AI Vertex.

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ù, consulta la guida alla creazione di un elemento CustomJob.

Passaggi successivi