Membuat pipeline pelatihan

Pipeline pelatihan memungkinkan Anda melakukan pelatihan machine learning (ML) kustom dan secara otomatis membuat resource Model berdasarkan output pelatihan Anda.

Sebelum Anda membuat pipeline

Sebelum membuat pipeline pelatihan di Vertex AI, Anda harus membuat aplikasi pelatihan Python atau container kustom untuk menentukan kode pelatihan dan dependensi yang Anda ingin Anda jalankan di Vertex AI. Jika membuat aplikasi pelatihan Python menggunakan TensorFlow, scikit-learn, atau XGBoost, Anda dapat menggunakan container bawaan kami untuk menjalankan kode Anda. Jika Anda tidak yakin opsi mana yang harus dipilih, lihat persyaratan kode pelatihan untuk mempelajari lebih lanjut.

Opsi pipeline pelatihan

Pipeline pelatihan mengenkapsulasi tugas pelatihan dengan langkah-langkah tambahan. Panduan ini menjelaskan dua pipeline pelatihan yang berbeda:

  • Luncurkan CustomJob dan upload model yang dihasilkan ke Vertex AI
  • Meluncurkan tugas penyesuaian hyperparameter dan mengupload model yang dihasilkan ke Vertex AI

Selain itu, Anda dapat menggunakan set data terkelola di pipeline pelatihan. Pelajari lebih lanjut cara mengonfigurasi pipeline pelatihan Anda agar dapat menggunakan set data terkelola.

Hal yang disertakan dalam CustomJob

Saat membuat tugas kustom, Anda menentukan setelan yang diperlukan Vertex AI untuk menjalankan kode pelatihan Anda, termasuk:

Dalam kumpulan worker, Anda dapat menentukan setelan berikut:

Jika Anda ingin membuat tugas kustom mandiri di luar pipeline Vertex AI Training, lihat panduan tentang tugas kustom.

Mengonfigurasi pipeline Anda untuk menggunakan set data terkelola

Dalam pipeline pelatihan, Anda dapat mengonfigurasi tugas pelatihan kustom atau tugas penyesuaian hyperparameter agar menggunakan set data terkelola. Dengan set data terkelola, Anda dapat mengelola set data dengan aplikasi dan model pelatihan Anda.

Untuk menggunakan set data terkelola di pipeline pelatihan Anda:

  1. Buat set data.
  2. Update aplikasi pelatihan Anda untuk menggunakan set data terkelola. Untuk informasi selengkapnya, lihat cara Vertex AI meneruskan set data ke aplikasi pelatihan Anda.
  3. Tentukan set data terkelola saat Anda membuat pipeline pelatihan. Misalnya, jika Anda membuat pipeline pelatihan menggunakan REST API, tentukan setelan set data di bagian inputDataConfig.

    Anda harus membuat pipeline pelatihan di region yang sama dengan tempat Anda membuat set data.

Untuk mempelajari lebih lanjut, baca referensi APITrainingPipeline untuk .

Mengonfigurasi pelatihan yang terdistribusi

Dalam pipeline pelatihan, Anda dapat mengonfigurasi tugas pelatihan kustom atau tugas penyesuaian hyperparameter untuk pelatihan terdistribusi dengan menentukan beberapa kumpulan pekerja.

Semua contoh di halaman ini menampilkan tugas pelatihan replika tunggal dengan satu pool worker. Untuk memodifikasinya untuk pelatihan terdistribusi:

  • Gunakan pool worker pertama Anda untuk mengonfigurasi replika utama, dan tetapkan jumlah replika ke 1.
  • Tambahkan lebih banyak pool worker untuk mengonfigurasi replika worker, replika server parameter, atau replika evaluator, jika framework machine learning Anda mendukung tugas cluster tambahan ini untuk pelatihan terdistribusi.

Pelajari lebih lanjut cara menggunakan pelatihan terdistribusi.

CustomJob dan upload model

Pipeline pelatihan ini mengenkapsulasi tugas kustom dengan langkah praktis tambahan yang mempermudah deployment model Anda ke Vertex AI setelah pelatihan. Pipeline pelatihan ini melakukan dua hal utama:

  1. Pipeline pelatihan membuat resource CustomJob. Tugas kustom akan menjalankan aplikasi pelatihan menggunakan resource komputasi yang Anda tentukan.

  2. Setelah tugas kustom selesai, pipeline pelatihan akan menemukan artefak model yang dibuat oleh aplikasi pelatihan Anda di direktori output yang Anda tentukan untuk bucket Cloud Storage Anda. File ini menggunakan artefak ini untuk membuat resource model, yang menyiapkan Anda untuk deployment model.

Ada dua cara untuk menetapkan lokasi artefak model Anda:

  • Jika Anda menetapkan baseOutputDirectory untuk tugas pelatihan, pastikan kode pelatihan menyimpan artefak model Anda ke lokasi tersebut, menggunakan variabel lingkungan $AIP_MODEL_DIR yang ditetapkan oleh Vertex AI. Setelah tugas pelatihan selesai, Vertex AI akan menelusuri artefak model yang dihasilkan di gs://BASE_OUTPUT_DIRECTORY/model.

  • Jika Anda menetapkan kolom modelToUpload.artifactUri, pipeline pelatihan akan mengupload artefak model dari URI tersebut. Anda harus menetapkan kolom ini jika tidak menetapkan baseOutputDirectory.

Jika Anda menentukan baseOutputDirectory dan modelToUpload.artifactUri, Vertex AI akan menggunakan modelToUpload.artifactUri.

Untuk membuat jenis pipeline pelatihan ini:

Konsol

  1. Di konsol Google Cloud, di bagian Vertex AI, buka halaman Training pipelines.

    Buka Training pipelines

  2. Klik Create untuk membuka panel Train new model.

  3. Pada langkah Training method, tentukan setelan berikut:

    1. Jika Anda ingin menggunakan set data terkelola untuk pelatihan, tentukan Set Data dan Kumpulan anotasi.

      Jika tidak, di menu drop-down Set data, pilih Tidak ada set data terkelola.

    2. Pilih Pelatihan kustom (lanjutan).

    Klik Continue.

  4. Pada langkah Model details, pilih Train new model atau Train new version. Jika Anda memilih opsi latih model baru, masukkan nama pilihan Anda MODEL_NAME, untuk model Anda. Klik Continue.

  5. Pada langkah Training container, tentukan setelan berikut:

    1. Pilih apakah akan menggunakan Prebuilt container atau Custom container untuk pelatihan.

    2. Bergantung pada pilihan Anda, lakukan salah satu hal berikut:

    3. Di kolom Model output directory, tentukan Cloud Storage URI dari direktori dalam bucket yang dapat Anda akses. Direktori belum perlu ada.

      Nilai ini diteruskan ke Vertex AI di kolom baseOutputDirectory API, yang menetapkan beberapa variabel lingkungan yang dapat diakses oleh aplikasi pelatihan Anda saat aplikasi berjalan.

      Di akhir pelatihan, Vertex AI akan mencari artefak model dalam subdirektori URI ini untuk membuat Model. (Subdirektori ini tersedia untuk kode pelatihan Anda sebagai variabel lingkungan AIP_MODEL_DIR.)

      Jika Anda tidak menggunakan penyesuaian hyperparameter, Vertex AI diperkirakan akan menemukan artefak model di BASE_OUTPUT_DIRECTORY/model/.

    4. Opsional: Di kolom Arguments, Anda dapat menentukan argumen untuk Vertex AI yang akan digunakan saat Vertex AI mulai menjalankan kode pelatihan Anda. Panjang maksimum untuk semua argumen yang digabungkan adalah 100.000 karakter. Perilaku argumen ini berbeda-beda, bergantung pada jenis container yang Anda gunakan:

    Klik Lanjutkan.

  6. Pada langkah Penyesuaian hyperparameter, pastikan kotak centang Aktifkan penyesuaian hyperparameter tidak dicentang. Klik Lanjutkan.

  7. Pada langkah Komputasi dan harga, tentukan setelan berikut:

    1. Di menu drop-down Region, pilih "region yang mendukung pelatihan kustom"

    2. Di bagian Worker pool 0, tentukan resource komputasi yang akan digunakan untuk pelatihan.

      Jika Anda menentukan akselerator, pastikan jenis akselerator yang Anda pilih tersedia di region yang Anda pilih.

      Jika Anda ingin melakukan pelatihan terdistribusi, klik Add more worker pools dan tentukan kumpulan resource komputasi tambahan untuk setiap pool worker tambahan yang Anda inginkan.

    Klik Lanjutkan.

  8. Pada langkah Prediction container, tentukan setelan berikut:

    1. Pilih apakah akan menggunakan Container bawaan atau Container kustom untuk menampilkan prediksi dari model terlatih Anda.

    2. Bergantung pada pilihan Anda, lakukan salah satu hal berikut:

    3. Kolom Model directory berisi nilai yang Anda tetapkan sebelumnya di kolom Model output directory pada langkah Training container. Mengubah salah satu kolom ini memiliki efek yang sama. Lihat petunjuk sebelumnya untuk mengetahui informasi selengkapnya tentang kolom ini.

    4. Biarkan kolom di bagian Predict schemata kosong.

  9. Klik Start training untuk memulai pipeline pelatihan kustom.

REST

Gunakan contoh kode berikut untuk membuat pipeline pelatihan menggunakan metode create dari resource trainingPipeline.

Catatan: Jika ingin menetapkan pipeline ini untuk membuat versi model baru, Anda dapat menambahkan PARENT_MODELdi kolom trainingPipeline secara opsional.

Untuk mempelajari lebih lanjut, baca Pembuatan versi model dengan Vertex AI Model Registry.

Sebelum menggunakan data permintaan mana pun, lakukan penggantian berikut:

  • LOCATION_ID: Region tempat kode pelatihan dijalankan dan Model disimpan.
  • PROJECT_ID: Project ID Anda.
  • TRAINING_PIPELINE_NAME: Wajib diisi. Nama tampilan untuk trainingPipeline.
  • Jika aplikasi pelatihan Anda menggunakan set data Vertex AI, tentukan hal berikut:
    • DATASET_ID: ID set data.
    • ANNOTATIONS_FILTER: Memfilter set data berdasarkan anotasi yang Anda tentukan.
    • ANNOTATION_SCHEMA_URI: Memfilter set data berdasarkan URI skema anotasi yang ditentukan.
    • Gunakan salah satu opsi berikut untuk menentukan cara item data dibagi menjadi set pelatihan, validasi, dan pengujian.
      • Untuk membagi set data berdasarkan bagian yang menentukan ukuran setiap set, tentukan hal berikut:
        • TRAINING_FRACTION: Bagian set data yang akan digunakan untuk melatih model Anda.
        • VALIDATION_FRACTION: Bagian set data yang akan digunakan untuk memvalidasi model Anda.
        • TEST_FRACTION: Bagian set data yang akan digunakan untuk mengevaluasi model Anda.
      • Untuk memisahkan set data berdasarkan filter, tentukan hal berikut:
        • TRAINING_FILTER: Memfilter set data ke item data yang akan digunakan untuk melatih model Anda.
        • VALIDATION_FILTER: Memfilter set data ke item data yang akan digunakan untuk memvalidasi model Anda.
        • TEST_FILTER: Memfilter set data ke item data yang akan digunakan untuk mengevaluasi model Anda.
      • Untuk menggunakan pembagian yang telah ditentukan, tentukan opsi berikut:
        • PREDEFINED_SPLIT_KEY: Nama kolom yang akan digunakan untuk membagi set data. Nilai yang dapat diterima dalam kolom ini termasuk `pelatihan`, `validasi`, dan `pengujian`.
      • Untuk membagi set data berdasarkan stempel waktu pada item data, tentukan hal berikut:
        • TIMESTAMP_TRAINING_FRACTION: Bagian set data yang akan digunakan untuk melatih model Anda.
        • TIMESTAMP_VALIDATION_FRACTION: Bagian set data yang akan digunakan untuk memvalidasi model Anda.
        • TIMESTAMP_TEST_FRACTION: Bagian set data yang akan digunakan untuk mengevaluasi model Anda.
        • TIMESTAMP_SPLIT_KEY: Nama kolom stempel waktu yang digunakan untuk membagi set data.
    • OUTPUT_URI_PREFIX: Lokasi Cloud Storage tempat Vertex AI mengekspor set data pelatihan Anda, setelah dibagi menjadi set pelatihan, validasi, dan pengujian.
  • Tentukan tugas pelatihan kustom:
    • MACHINE_TYPE: Jenis mesin. Lihat jenis mesin yang tersedia untuk pelatihan.
    • ACCELERATOR_TYPE: (Opsional.) Jenis akselerator yang akan dipasang ke setiap uji coba.
    • ACCELERATOR_COUNT: (Opsional.) Jumlah akselerator yang harus dipasang ke setiap uji coba.
    • REPLICA_COUNT: Jumlah replika worker yang akan digunakan untuk setiap uji coba.
    • Jika aplikasi pelatihan Anda berjalan dalam container kustom, tentukan hal berikut:
      • CUSTOM_CONTAINER_IMAGE_URI: URI image container di Artifact Registry atau Docker Hub yang akan dijalankan di setiap replika worker.
      • CUSTOM_CONTAINER_COMMAND: (Opsional.) Perintah yang akan dipanggil saat container dimulai. Perintah ini mengganti titik entri default container.
      • CUSTOM_CONTAINER_ARGS: (Opsional.) Argumen yang akan diteruskan saat memulai container. Panjang maksimum untuk semua argumen yang digabungkan adalah 100.000 karakter.
    • Jika aplikasi pelatihan Anda adalah paket Python yang berjalan dalam container bawaan, tentukan hal berikut:
      • PYTHON_PACKAGE_EXECUTOR_IMAGE_URI: URI image container yang menjalankan paket Python yang disediakan. Lihat container bawaan yang tersedia untuk pelatihan.
      • PYTHON_PACKAGE_URIS: Lokasi Cloud Storage dari file paket Python yang merupakan program pelatihan dan paket dependennya. Jumlah maksimum URI paket adalah 100.
      • PYTHON_MODULE: Nama modul Python yang akan dijalankan setelah menginstal paket.
      • PYTHON_PACKAGE_ARGS: (Opsional.) Argumen command line yang akan diteruskan ke modul Python. Panjang maksimum untuk semua argumen yang digabungkan adalah 100.000 karakter.
    • TIMEOUT: (Opsional.) Waktu berjalan maksimum untuk tugas.
  • MODEL_NAME: Nama tampilan untuk model yang diupload (dibuat) oleh TrainingPipeline.
  • MODEL_DESCRIPTION: Deskripsi model.
  • IMAGE_URI: URI image container yang akan digunakan untuk menjalankan prediksi. Misalnya, us-docker.pkg.dev/vertex-ai/prediction/tf2-cpu.2-1:latest. Gunakan container bawaan atau container kustom.
  • modelToUpload.labels: Kumpulan key-value pair apa pun untuk mengatur model Anda. Contoh:
    • "env": "prod"
    • "tier": "backend"
  • Tentukan LABEL_NAME dan LABEL_VALUE untuk setiap label yang ingin Anda terapkan ke pipeline pelatihan ini.

Metode HTTP dan URL:

POST https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/trainingPipelines

Isi JSON permintaan:

{
  "displayName": "TRAINING_PIPELINE_NAME",
  "inputDataConfig": {
    "datasetId": DATASET_ID,
    "annotationsFilter": ANNOTATIONS_FILTER,
    "annotationSchemaUri": ANNOTATION_SCHEMA_URI,

    // Union field split can be only one of the following:
    "fractionSplit": {
      "trainingFraction": TRAINING_FRACTION,
      "validationFraction": VALIDATION_FRACTION,
      "testFraction": TEST_FRACTION
    },
    "filterSplit": {
      "trainingFilter": TRAINING_FILTER,
      "validationFilter": VALIDATION_FILTER,
      "testFilter": TEST_FILTER
    },
    "predefinedSplit": {
      "key": PREDEFINED_SPLIT_KEY
    },
    "timestampSplit": {
      "trainingFraction": TIMESTAMP_TRAINING_FRACTION,
      "validationFraction": TIMESTAMP_VALIDATION_FRACTION,
      "testFraction": TIMESTAMP_TEST_FRACTION,
      "key": TIMESTAMP_SPLIT_KEY
    }
    // End of list of possible types for union field split.
    "gcsDestination": {
      "outputUriPrefix": OUTPUT_URI_PREFIX
    }
  },
  "trainingTaskDefinition": "gs://google-cloud-aiplatform/schema/trainingjob/definition/custom_task_1.0.0.yaml",
  "trainingTaskInputs": {
    "workerPoolSpecs": [
        {
          "machineSpec": {
            "machineType": MACHINE_TYPE,
            "acceleratorType": ACCELERATOR_TYPE,
            "acceleratorCount": ACCELERATOR_COUNT
          },
          "replicaCount": REPLICA_COUNT,

          // Union field task can be only one of the following:
          "containerSpec": {
            "imageUri": CUSTOM_CONTAINER_IMAGE_URI,
            "command": [
              CUSTOM_CONTAINER_COMMAND
            ],
            "args": [
              CUSTOM_CONTAINER_ARGS
            ]
          },
          "pythonPackageSpec": {
            "executorImageUri": PYTHON_PACKAGE_EXECUTOR_IMAGE_URI,
            "packageUris": [
              PYTHON_PACKAGE_URIS
            ],
            "pythonModule": PYTHON_MODULE,
            "args": [
              PYTHON_PACKAGE_ARGS
            ]
          }
          // End of list of possible types for union field task.
        }
      ],
      "scheduling": {
        "TIMEOUT": TIMEOUT
      }
    }
  },
  "modelToUpload": {
    "displayName": "MODEL_NAME",
    "predictSchemata": {},
    "containerSpec": {
      "imageUri": "IMAGE_URI"
    }
  },
  "labels": {
    LABEL_NAME_1": LABEL_VALUE_1,
    LABEL_NAME_2": LABEL_VALUE_2
  }
}

Untuk mengirim permintaan Anda, pilih salah satu opsi berikut:

curl

Simpan isi permintaan dalam file bernama request.json, dan jalankan perintah berikut:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/trainingPipelines"

PowerShell

Simpan isi permintaan dalam file bernama request.json, dan jalankan perintah berikut:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/trainingPipelines" | Select-Object -Expand Content

Respons ini berisi informasi tentang spesifikasi serta TRAININGPIPELINE_ID.

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.LocationName;
import com.google.cloud.aiplatform.v1.Model;
import com.google.cloud.aiplatform.v1.ModelContainerSpec;
import com.google.cloud.aiplatform.v1.PipelineServiceClient;
import com.google.cloud.aiplatform.v1.PipelineServiceSettings;
import com.google.cloud.aiplatform.v1.TrainingPipeline;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import com.google.protobuf.Value;
import com.google.protobuf.util.JsonFormat;
import java.io.IOException;

public class CreateTrainingPipelineCustomJobSample {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    String project = "PROJECT";
    String displayName = "DISPLAY_NAME";
    String modelDisplayName = "MODEL_DISPLAY_NAME";
    String containerImageUri = "CONTAINER_IMAGE_URI";
    String baseOutputDirectoryPrefix = "BASE_OUTPUT_DIRECTORY_PREFIX";
    createTrainingPipelineCustomJobSample(
        project, displayName, modelDisplayName, containerImageUri, baseOutputDirectoryPrefix);
  }

  static void createTrainingPipelineCustomJobSample(
      String project,
      String displayName,
      String modelDisplayName,
      String containerImageUri,
      String baseOutputDirectoryPrefix)
      throws IOException {
    PipelineServiceSettings settings =
        PipelineServiceSettings.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. After completing all of your requests, call
    // the "close" method on the client to safely clean up any remaining background resources.
    try (PipelineServiceClient client = PipelineServiceClient.create(settings)) {
      JsonObject jsonMachineSpec = new JsonObject();
      jsonMachineSpec.addProperty("machineType", "n1-standard-4");

      // A working docker image can be found at
      // gs://cloud-samples-data/ai-platform/mnist_tfrecord/custom_job
      // This sample image accepts a set of arguments including model_dir.
      JsonObject jsonContainerSpec = new JsonObject();
      jsonContainerSpec.addProperty("imageUri", containerImageUri);
      JsonArray jsonArgs = new JsonArray();
      jsonArgs.add("--model_dir=$(AIP_MODEL_DIR)");
      jsonContainerSpec.add("args", jsonArgs);

      JsonObject jsonJsonWorkerPoolSpec0 = new JsonObject();
      jsonJsonWorkerPoolSpec0.addProperty("replicaCount", 1);
      jsonJsonWorkerPoolSpec0.add("machineSpec", jsonMachineSpec);
      jsonJsonWorkerPoolSpec0.add("containerSpec", jsonContainerSpec);

      JsonArray jsonWorkerPoolSpecs = new JsonArray();
      jsonWorkerPoolSpecs.add(jsonJsonWorkerPoolSpec0);

      JsonObject jsonBaseOutputDirectory = new JsonObject();
      // The GCS location for outputs must be accessible by the project's AI Platform
      // service account.
      jsonBaseOutputDirectory.addProperty("output_uri_prefix", baseOutputDirectoryPrefix);

      JsonObject jsonTrainingTaskInputs = new JsonObject();
      jsonTrainingTaskInputs.add("workerPoolSpecs", jsonWorkerPoolSpecs);
      jsonTrainingTaskInputs.add("baseOutputDirectory", jsonBaseOutputDirectory);

      Value.Builder trainingTaskInputsBuilder = Value.newBuilder();
      JsonFormat.parser().merge(jsonTrainingTaskInputs.toString(), trainingTaskInputsBuilder);
      Value trainingTaskInputs = trainingTaskInputsBuilder.build();
      String trainingTaskDefinition =
          "gs://google-cloud-aiplatform/schema/trainingjob/definition/custom_task_1.0.0.yaml";
      String imageUri = "gcr.io/cloud-aiplatform/prediction/tf-cpu.1-15:latest";
      ModelContainerSpec containerSpec =
          ModelContainerSpec.newBuilder().setImageUri(imageUri).build();
      Model modelToUpload =
          Model.newBuilder()
              .setDisplayName(modelDisplayName)
              .setContainerSpec(containerSpec)
              .build();
      TrainingPipeline trainingPipeline =
          TrainingPipeline.newBuilder()
              .setDisplayName(displayName)
              .setTrainingTaskDefinition(trainingTaskDefinition)
              .setTrainingTaskInputs(trainingTaskInputs)
              .setModelToUpload(modelToUpload)
              .build();
      LocationName parent = LocationName.of(project, location);
      TrainingPipeline response = client.createTrainingPipeline(parent, trainingPipeline);
      System.out.format("response: %s\n", response);
      System.out.format("Name: %s\n", response.getName());
    }
  }
}

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.

Contoh berikut menunjukkan cara menggunakan Vertex AI SDK untuk Python untuk membuat pipeline pelatihan kustom. Pilih apakah Anda berencana menggunakan container kustom atau container bawaan untuk pelatihan:

Container bawaan

Saat menggunakan Vertex AI SDK untuk Python untuk membuat pipeline pelatihan yang menjalankan kode Python di container bawaan, Anda dapat memberikan kode pelatihan dengan salah satu cara berikut:

  • Tentukan URI paket distribusi sumber Python di Cloud Storage.

    (Opsi ini juga tersedia saat Anda membuat pipeline pelatihan tanpa menggunakan Vertex AI SDK untuk Python.)

  • Tentukan jalur ke skrip Python di mesin lokal Anda. Sebelum membuat pipeline pelatihan, Vertex AI SDK untuk Python mengemas skrip Anda sebagai distribusi sumber dan menguploadnya ke bucket Cloud Storage pilihan Anda.

    (Opsi ini hanya tersedia saat Anda menggunakan Vertex AI SDK untuk Python.)

Untuk melihat contoh kode untuk setiap opsi ini, pilih tab yang sesuai:

Paket

Contoh berikut menggunakan class CustomPythonPackageTrainingJob.

def create_training_pipeline_custom_package_job_sample(
    project: str,
    location: str,
    staging_bucket: str,
    display_name: str,
    python_package_gcs_uri: str,
    python_module_name: str,
    container_uri: str,
    model_serving_container_image_uri: str,
    dataset_id: Optional[str] = None,
    model_display_name: Optional[str] = None,
    args: Optional[List[Union[str, float, int]]] = None,
    replica_count: int = 1,
    machine_type: str = "n1-standard-4",
    accelerator_type: str = "ACCELERATOR_TYPE_UNSPECIFIED",
    accelerator_count: int = 0,
    training_fraction_split: float = 0.8,
    validation_fraction_split: float = 0.1,
    test_fraction_split: float = 0.1,
    sync: bool = True,
    tensorboard_resource_name: Optional[str] = None,
    service_account: Optional[str] = None,
):
    aiplatform.init(project=project, location=location, staging_bucket=staging_bucket)

    job = aiplatform.CustomPythonPackageTrainingJob(
        display_name=display_name,
        python_package_gcs_uri=python_package_gcs_uri,
        python_module_name=python_module_name,
        container_uri=container_uri,
        model_serving_container_image_uri=model_serving_container_image_uri,
    )

    # This example uses an ImageDataset, but you can use another type
    dataset = aiplatform.ImageDataset(dataset_id) if dataset_id else None

    model = job.run(
        dataset=dataset,
        model_display_name=model_display_name,
        args=args,
        replica_count=replica_count,
        machine_type=machine_type,
        accelerator_type=accelerator_type,
        accelerator_count=accelerator_count,
        training_fraction_split=training_fraction_split,
        validation_fraction_split=validation_fraction_split,
        test_fraction_split=test_fraction_split,
        sync=sync,
        tensorboard=tensorboard_resource_name,
        service_account=service_account,
    )

    model.wait()

    print(model.display_name)
    print(model.resource_name)
    print(model.uri)
    return model

Skrip

Contoh berikut menggunakan class CustomTrainingJob.

def create_training_pipeline_custom_job_sample(
    project: str,
    location: str,
    staging_bucket: str,
    display_name: str,
    script_path: str,
    container_uri: str,
    model_serving_container_image_uri: str,
    dataset_id: Optional[str] = None,
    model_display_name: Optional[str] = None,
    args: Optional[List[Union[str, float, int]]] = None,
    replica_count: int = 0,
    machine_type: str = "n1-standard-4",
    accelerator_type: str = "ACCELERATOR_TYPE_UNSPECIFIED",
    accelerator_count: int = 0,
    training_fraction_split: float = 0.8,
    validation_fraction_split: float = 0.1,
    test_fraction_split: float = 0.1,
    sync: bool = True,
    tensorboard_resource_name: Optional[str] = None,
    service_account: Optional[str] = None,
):
    aiplatform.init(project=project, location=location, staging_bucket=staging_bucket)

    job = aiplatform.CustomTrainingJob(
        display_name=display_name,
        script_path=script_path,
        container_uri=container_uri,
        model_serving_container_image_uri=model_serving_container_image_uri,
    )

    # This example uses an ImageDataset, but you can use another type
    dataset = aiplatform.ImageDataset(dataset_id) if dataset_id else None

    model = job.run(
        dataset=dataset,
        model_display_name=model_display_name,
        args=args,
        replica_count=replica_count,
        machine_type=machine_type,
        accelerator_type=accelerator_type,
        accelerator_count=accelerator_count,
        training_fraction_split=training_fraction_split,
        validation_fraction_split=validation_fraction_split,
        test_fraction_split=test_fraction_split,
        sync=sync,
        tensorboard=tensorboard_resource_name,
        service_account=service_account,
    )

    model.wait()

    print(model.display_name)
    print(model.resource_name)
    print(model.uri)
    return model

Container kustom

Contoh berikut menggunakan class CustomContainerTrainingJob.

def create_training_pipeline_custom_container_job_sample(
    project: str,
    location: str,
    staging_bucket: str,
    display_name: str,
    container_uri: str,
    model_serving_container_image_uri: str,
    dataset_id: Optional[str] = None,
    model_display_name: Optional[str] = None,
    args: Optional[List[Union[str, float, int]]] = None,
    replica_count: int = 1,
    machine_type: str = "n1-standard-4",
    accelerator_type: str = "ACCELERATOR_TYPE_UNSPECIFIED",
    accelerator_count: int = 0,
    training_fraction_split: float = 0.8,
    validation_fraction_split: float = 0.1,
    test_fraction_split: float = 0.1,
    sync: bool = True,
    tensorboard_resource_name: Optional[str] = None,
    service_account: Optional[str] = None,
):
    aiplatform.init(project=project, location=location, staging_bucket=staging_bucket)

    job = aiplatform.CustomContainerTrainingJob(
        display_name=display_name,
        container_uri=container_uri,
        model_serving_container_image_uri=model_serving_container_image_uri,
    )

    # This example uses an ImageDataset, but you can use another type
    dataset = aiplatform.ImageDataset(dataset_id) if dataset_id else None

    model = job.run(
        dataset=dataset,
        model_display_name=model_display_name,
        args=args,
        replica_count=replica_count,
        machine_type=machine_type,
        accelerator_type=accelerator_type,
        accelerator_count=accelerator_count,
        training_fraction_split=training_fraction_split,
        validation_fraction_split=validation_fraction_split,
        test_fraction_split=test_fraction_split,
        sync=sync,
        tensorboard=tensorboard_resource_name,
        service_account=service_account,
    )

    model.wait()

    print(model.display_name)
    print(model.resource_name)
    print(model.uri)
    return model

Tugas penyesuaian hyperparameter dan upload model

Pipeline pelatihan ini mengenkapsulasi tugas penyesuaian hyperparameter dengan langkah praktis tambahan yang mempermudah deployment model Anda ke Vertex AI setelah pelatihan. Pipeline pelatihan ini melakukan dua hal utama:

  1. Pipeline pelatihan membuat resource tugas penyesuaian hyperparameter. Tugas penyesuaian hyperparameter membuat beberapa uji coba. Untuk setiap uji coba, tugas kustom akan menjalankan aplikasi pelatihan Anda menggunakan resource komputasi dan hyperparameter yang Anda tentukan.

  2. Setelah tugas penyesuaian hyperparameter selesai, pipeline pelatihan akan menemukan artefak model dari uji coba terbaik, dalam direktori output (baseOutputDirectory ) yang Anda tentukan untuk bucket Cloud Storage. Pipeline pelatihan menggunakan artefak ini untuk membuat resource model, yang akan menyiapkan Anda untuk deployment model.

Untuk pipeline pelatihan ini, Anda harus menentukan baseOutputDirectory tempat Vertex AI menelusuri artefak model dari uji coba terbaik.

Tugas penyesuaian hyperparameter memiliki setelan tambahan yang perlu dikonfigurasi. Pelajari setelan untuk HyperparameterTuningJob lebih lanjut.

REST

Gunakan contoh kode berikut untuk membuat pipeline pelatihan menggunakan metode create dari resource trainingPipeline.

Sebelum menggunakan data permintaan mana pun, lakukan penggantian berikut:

  • LOCATION_ID: Region project Anda.
  • PROJECT_ID: Project ID Anda.
  • TRAINING_PIPELINE_NAME: Wajib diisi. Nama tampilan untuk trainingPipeline.
  • Jika aplikasi pelatihan Anda menggunakan set data Vertex AI, tentukan hal berikut:
    • DATASET_ID: ID set data.
    • ANNOTATIONS_FILTER: Memfilter set data berdasarkan anotasi yang Anda tentukan.
    • ANNOTATION_SCHEMA_URI: Memfilter set data berdasarkan URI skema anotasi yang ditentukan.
    • Gunakan salah satu opsi berikut untuk menentukan cara item data dibagi menjadi set pelatihan, validasi, dan pengujian.
      • Untuk membagi set data berdasarkan bagian yang menentukan ukuran setiap set, tentukan hal berikut:
        • TRAINING_FRACTION: Bagian set data yang akan digunakan untuk melatih model Anda.
        • VALIDATION_FRACTION: Bagian set data yang akan digunakan untuk memvalidasi model Anda.
        • TEST_FRACTION: Bagian set data yang akan digunakan untuk mengevaluasi model Anda.
      • Untuk memisahkan set data berdasarkan filter, tentukan hal berikut:
        • TRAINING_FILTER: Memfilter set data ke item data yang akan digunakan untuk melatih model Anda.
        • VALIDATION_FILTER: Memfilter set data ke item data yang akan digunakan untuk memvalidasi model Anda.
        • TEST_FILTER: Memfilter set data ke item data yang akan digunakan untuk mengevaluasi model Anda.
      • Untuk menggunakan pembagian yang telah ditentukan, tentukan opsi berikut:
        • PREDEFINED_SPLIT_KEY: Nama kolom yang akan digunakan untuk membagi set data. Nilai yang dapat diterima dalam kolom ini termasuk `pelatihan`, `validasi`, dan `pengujian`.
      • Untuk membagi set data berdasarkan stempel waktu pada item data, tentukan hal berikut:
        • TIMESTAMP_TRAINING_FRACTION: Bagian set data yang akan digunakan untuk melatih model Anda.
        • TIMESTAMP_VALIDATION_FRACTION: Bagian set data yang akan digunakan untuk memvalidasi model Anda.
        • TIMESTAMP_TEST_FRACTION: Bagian set data yang akan digunakan untuk mengevaluasi model Anda.
        • TIMESTAMP_SPLIT_KEY: Nama kolom stempel waktu yang digunakan untuk membagi set data.
    • OUTPUT_URI_PREFIX: Lokasi Cloud Storage tempat Vertex AI mengekspor set data pelatihan Anda, setelah dibagi menjadi set pelatihan, validasi, dan pengujian.
  • Tentukan tugas penyesuaian hyperparameter Anda:
    • Tentukan metrik:
      • METRIC_ID: Nama metrik ini.
      • METRIC_GOAL: Sasaran metrik ini. Dapat berupa MAXIMIZE atau MINIMIZE.
    • Tentukan hyperparameter Anda:
      • PARAMETER_ID: Nama hyperparameter ini.
      • PARAMETER_SCALE: (Opsional.) Bagaimana parameter harus diskalakan. Biarkan tidak disetel untuk parameter CATEGORICAL. Dapat berupa UNIT_LINEAR_SCALE, UNIT_LOG_SCALE, UNIT_REVERSE_LOG_SCALE, atau SCALE_TYPE_UNSPECIFIED
      • Jika jenis hyperparameter ini adalah GANDA, tentukan nilai minimum (DOUBLE_MIN_VALUE) dan maksimum (DOUBLE_MAX_VALUE) untuk hyperparameter ini.
      • Jika jenis hyperparameter ini adalah BILANGAN BULAT, tentukan nilai minimum (INTEGER_MIN_VALUE) dan maksimum (INTEGER_MAX_VALUE) untuk hyperparameter ini.
      • Jika jenis hyperparameter ini adalah KATEGORIS, tentukan nilai yang dapat diterima (CATEGORICAL_VALUES) sebagai array string.
      • Jika jenis hyperparameter ini adalah DISKRET, tentukan nilai yang dapat diterima (DISCRETE_VALUES) sebagai array angka.
    • ALGORITHM: (Opsional.) Algoritme penelusuran yang akan digunakan dalam tugas penyesuaian hyperparameter ini. Dapat berupa ALGORITHM_UNSPECIFIED, GRID_SEARCH, atau RANDOM_SEARCH.
    • MAX_TRIAL_COUNT: Jumlah uji coba maksimum untuk dijalankan di tugas ini.
    • PARALLEL_TRIAL_COUNT: Jumlah maksimum uji coba yang dapat dijalankan secara paralel.
    • MAX_FAILED_TRIAL_COUNT: Jumlah tugas yang dapat gagal sebelum tugas penyesuaian hyperparameter gagal.
    • Tentukan tugas pelatihan kustom uji coba:
      • MACHINE_TYPE: Jenis mesin. Lihat jenis mesin yang tersedia untuk pelatihan.
      • ACCELERATOR_TYPE: (Opsional.) Jenis akselerator yang akan dipasang ke setiap uji coba.
      • ACCELERATOR_COUNT: (Opsional.) Jumlah akselerator yang harus dipasang ke setiap uji coba.
      • REPLICA_COUNT: Jumlah replika worker yang akan digunakan untuk setiap uji coba.
      • Jika aplikasi pelatihan Anda berjalan dalam container kustom, tentukan hal berikut:
        • CUSTOM_CONTAINER_IMAGE_URI: URI image container di Artifact Registry atau Docker Hub yang akan dijalankan di setiap replika pekerja.
        • CUSTOM_CONTAINER_COMMAND: (Opsional.) Perintah yang akan dipanggil saat container dimulai. Perintah ini mengganti titik entri default container.
        • CUSTOM_CONTAINER_ARGS: (Opsional.) Argumen yang akan diteruskan saat memulai container.
      • Jika aplikasi pelatihan Anda adalah paket Python yang berjalan dalam container bawaan, tentukan hal berikut:
        • PYTHON_PACKAGE_EXECUTOR_IMAGE_URI: URI image container yang menjalankan paket Python yang disediakan. Lihat container bawaan yang tersedia untuk pelatihan.
        • PYTHON_PACKAGE_URIS: Lokasi Cloud Storage dari file paket Python yang merupakan program pelatihan dan paket dependennya. Jumlah maksimum URI paket adalah 100.
        • PYTHON_MODULE: Nama modul Python yang akan dijalankan setelah menginstal paket.
        • PYTHON_PACKAGE_ARGS: (Opsional.) Argumen command line yang akan diteruskan ke modul Python.
    • Pelajari opsi penjadwalan tugas.
    • TIMEOUT: (Opsional.) Waktu berjalan maksimum untuk setiap uji coba.
    • Tentukan LABEL_NAME dan LABEL_VALUE untuk setiap label yang ingin Anda terapkan ke tugas penyesuaian hyperparameter ini.
  • MODEL_NAME: Nama tampilan untuk model yang diupload (dibuat) oleh TrainingPipeline.
  • MODEL_DESCRIPTION: Opsional. Deskripsi model.
  • PREDICTION_IMAGE_URI: Harus ada. Tentukan salah satu dari dua opsi berikut:
  • modelToUpload.labels: Opsional. Kumpulan key-value pair apa pun untuk mengatur model Anda. Contoh:
    • "env": "prod"
    • "tier": "backend"
  • Tentukan LABEL_NAME dan LABEL_VALUE untuk setiap label yang ingin Anda terapkan ke pipeline pelatihan ini.

Metode HTTP dan URL:

POST https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/trainingPipelines

Isi JSON permintaan:

{
  "displayName": "TRAINING_PIPELINE_NAME",
  "inputDataConfig": {
    "datasetId": DATASET_ID,
    "annotationsFilter": ANNOTATIONS_FILTER,
    "annotationSchemaUri": ANNOTATION_SCHEMA_URI,

    // Union field split can be only one of the following:
    "fractionSplit": {
      "trainingFraction": TRAINING_FRACTION,
      "validationFraction": VALIDATION_FRACTION,
      "testFraction": TEST_FRACTION
    },
    "filterSplit": {
      "trainingFilter": TRAINING_FILTER,
      "validationFilter": VALIDATION_FILTER,
      "testFilter": TEST_FILTER
    },
    "predefinedSplit": {
      "key": PREDEFINED_SPLIT_KEY
    },
    "timestampSplit": {
      "trainingFraction": TIMESTAMP_TRAINING_FRACTION,
      "validationFraction": TIMESTAMP_VALIDATION_FRACTION,
      "testFraction": TIMESTAMP_TEST_FRACTION,
      "key": TIMESTAMP_SPLIT_KEY
    }
    // End of list of possible types for union field split.
    "gcsDestination": {
      "outputUriPrefix": OUTPUT_URI_PREFIX
    }
  },
  "trainingTaskDefinition": "gs://google-cloud-aiplatform/schema/trainingjob/definition/hyperparameter_tuning_task_1.0.0.yaml",
  "trainingTaskInputs": {
    "studySpec": {
    "metrics": [
      {
        "metricId": METRIC_ID,
        "goal": METRIC_GOAL
      }
    ],
    "parameters": [
      {
        "parameterId": PARAMETER_ID,
        "scaleType": PARAMETER_SCALE,

        // Union field parameter_value_spec can be only one of the following:
        "doubleValueSpec": {
            "minValue": DOUBLE_MIN_VALUE,
            "maxValue": DOUBLE_MAX_VALUE
        },
        "integerValueSpec": {
            "minValue": INTEGER_MIN_VALUE,
            "maxValue": INTEGER_MAX_VALUE
        },
        "categoricalValueSpec": {
            "values": [
              CATEGORICAL_VALUES
            ]
        },
        "discreteValueSpec": {
            "values": [
              DISCRETE_VALUES
            ]
        }
        // End of list of possible types for union field parameter_value_spec.
      }
    ],
    "ALGORITHM": ALGORITHM
  },
  "maxTrialCount": MAX_TRIAL_COUNT,
  "parallelTrialCount": PARALLEL_TRIAL_COUNT,
  "maxFailedTrialCount": MAX_FAILED_TRIAL_COUNT,
  "trialJobSpec": {
      "workerPoolSpecs": [
        {
          "machineSpec": {
            "machineType": MACHINE_TYPE,
            "acceleratorType": ACCELERATOR_TYPE,
            "acceleratorCount": ACCELERATOR_COUNT
          },
          "replicaCount": REPLICA_COUNT,

          // Union field task can be only one of the following:
          "containerSpec": {
            "imageUri": CUSTOM_CONTAINER_IMAGE_URI,
            "command": [
              CUSTOM_CONTAINER_COMMAND
            ],
            "args": [
              CUSTOM_CONTAINER_ARGS
            ]
          },
          "pythonPackageSpec": {
            "executorImageUri": PYTHON_PACKAGE_EXECUTOR_IMAGE_URI,
            "packageUris": [
              PYTHON_PACKAGE_URIS
            ],
            "pythonModule": PYTHON_MODULE,
            "args": [
              PYTHON_PACKAGE_ARGS
            ]
          }
          // End of list of possible types for union field task.
        }
      ],
      "scheduling": {
        "TIMEOUT": TIMEOUT
      }
    },
    "labels": {
      LABEL_NAME_1": LABEL_VALUE_1,
      LABEL_NAME_2": LABEL_VALUE_2
    }
  },
  "modelToUpload": {
    "displayName": "MODEL_NAME",
    "description": "MODEL_DESCRIPTION",
    "predictSchemata": {},
    "containerSpec": {
      "imageUri": "PREDICTION_IMAGE_URI"
    }
  },
  "labels": {
    LABEL_NAME_1": LABEL_VALUE_1,
    LABEL_NAME_2": LABEL_VALUE_2
  }
}

Untuk mengirim permintaan Anda, pilih salah satu opsi berikut:

curl

Simpan isi permintaan dalam file bernama request.json, dan jalankan perintah berikut:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/trainingPipelines"

PowerShell

Simpan isi permintaan dalam file bernama request.json, dan jalankan perintah berikut:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/trainingPipelines" | Select-Object -Expand Content

Respons ini berisi informasi tentang spesifikasi serta TRAININGPIPELINE_ID.

Memantau pelatihan

Untuk melihat log pelatihan, lakukan hal berikut:

  1. Di konsol Google Cloud, di bagian Vertex AI, buka halaman Pelatihan.

    Buka halaman Pelatihan

  2. Klik nama tugas Anda untuk membuka halaman tugas kustom.

  3. Klik Lihat log.

Anda juga dapat menggunakan shell interaktif untuk memeriksa container pelatihan saat pipeline pelatihan sedang berjalan.

Melihat model terlatih Anda

Ketika pipeline pelatihan kustom selesai, Anda dapat menemukan model terlatih di Konsol Google Cloud, di bagian Vertex AI, di halaman Model.

Buka halaman Model

Langkah selanjutnya