Membuat tugas penyesuaian hyperparameter

Hyperparameter adalah variabel yang mengatur proses pelatihan model, seperti ukuran tumpukan atau jumlah lapisan tersembunyi di jaringan neural dalam. Penyesuaian hyperparameter menelusuri kombinasi terbaik dari nilai hyperparameter dengan mengoptimalkan nilai metrik di seluruh rangkaian uji coba. Metrik adalah ringkasan skalar yang Anda tambahkan ke pelatih, seperti akurasi model.

Pelajari penyesuaian hyperparameter di Vertex AI lebih lanjut. Untuk contoh langkah demi langkah, lihat Vertex AI: Codelab Penyesuaian Hyperparameter.

Halaman ini menunjukkan cara:

Menyiapkan aplikasi pelatihan

Dalam tugas penyesuaian hyperparameter, Vertex AI membuat uji coba tugas pelatihan Anda dengan kumpulan hyperparameter yang berbeda dan mengevaluasi efektivitas uji coba menggunakan metrik yang Anda tentukan. Vertex AI meneruskan nilai hyperparameter ke aplikasi pelatihan Anda sebagai argumen command line. Agar Vertex AI dapat mengevaluasi keefektifan uji coba, aplikasi pelatihan Anda harus melaporkan metrik ke Vertex AI.

Bagian berikut menjelaskan:

  • Cara Vertex AI meneruskan hyperparameter ke aplikasi pelatihan Anda.
  • Opsi untuk meneruskan metrik dari aplikasi pelatihan Anda ke Vertex AI.

Untuk mempelajari lebih lanjut persyaratan bagi aplikasi pelatihan kustom yang berjalan di Vertex AI, baca Persyaratan kode pelatihan.

Menangani argumen command line untuk hyperparameter yang ingin Anda sesuaikan

Vertex AI menetapkan argumen command line saat memanggil aplikasi pelatihan Anda. Gunakan argumen command line dalam kode Anda:

  1. Tentukan nama untuk setiap argumen hyperparameter dan uraikan menggunakan parser argumen apa pun yang Anda inginkan, seperti argparse. Gunakan nama argumen yang sama saat mengonfigurasi tugas pelatihan hyperparameter Anda.

    Misalnya, jika aplikasi pelatihan Anda adalah modul Python bernama my_trainer dan Anda menyesuaikan hyperparameter bernama learning_rate, Vertex AI akan memulai setiap uji coba dengan perintah seperti berikut:

    python3 -m my_trainer --learning_rate learning-rate-in-this-trial
    

    Vertex AI menentukan learning-rate-in-this-trial dan meneruskannya menggunakan argumen learning_rate.

  2. Tetapkan nilai dari argumen command line ke hyperparameter dalam kode pelatihan Anda.

Pelajari lebih lanjut persyaratan untuk mengurai argumen command line.

Melaporkan metrik Anda ke Vertex AI

Untuk melaporkan metrik ke Vertex AI, gunakan paket Python cloudml-hypertune. Library ini menyediakan fungsi bantuan untuk melaporkan metrik ke Vertex AI.

Pelajari metrik hyperparameter pelaporan lebih lanjut.

Membuat tugas penyesuaian hyperparameter

Bergantung pada alat yang ingin Anda gunakan untuk membuat HyperparameterTuningJob, pilih salah satu tab berikut:

Konsol

Di Konsol Google Cloud, Anda tidak dapat membuat resource HyperparameterTuningJob secara langsung. Namun, Anda dapat membuat resource TrainingPipeline yang akan membuat HyperparameterTuningJob.

Petunjuk berikut menjelaskan cara membuat TrainingPipeline yang membuat HyperparameterTuningJob dan tidak melakukan hal lain. Jika Anda ingin menggunakan fitur TrainingPipeline tambahan, seperti pelatihan dengan set data terkelola, baca Membuat pipeline pelatihan.

  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. Di menu drop-down Dataset, pilih No Managed dataset.

    2. Pilih Custom training (advanced).

    Klik Lanjutkan.

  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, Anda dapat menentukan URI Cloud Storage 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.

    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 Hyperparameter tuning, pilih kotak centang Enable hyperparameter tuning, lalu tentukan setelan berikut:

    1. Di bagian New Hyperparameter, tentukan Parameter name dan Type dari hyperparameter yang ingin Anda sesuaikan. Bergantung pada jenis yang Anda tentukan, konfigurasikan setelan hyperparameter tambahan yang muncul.

      Pelajari jenis hyperparameter dan konfigurasinya lebih lanjut.

    2. Jika Anda ingin menyesuaikan lebih dari satu hyperparameter, klik Add new parameter dan ulangi langkah sebelumnya di bagian baru yang muncul.

      Ulangi langkah ini untuk setiap hyperparameter yang ingin Anda sesuaikan.

    3. Di kolom Metric to optimize dan menu drop-down Goal, tentukan nama dan sasaran metrik yang ingin Anda optimalkan

    4. Di kolom Maximum number of trials, tentukan jumlah uji coba maksimum yang Anda inginkan agar dijalankan Vertex AI untuk tugas penyesuaian hyperparameter Anda.

    5. Di kolom Maximum number of parallel trials, tentukan jumlah uji coba maksimum agar Vertex AI berjalan secara bersamaan.

    6. Di menu drop-down SearchAlgorithm, tentukan algoritma penelusuran untuk digunakan oleh Vertex AI.

    7. Abaikan tombol Enable early stopping, yang tidak akan berpengaruh.

    Klik Lanjutkan.

  7. Pada langkah Compute and Pricing, 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 Continue.

  8. Pada langkah Prediction container, pilih No prediction container.

  9. Klik Start training untuk memulai pipeline pelatihan kustom.

gcloud

Langkah-langkah berikut menunjukkan cara menggunakan Google Cloud CLI untuk membuat HyperparameterTuningJob dengan konfigurasi yang relatif minimal. Untuk mempelajari semua opsi konfigurasi yang dapat Anda gunakan untuk tugas ini, lihat dokumentasi referensi untukperintah gcloud ai hp-tuning-jobs create dan Resource API HyperparameterTuningJob.

  1. Buat file YAML bernama config.yaml dengan beberapa kolom API yang ingin ditentukan untuk HyerparameterTuningJob baru Anda:

    config.yaml
    studySpec:
      metrics:
      - metricId: METRIC_ID
        goal: METRIC_GOAL
      parameters:
      - parameterId: HYPERPARAMETER_ID
        doubleValueSpec:
          minValue: DOUBLE_MIN_VALUE
          maxValue: DOUBLE_MAX_VALUE
    trialJobSpec:
      workerPoolSpecs:
        - machineSpec:
            machineType: MACHINE_TYPE
          replicaCount: 1
          containerSpec:
            imageUri: CUSTOM_CONTAINER_IMAGE_URI
    

    Ganti kode berikut:

    • METRIC_ID: nama metrik hyperparameter yang akan dioptimalkan. Kode pelatihan Anda harus melaporkan metrik ini saat dijalankan.

    • METRIC_GOAL: sasaran untuk metrik hyperparameter Anda, MAXIMIZE atau MINIMIZE.

    • HYPERPARAMETER_ID: nama hyperparameter yang akan disesuaikan. Kode pelatihan Anda harus mengurai flag command line dengan nama ini. Untuk contoh ini, hyperparameter harus menggunakan nilai floating point. Pelajari jenis data hyperparameter lainnya.

    • DOUBLE_MIN_VALUE: Nilai minimum (angka) yang Anda inginkan untuk dicoba oleh Vertex AI untuk hyperparameter ini.

    • DOUBLE_MAX_VALUE: Nilai maksimum (angka) yang Anda inginkan untuk dicoba oleh Vertex AI untuk hyperparameter ini.

    • MACHINE_TYPE: jenis VM yang akan digunakan untuk pelatihan.

    • CUSTOM_CONTAINER_IMAGE_URI: URI image container Docker dengan kode pelatihan Anda. Pelajari cara membuat image container kustom.

      Untuk contoh ini, Anda harus menggunakan penampung kustom. Resource HyperparameterTuningJob juga mendukung kode pelatihan dalam distribusi sumber Python, bukan container kustom.

  2. Dalam direktori yang sama dengan file config.yaml Anda, jalankan perintah shell berikut:

    gcloud ai hp-tuning-jobs create \
        --region=LOCATION \
        --display-name=DISPLAY_NAME \
        --max-trial-count=MAX_TRIAL_COUNT \
        --parallel-trial-count=PARALLEL_TRIAL_COUNT \
        --config=config.yaml
    

    Ganti kode berikut:

REST

Gunakan contoh kode berikut untuk membuat tugas penyesuaian hyperparameter menggunakan metode create dari resource hyperparameterTuningJob.

Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

  • LOCATION: region tempat Anda ingin membuat HyperparameterTuningJob. Gunakan region yang mendukung pelatihan kustom.
  • PROJECT: Project ID Anda.
  • DISPLAY_NAME: nama tampilan pilihan Anda yang mudah diingat untuk HyperparameterTuningJob. Pelajari persyaratan nama resource.
  • Tentukan metrik:
  • Tentukan hyperparameter Anda:
    • HYPERPARAMETER_ID: nama hyperparameter yang akan disesuaikan. Kode pelatihan Anda harus mengurai flag command line dengan nama ini.
    • PARAMETER_SCALE: (Opsional.) Cara 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 DOUBLE, tentukan nilai minimum (DOUBLE_MIN_VALUE) dan maksimum (DOUBLE_MAX_VALUE) untuk hyperparameter ini.
    • Jika jenis hyperparameter ini adalah INTEGER, tentukan nilai minimum (INTEGER_MIN_VALUE) dan maksimum (INTEGER_MAX_VALUE) untuk hyperparameter ini.
    • Jika jenis hyperparameter ini adalah CATEGORIAL, tentukan nilai yang dapat diterima (CATEGORICAL_VALUES) sebagai array string.
    • Jika jenis hyperparameter ini adalah DISCRETE, tentukan nilai yang dapat diterima (DISCRETE_VALUES) sebagai array angka.
    • Menentukan hyperparameter bersyarat. Hyperparameter bersyarat ditambahkan ke uji coba jika nilai hyperparameter induk cocok dengan kondisi yang Anda tentukan. Pelajari hyperparameter bersyarat lebih lanjut.
      • CONDITIONAL_PARAMETER: ParameterSpec parameter bersyarat. Spesifikasi ini mencakup nama parameter, skala, rentang nilai, dan parameter bersyarat yang bergantung pada hyperparameter ini.
      • Jika jenis hyperparameter induk adalah INTEGER, tentukan daftar bilangan bulat sebagai INTEGERS_TO_MATCH. Jika nilai hyperparameter induk cocok dengan salah satu nilai yang ditentukan, parameter bersyarat ini akan ditambahkan ke uji coba.
      • Jika jenis hyperparameter induk adalah CATEGORIAL, tentukan daftar kategori sebagai CATEGORIES_TO_MATCH. Jika nilai hyperparameter induk cocok dengan salah satu nilai yang ditentukan, parameter bersyarat ini akan ditambahkan ke uji coba.
      • Jika jenis hyperparameter induk adalah DISCRETE, tentukan daftar bilangan bulat sebagai DISCRETE_VALUES_TO_MATCH. Jika nilai hyperparameter induk cocok dengan salah satu nilai yang ditentukan, parameter bersyarat ini akan ditambahkan ke uji coba.
  • ALGORITHM: (Opsional.) Algoritma 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.
  • PARALLEL_TRIAL_COUNT: jumlah uji coba maksimum untuk 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 VM yang akan digunakan 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 Docker dengan kode pelatihan Anda. Pelajari cara membuat image container kustom.
      • 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. Pelajari lebih lanjut container bawaan 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.
    • SERVICE_ACCOUNT: (Opsional.) Akun layanan yang akan digunakan Vertex AI untuk menjalankan kode Anda. Pelajari lebih lanjut cara melampirkan akun layanan kustom.
    • 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.

Metode HTTP dan URL:

POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT/locations/LOCATION/hyperparameterTuningJobs

Meminta isi JSON:

{
  "displayName": DISPLAY_NAME,
  "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.

        "conditionalParameterSpecs": [
            "parameterSpec": {
              CONDITIONAL_PARAMETER
            }

            // Union field parent_value_condition can be only one of the following:
            "parentIntValues": {
                "values": [INTEGERS_TO_MATCH]
            }
            "parentCategoricalValues": {
                "values": [CATEGORIES_TO_MATCH]
            }
            "parentDiscreteValues": {
                "values": [DISCRETE_VALUES_TO_MATCH]
            }
            // End of list of possible types for union field parent_value_condition.
        ]
      }
    ],
    "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
      },
      "serviceAccount": SERVICE_ACCOUNT
  },
  "labels": {
    LABEL_NAME_1": LABEL_VALUE_1,
    LABEL_NAME_2": LABEL_VALUE_2
  }
}

Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:

Anda akan menerima respons JSON yang mirip dengan yang berikut ini:

{
  "name": "projects/12345/locations/us-central1/hyperparameterTuningJobs/6789",
  "displayName": "myHyperparameterTuningJob",
  "studySpec": {
    "metrics": [
      {
        "metricId": "myMetric",
        "goal": "MINIMIZE"
      }
    ],
    "parameters": [
      {
        "parameterId": "myParameter1",
        "integerValueSpec": {
          "minValue": "1",
          "maxValue": "128"
        },
        "scaleType": "UNIT_LINEAR_SCALE"
      },
      {
        "parameterId": "myParameter2",
        "doubleValueSpec": {
          "minValue": 1e-07,
          "maxValue": 1
        },
        "scaleType": "UNIT_LINEAR_SCALE"
      }
    ],
    "ALGORITHM": "RANDOM_SEARCH"
  },
  "maxTrialCount": 20,
  "parallelTrialCount": 1,
  "trialJobSpec": {
    "workerPoolSpecs": [
      {
        "machineSpec": {
          "machineType": "n1-standard-4"
        },
        "replicaCount": "1",
        "pythonPackageSpec": {
          "executorImageUri": "us-docker.pkg.dev/vertex-ai/training/training-tf-cpu.2-1:latest",
          "packageUris": [
            "gs://my-bucket/my-training-application/trainer.tar.bz2"
          ],
          "pythonModule": "my-trainer.trainer"
        }
      }
    ]
  }
}

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.CustomJobSpec;
import com.google.cloud.aiplatform.v1.HyperparameterTuningJob;
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.PythonPackageSpec;
import com.google.cloud.aiplatform.v1.StudySpec;
import com.google.cloud.aiplatform.v1.StudySpec.MetricSpec;
import com.google.cloud.aiplatform.v1.StudySpec.MetricSpec.GoalType;
import com.google.cloud.aiplatform.v1.StudySpec.ParameterSpec;
import com.google.cloud.aiplatform.v1.StudySpec.ParameterSpec.ConditionalParameterSpec;
import com.google.cloud.aiplatform.v1.StudySpec.ParameterSpec.ConditionalParameterSpec.DiscreteValueCondition;
import com.google.cloud.aiplatform.v1.StudySpec.ParameterSpec.DiscreteValueSpec;
import com.google.cloud.aiplatform.v1.StudySpec.ParameterSpec.DoubleValueSpec;
import com.google.cloud.aiplatform.v1.StudySpec.ParameterSpec.ScaleType;
import com.google.cloud.aiplatform.v1.WorkerPoolSpec;
import java.io.IOException;
import java.util.Arrays;

public class CreateHyperparameterTuningJobPythonPackageSample {

  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 executorImageUri = "EXECUTOR_IMAGE_URI";
    String packageUri = "PACKAGE_URI";
    String pythonModule = "PYTHON_MODULE";
    createHyperparameterTuningJobPythonPackageSample(
        project, displayName, executorImageUri, packageUri, pythonModule);
  }

  static void createHyperparameterTuningJobPythonPackageSample(
      String project,
      String displayName,
      String executorImageUri,
      String packageUri,
      String pythonModule)
      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. After completing all of your requests, call
    // the "close" method on the client to safely clean up any remaining background resources.
    try (JobServiceClient client = JobServiceClient.create(settings)) {
      // study spec
      MetricSpec metric =
          MetricSpec.newBuilder().setMetricId("val_rmse").setGoal(GoalType.MINIMIZE).build();

      // decay
      DoubleValueSpec doubleValueSpec =
          DoubleValueSpec.newBuilder().setMinValue(1e-07).setMaxValue(1).build();
      ParameterSpec parameterDecaySpec =
          ParameterSpec.newBuilder()
              .setParameterId("decay")
              .setDoubleValueSpec(doubleValueSpec)
              .setScaleType(ScaleType.UNIT_LINEAR_SCALE)
              .build();
      Double[] decayValues = {32.0, 64.0};
      DiscreteValueCondition discreteValueDecay =
          DiscreteValueCondition.newBuilder().addAllValues(Arrays.asList(decayValues)).build();
      ConditionalParameterSpec conditionalParameterDecay =
          ConditionalParameterSpec.newBuilder()
              .setParameterSpec(parameterDecaySpec)
              .setParentDiscreteValues(discreteValueDecay)
              .build();

      // learning rate
      ParameterSpec parameterLearningSpec =
          ParameterSpec.newBuilder()
              .setParameterId("learning_rate")
              .setDoubleValueSpec(doubleValueSpec) // Use the same min/max as for decay
              .setScaleType(ScaleType.UNIT_LINEAR_SCALE)
              .build();

      Double[] learningRateValues = {4.0, 8.0, 16.0};
      DiscreteValueCondition discreteValueLearning =
          DiscreteValueCondition.newBuilder()
              .addAllValues(Arrays.asList(learningRateValues))
              .build();
      ConditionalParameterSpec conditionalParameterLearning =
          ConditionalParameterSpec.newBuilder()
              .setParameterSpec(parameterLearningSpec)
              .setParentDiscreteValues(discreteValueLearning)
              .build();

      // batch size
      Double[] batchSizeValues = {4.0, 8.0, 16.0, 32.0, 64.0, 128.0};

      DiscreteValueSpec discreteValueSpec =
          DiscreteValueSpec.newBuilder().addAllValues(Arrays.asList(batchSizeValues)).build();
      ParameterSpec parameter =
          ParameterSpec.newBuilder()
              .setParameterId("batch_size")
              .setDiscreteValueSpec(discreteValueSpec)
              .setScaleType(ScaleType.UNIT_LINEAR_SCALE)
              .addConditionalParameterSpecs(conditionalParameterDecay)
              .addConditionalParameterSpecs(conditionalParameterLearning)
              .build();

      // trial_job_spec
      MachineSpec machineSpec =
          MachineSpec.newBuilder()
              .setMachineType("n1-standard-4")
              .setAcceleratorType(AcceleratorType.NVIDIA_TESLA_K80)
              .setAcceleratorCount(1)
              .build();

      PythonPackageSpec pythonPackageSpec =
          PythonPackageSpec.newBuilder()
              .setExecutorImageUri(executorImageUri)
              .addPackageUris(packageUri)
              .setPythonModule(pythonModule)
              .build();

      WorkerPoolSpec workerPoolSpec =
          WorkerPoolSpec.newBuilder()
              .setMachineSpec(machineSpec)
              .setReplicaCount(1)
              .setPythonPackageSpec(pythonPackageSpec)
              .build();

      StudySpec studySpec =
          StudySpec.newBuilder()
              .addMetrics(metric)
              .addParameters(parameter)
              .setAlgorithm(StudySpec.Algorithm.RANDOM_SEARCH)
              .build();
      CustomJobSpec trialJobSpec =
          CustomJobSpec.newBuilder().addWorkerPoolSpecs(workerPoolSpec).build();
      // hyperparameter_tuning_job
      HyperparameterTuningJob hyperparameterTuningJob =
          HyperparameterTuningJob.newBuilder()
              .setDisplayName(displayName)
              .setMaxTrialCount(4)
              .setParallelTrialCount(2)
              .setStudySpec(studySpec)
              .setTrialJobSpec(trialJobSpec)
              .build();
      LocationName parent = LocationName.of(project, location);
      HyperparameterTuningJob response =
          client.createHyperparameterTuningJob(parent, hyperparameterTuningJob);
      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.

from google.cloud import aiplatform

from google.cloud.aiplatform import hyperparameter_tuning as hpt

def create_hyperparameter_tuning_job_sample(
    project: str,
    location: str,
    staging_bucket: str,
    display_name: str,
    container_uri: str,
):
    aiplatform.init(project=project, location=location, staging_bucket=staging_bucket)

    worker_pool_specs = [
        {
            "machine_spec": {
                "machine_type": "n1-standard-4",
                "accelerator_type": "NVIDIA_TESLA_K80",
                "accelerator_count": 1,
            },
            "replica_count": 1,
            "container_spec": {
                "image_uri": container_uri,
                "command": [],
                "args": [],
            },
        }
    ]

    custom_job = aiplatform.CustomJob(
        display_name='custom_job',
        worker_pool_specs=worker_pool_specs,
    )

    hpt_job = aiplatform.HyperparameterTuningJob(
        display_name=display_name,
        custom_job=custom_job,
        metric_spec={
            'loss': 'minimize',
        },
        parameter_spec={
            'lr': hpt.DoubleParameterSpec(min=0.001, max=0.1, scale='log'),
            'units': hpt.IntegerParameterSpec(min=4, max=128, scale='linear'),
            'activation': hpt.CategoricalParameterSpec(values=['relu', 'selu']),
            'batch_size': hpt.DiscreteParameterSpec(values=[128, 256], scale='linear')
        },
        max_trial_count=128,
        parallel_trial_count=8,
        labels={'my_key': 'my_value'},
    )

    hpt_job.run()

    print(hpt_job.resource_name)
    return hpt_job

Konfigurasi tugas pelatihan hyperparameter

Tugas penyesuaian hyperparameter menelusuri kombinasi hyperparameter terbaik untuk mengoptimalkan metrik Anda. Tugas penyesuaian hyperparameter melakukannya dengan menjalankan beberapa uji coba aplikasi pelatihan Anda dengan kumpulan hyperparameter yang berbeda.

Saat mengonfigurasi tugas penyesuaian hyperparameter, Anda harus menentukan detail berikut:

Membatasi jumlah uji coba

Tentukan jumlah uji coba yang ingin Anda izinkan untuk menjalankan layanan, dan tetapkan nilai maxTrialCount dalam objek HyperparameterTuningJob.

Ada dua minat yang bersaing untuk dipertimbangkan saat memutuskan jumlah uji coba yang diizinkan:

  • waktu (dan oleh karena itu biaya)
  • akurasi

Meningkatkan jumlah uji coba umumnya memberikan hasil yang lebih baik, tetapi tidak selalu demikian. Biasanya, ada titik penurunan laba, yang setelahnya uji coba tambahan memiliki sedikit atau tidak berpengaruh pada akurasi. Sebelum memulai tugas dengan jumlah uji coba yang besar, sebaiknya Anda memulai dengan sedikit uji coba untuk mengukur efek hyperparameter yang Anda pilih terhadap akurasi model.

Untuk mendapatkan hasil maksimal dari penyesuaian hyperparameter, Anda tidak boleh menetapkan nilai maksimum lebih rendah dari sepuluh kali jumlah hyperparameter yang digunakan.

Uji coba paralel

Anda dapat menentukan banyaknya uji coba yang dapat dijalankan secara paralel dengan menetapkan parallelTrialCount di HyperparameterTuningJob.

Menjalankan uji coba paralel memiliki manfaat mengurangi waktu yang dibutuhkan tugas pelatihan (real time—total waktu pemrosesan yang diperlukan biasanya tidak berubah). Namun, menjalankan tugas secara paralel dapat mengurangi efektivitas tugas penyesuaian secara keseluruhan. Hal ini karena penyesuaian hyperparameter menggunakan hasil uji coba sebelumnya untuk menginformasikan nilai yang akan ditetapkan ke hyperparameter dari uji coba berikutnya. Saat berjalan secara paralel, beberapa uji coba dimulai tanpa mendapatkan manfaat dari hasil uji coba yang masih berjalan.

Jika Anda menggunakan uji coba paralel, layanan penyesuaian hyperparameter akan menyediakan beberapa cluster pemrosesan pelatihan (atau beberapa mesin individual untuk pelatih proses tunggal). Spesifikasi kumpulan pekerjaan yang Anda tetapkan untuk tugas digunakan untuk setiap cluster pelatihan.

Menangani uji coba yang gagal

Jika uji coba penyesuaian hyperparameter Anda keluar dengan error, Anda mungkin ingin mengakhiri tugas pelatihan lebih awal. Tetapkan kolom maxFailedTrialCount di HyperparameterTuningJob ke jumlah uji coba gagal yang ingin Anda izinkan. Setelah jumlah uji coba ini gagal, Vertex AI akan mengakhiri tugas pelatihan. Nilai maxFailedTrialCount harus kurang dari atau sama dengan maxTrialCount.

Jika maxFailedTrialCount tidak ditetapkan, atau jika Anda menetapkannya ke 0, Vertex AI akan menggunakan aturan berikut untuk menangani uji coba yang gagal:

  • Jika uji coba pertama tugas Anda gagal, Vertex AI akan langsung mengakhiri tugas Anda. Kegagalan selama uji coba pertama menunjukkan adanya masalah pada kode pelatihan Anda, sehingga uji coba berikutnya juga mungkin akan gagal. Dengan mengakhiri tugas, Anda dapat mendiagnosis masalah tanpa menunggu uji coba lebih banyak dan menimbulkan biaya yang lebih besar.
  • Jika uji coba pertama berhasil, Vertex AI mungkin akan mengakhiri tugas setelah gagal selama uji coba berikutnya berdasarkan salah satu kriteria berikut:
    • Jumlah uji coba yang gagal bertambah terlalu tinggi.
    • Rasio uji coba yang gagal terhadap uji coba yang berhasil meningkat terlalu tinggi.

Aturan ini dapat berubah sewaktu-waktu. Untuk memastikan perilaku tertentu, tetapkan kolom maxFailedTrialCount.

Mengelola tugas penyesuaian hyperparameter

Bagian berikut menjelaskan cara mengelola tugas penyesuaian hyperparameter Anda.

Mengambil informasi tentang tugas penyesuaian hyperparameter

Contoh kode berikut menunjukkan cara mengambil tugas penyesuaian hyperparameter.

gcloud

Gunakan perintah gcloud ai hp-tuning-jobs describe:

gcloud ai hp-tuning-jobs describe ID_OR_NAME \
    --region=LOCATION

Ganti kode berikut:

  • ID_OR_NAME: baik nama atau ID numerik HyperparameterTuningJob. (ID adalah bagian terakhir dari nama.)

    Anda mungkin telah melihat ID atau nama saat membuat HyperparameterTuningJob. Jika tidak mengetahui ID atau nama tersebut, Anda dapat menjalankan perintah gcloud ai hp-tuning-jobs list dan mencari resource yang sesuai.

  • LOCATION: region tempat HyperparameterTuningJob dibuat.

REST

Gunakan contoh kode berikut untuk mengambil tugas penyesuaian hyperparameter menggunakan metode get dari resource hyperparameterTuningJob.

Sebelum menggunakan data permintaan apa pun, lakukan penggantian sebagai berikut:

  • LOCATION: region tempat HyperparameterTuningJob dibuat.
  • NAME: Nama tugas penyesuaian hyperparameter. Nama tugas menggunakan projects/{project}/LOCATIONS/{LOCATION}/hyperparameterTuningJobs/{hyperparameterTuningJob} format berikut.

Metode HTTP dan URL:

GET https://LOCATION-aiplatform.googleapis.com/v1/NAME

Untuk mengirim permintaan, perluas salah satu opsi berikut:

Anda akan menerima respons JSON yang mirip seperti berikut:

{
  "name": "projects/12345/LOCATIONs/us-central1/hyperparameterTuningJobs/6789",
  "displayName": "my-hyperparameter-tuning-job",
  "studySpec": {
    "metrics": [
      {
        "metricId": "my_metric",
        "goal": "MINIMIZE"
      }
    ],
    "parameters": [
      {
        "parameterId": "my_parameter",
        "doubleValueSpec": {
          "minValue": 1e-05,
          "maxValue": 1
        }
      }
    ]
  },
  "maxTrialCount": 3,
  "parallelTrialCount": 1,
  "trialJobSpec": {
    "workerPoolSpecs": [
      {
        "machineSpec": {
          "machineType": "n1-standard-4"
        },
        "replicaCount": "1",
        "pythonPackageSpec": {
          "executorImageUri": "us-docker.pkg.dev/vertex-ai/training/training-tf-cpu.2-1:latest",
          "packageUris": [
            "gs://my-bucket/my-training-application/trainer.tar.bz2"
          ],
          "pythonModule": "my-trainer.trainer"
        }
      }
    ]
  },
  "trials": [
    {
      "id": "2",
      "state": "SUCCEEDED",
      "parameters": [
        {
          "parameterId": "my_parameter",
          "value": 0.71426874725564571
        }
      ],
      "finalMeasurement": {
        "stepCount": "2",
        "metrics": [
          {
            "metricId": "my_metric",
            "value": 0.30007445812225342
          }
        ]
      },
      "startTime": "2020-09-09T23:39:15.549112551Z",
      "endTime": "2020-09-09T23:47:08Z"
    },
    {
      "id": "3",
      "state": "SUCCEEDED",
      "parameters": [
        {
          "parameterId": "my_parameter",
          "value": 0.3078893356622992
        }
      ],
      "finalMeasurement": {
        "stepCount": "2",
        "metrics": [
          {
            "metricId": "my_metric",
            "value": 0.30000102519989014
          }
        ]
      },
      "startTime": "2020-09-09T23:49:22.451699360Z",
      "endTime": "2020-09-09T23:57:15Z"
    },
    {
      "id": "1",
      "state": "SUCCEEDED",
      "parameters": [
        {
          "parameterId": "my_parameter",
          "value": 0.500005
        }
      ],
      "finalMeasurement": {
        "stepCount": "2",
        "metrics": [
          {
            "metricId": "my_metric",
            "value": 0.30005377531051636
          }
        ]
      },
      "startTime": "2020-09-09T23:23:12.283374629Z",
      "endTime": "2020-09-09T23:36:56Z"
    }
  ],
  "state": "JOB_STATE_SUCCEEDED",
  "createTime": "2020-09-09T23:22:31.777386Z",
  "startTime": "2020-09-09T23:22:34Z",
  "endTime": "2020-09-10T01:31:24.271307Z",
  "updateTime": "2020-09-10T01:31:24.271307Z"
}

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.HyperparameterTuningJob;
import com.google.cloud.aiplatform.v1.HyperparameterTuningJobName;
import com.google.cloud.aiplatform.v1.JobServiceClient;
import com.google.cloud.aiplatform.v1.JobServiceSettings;
import java.io.IOException;

public class GetHyperparameterTuningJobSample {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    String project = "PROJECT";
    String hyperparameterTuningJobId = "HYPERPARAMETER_TUNING_JOB_ID";
    getHyperparameterTuningJobSample(project, hyperparameterTuningJobId);
  }

  static void getHyperparameterTuningJobSample(String project, String hyperparameterTuningJobId)
      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. After completing all of your requests, call
    // the "close" method on the client to safely clean up any remaining background resources.
    try (JobServiceClient client = JobServiceClient.create(settings)) {
      HyperparameterTuningJobName name =
          HyperparameterTuningJobName.of(project, location, hyperparameterTuningJobId);
      HyperparameterTuningJob response = client.getHyperparameterTuningJob(name);
      System.out.format("response: %s\n", response);
    }
  }
}

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.

# Copyright 2022 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

from google.cloud import aiplatform

def get_hyperparameter_tuning_job_sample(
    project: str,
    hyperparameter_tuning_job_id: str,
    location: str = "us-central1",
):

    aiplatform.init(project=project, location=location)

    hpt_job = aiplatform.HyperparameterTuningJob.get(
        resource_name=hyperparameter_tuning_job_id,
    )

    return hpt_job

Membatalkan tugas penyesuaian hyperparameter

Contoh kode berikut menunjukkan cara membatalkan tugas penyesuaian hyperparameter.

gcloud

Gunakan perintah gcloud ai hp-tuning-jobs cancel:

gcloud ai hp-tuning-jobs cancel ID_OR_NAME \
    --region=LOCATION

Ganti kode berikut:

  • ID_OR_NAME: baik nama atau ID numerik HyperparameterTuningJob. (ID adalah bagian terakhir dari nama.)

    Anda mungkin telah melihat ID atau nama saat membuat HyperparameterTuningJob. Jika tidak mengetahui ID atau nama tersebut, Anda dapat menjalankan perintah gcloud ai hp-tuning-jobs list dan mencari resource yang sesuai.

  • LOCATION: region tempat HyperparameterTuningJob dibuat.

REST

Gunakan contoh kode berikut untuk membatalkan tugas penyesuaian hyperparameter menggunakan metode cancel dari resource hyperparameterTuningJob.

Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

  • LOCATION: region tempat HyperparameterTuningJob dibuat.
  • NAME: Nama tugas penyesuaian hyperparameter. Nama tugas menggunakan projects/{project}/locations/{location}/hyperparameterTuningJobs/{hyperparameterTuningJob} format berikut.

Metode HTTP dan URL:

POST https://LOCATION-aiplatform.googleapis.com/v1/NAME:cancel

Untuk mengirim permintaan, perluas salah satu opsi berikut:

Anda akan menerima kode status yang berhasil (2xx), serta respons yang kosong.

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 cancel_hyperparameter_tuning_job_sample(
    project: str,
    hyperparameter_tuning_job_id: str,
    location: str = "us-central1",
):

    aiplatform.init(project=project, location=location)

    hpt_job = aiplatform.HyperparameterTuningJob.get(
        resource_name=hyperparameter_tuning_job_id,
    )

    hpt_job.cancel()

Menghapus tugas penyesuaian hyperparameter

Contoh kode berikut menunjukkan cara menghapus tugas penyesuaian hyperparameter menggunakan Vertex AI SDK untuk Python dan REST API.

REST

Gunakan contoh kode berikut untuk menghapus tugas penyesuaian hyperparameter menggunakan metode delete dari resource hyperparameterTuningJob.

Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

  • LOCATION: Region Anda.
  • NAME: Nama tugas penyesuaian hyperparameter. Nama tugas menggunakan projects/{project}/LOCATIONs/{LOCATION}/hyperparameterTuningJobs/{hyperparameterTuningJob} format berikut.

Metode HTTP dan URL:

DELETE https://LOCATION-aiplatform.googleapis.com/v1/NAME

Untuk mengirim permintaan, perluas salah satu opsi berikut:

Anda akan menerima kode status yang berhasil (2xx), serta respons yang kosong.

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 delete_hyperparameter_tuning_job_sample(
    project: str,
    hyperparameter_tuning_job_id: str,
    location: str = "us-central1",
):

    aiplatform.init(project=project, location=location)

    hpt_job = aiplatform.HyperparameterTuningJob.get(
        resource_name=hyperparameter_tuning_job_id,
    )

    hpt_job.delete()

Langkah selanjutnya