Mengonfigurasi setelan container untuk pelatihan kustom

Saat melakukan pelatihan kustom, Anda harus menentukan kode machine learning (ML) yang ingin dijalankan oleh Vertex AI. Untuk melakukannya, konfigurasikan setelan container pelatihan untuk container kustom atau aplikasi pelatihan Python yang berjalan pada container bawaan.

Untuk menentukan apakah Anda ingin menggunakan kontainer kustom atau kontainer bawaan, baca Persyaratan kode pelatihan.

Dokumen ini menjelaskan kolom Vertex AI API yang harus Anda tentukan dalam salah satu kasus sebelumnya.

Tempat menentukan setelan container

Tentukan detail konfigurasi dalam WorkerPoolSpec. Bergantung pada cara Anda melakukan pelatihan kustom, masukkan WorkerPoolSpec ini di salah satu kolom API berikut:

Jika melakukan pelatihan terdistribusi, Anda dapat menggunakan setelan yang berbeda untuk setiap kumpulan pekerja.

Mengonfigurasi setelan container

Bergantung pada apakah Anda menggunakan container yang telah dibangun sebelumnya atau container kustom, Anda harus menentukan kolom yang berbeda dalam WorkerPoolSpec. Pilih tab untuk skenario Anda:

Container bawaan

  1. Pilih container bawaan yang mendukung framework ML yang akan Anda gunakan untuk pelatihan. Tentukan salah satu URI gambar container di kolom pythonPackageSpec.executorImageUri.

  2. Tentukan URI Cloud Storage dari aplikasi pelatihan Python Anda di kolom pythonPackageSpec.packageUris.

  3. Tentukan modul titik entri aplikasi pelatihan Anda di kolom pythonPackageSpec.pythonModule.

  4. Atau, tentukan daftar argumen command line yang akan diteruskan ke modul titik entri aplikasi pelatihan Anda di kolom pythonPackageSpec.args.

Contoh berikut menandai tempat Anda menentukan setelan container ini saat membuat CustomJob:

Konsol

Di Konsol Google Cloud, Anda tidak dapat membuat CustomJob secara langsung. Namun, Anda dapat membuat TrainingPipeline yang membuat CustomJob. Saat membuat TrainingPipeline di Google Cloud Console, Anda dapat menentukan setelan container bawaan di kolom tertentu pada langkah Container pelatihan:

  • pythonPackageSpec.executorImageUri: Gunakan menu drop-down Framework model dan Versi framework model.

  • pythonPackageSpec.packageUris: Gunakan kolom Lokasi paket.

  • pythonPackageSpec.pythonModule: Gunakan kolom modul Python.

  • pythonPackageSpec.args: Gunakan kolom 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

Untuk konteks selengkapnya, baca panduan untuk membuat CustomJob.

Container kustom

  1. Tentukan Artifact Registry atau URI Docker Hub dari container kustom di kolom containerSpec.imageUri.

  2. Secara opsional, jika Anda ingin mengganti petunjuk ENTRYPOINT atau CMD di container Anda, tentukan Kolom containerSpec.command atau containerSpec.args. Kolom ini memengaruhi cara container Anda berjalan sesuai dengan aturan berikut:

    • Jika Anda tidak menentukan salah satu kolom: Container Anda akan berjalan sesuai dengan petunjuk ENTRYPOINT dan petunjuk CMD (jika ada). Lihat dokumentasi Docker tentang cara CMD dan ENTRYPOINT berinteraksi.

    • Jika Anda hanya menentukan containerSpec.command: Container Anda akan berjalan dengan nilai containerSpec.command yang menggantikan instruksi ENTRYPOINT-nya. Jika container memiliki petunjuk CMD, petunjuk tersebut akan diabaikan.

    • Jika Anda hanya menentukan containerSpec.args: Container Anda akan berjalan sesuai dengan petunjuk ENTRYPOINT, dengan nilai containerSpec.args menggantikan petunjuk CMD-nya.

    • Jika Anda menentukan kedua kolom: Container Anda akan dijalankan dengan containerSpec.command yang menggantikan petunjuk ENTRYPOINT dan containerSpec.args menggantikan petunjuk CMD-nya.

Contoh berikut menyoroti tempat Anda dapat menentukan beberapa setelan container ini saat membuat CustomJob:

Konsol

Di Konsol Google Cloud, Anda tidak dapat membuat CustomJob secara langsung. Namun, Anda dapat membuat TrainingPipeline yang akan membuat CustomJob. Saat membuat TrainingPipeline di Google Cloud Console, Anda dapat menentukan setelan container kustom di kolom tertentu pada langkah Container pelatihan:

  • containerSpec.imageUri: Gunakan kolom Image container.

  • containerSpec.command: Kolom API ini tidak dapat dikonfigurasi di Konsol Google Cloud.

  • containerSpec.args: Gunakan kolom 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

Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Java di Panduan memulai Vertex AI menggunakan library klien. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi API Java Vertex AI.

Untuk melakukan autentikasi ke Vertex AI, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.


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
    // http://cloud.go888ogle.com.fqhub.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

Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Node.js di Panduan memulai Vertex AI menggunakan library klien. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi API Node.js Vertex AI.

Untuk melakukan autentikasi ke Vertex AI, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

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

Untuk mempelajari cara menginstal atau mengupdate Vertex AI SDK untuk Python, lihat Menginstal Vertex AI SDK untuk Python. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi 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)

Untuk konteks selengkapnya, baca panduan untuk membuat CustomJob.

Langkah selanjutnya