Menggunakan Vertex AI TensorBoard dengan pelatihan kustom

Saat melatih model menggunakan pelatihan khusus, Anda dapat menyiapkan tugas pelatihan agar otomatis mengupload log Vertex AI TensorBoard ke Vertex AI TensorBoard.

Anda dapat menggunakan integrasi ini untuk memantau pelatihan secara mendekati real-time saat Vertex AI TensorBoard mengalirkan log Vertex AI TensorBoard yang ditulis ke Cloud Storage.

Untuk penyiapan awal, lihat Menyiapkan Vertex AI TensorBoard.

Perubahan pada skrip pelatihan Anda

Skrip pelatihan Anda harus dikonfigurasi untuk menulis log TensorBoard ke bucket Cloud Storage, tempat Vertex AI Training Service akan otomatis tersedia melalui variabel lingkungan yang telah ditetapkan, yaitu AIP_TENSORBOARD_LOG_DIR.

Hal ini biasanya dapat dilakukan dengan menyediakan os.environ['AIP_TENSORBOARD_LOG_DIR'] sebagai direktori log bagi API penulisan log TensorBoard open source. Lokasi AIP_TENSORBOARD_LOG_DIR biasanya ditetapkan dengan variabel staging_bucket.

Untuk mengonfigurasi skrip pelatihan Anda di TensorFlow 2.x, buat callback TensorBoard dan tetapkan variabel log_dir ke os.environ['AIP_TENSORBOARD_LOG_DIR']. Callback TensorBoard kemudian disertakan dalam daftar callback model.fit TensorFlow.

  tensorboard_callback = tf.keras.callbacks.TensorBoard(
       log_dir=os.environ['AIP_TENSORBOARD_LOG_DIR'],
       histogram_freq=1
  )

  model.fit(
       x=x_train,
       y=y_train,
       epochs=epochs,
       validation_data=(x_test, y_test),
       callbacks=[tensorboard_callback],
  )
  

Pelajari lebih lanjut cara Vertex AI menetapkan variabel lingkungan di lingkungan pelatihan kustom Anda.

Membuat tugas pelatihan khusus

Contoh berikut menunjukkan cara membuat tugas pelatihan kustom Anda sendiri.

Untuk contoh mendetail tentang cara membuat tugas pelatihan khusus, lihat Pelatihan khusus Hello. Untuk mengetahui langkah-langkah dalam membangun container pelatihan khusus, lihat Membuat image container kustom untuk pelatihan.

Untuk membuat tugas pelatihan kustom, gunakan Vertex AI SDK untuk Python atau REST.

Python

Python

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

  • project: Project ID Anda. Anda dapat menemukan ID ini di halaman welcome Google Cloud Console.
  • location: Region untuk menjalankan CustomJob. Region ini harus berada di region yang sama dengan instance TensorBoard yang disediakan.
  • staging_bucket: Bucket Cloud Storage untuk melakukan staging artefak selama panggilan API, termasuk log TensorBoard.
  • display_name: Nama tampilan tugas pelatihan kustom.
  • script_path: Jalur, yang terkait dengan direktori kerja pada sistem file lokal Anda, ke skrip yang merupakan titik entri untuk kode pelatihan Anda.
  • container_uri: URI image container pelatihan dapat berupa Vertex AI. container pelatihan bawaan atau container kustom.
  • model_serving_container_image_uri: URI container penyaluran model yang cocok untuk menyajikan model yang dihasilkan oleh skrip pelatihan.
  • dataset_id: Nomor ID set data yang akan digunakan untuk pelatihan.
  • model_display_name: Nama tampilan model yang dilatih.
  • args: Argumen command line yang akan diteruskan ke skrip Python.
  • replica_count: Jumlah replika worker yang akan digunakan. Biasanya, tetapkan ke 1 untuk kumpulan pekerja pertama Anda.
  • machine_type: Jenis VM yang akan digunakan. Untuk daftar VM yang didukung, lihat Jenis mesin
  • accelerator_type: Jenis GPU yang akan dipasang ke setiap VM di kumpulan resource. Untuk mengetahui daftar GPU yang didukung, lihat GPU.
  • accelerator_count Jumlah GPU yang harus dipasang ke setiap VM di kumpulan resource. Nilai default-nya adalah 1.
  • training_fraction_split: Bagian set data yang akan digunakan untuk melatih model Anda.
  • validation_fraction_split: Bagian set data yang akan digunakan untuk memvalidasi model Anda.
  • test_fraction_split: Bagian dari set data yang akan digunakan untuk mengevaluasi model Anda.
  • sync: Apakah akan menjalankan metode ini secara sinkron.
  • tensorboard_resource_name: Nama resource instance Vertex TensorBoard tempat CustomJob akan mengupload log TensorBoard.
  • service_account: Wajib diisi saat menjalankan TensorBoard. Lihat Membuat akun layanan dengan izin yang diperlukan.

REST

Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

  • LOCATION_ID: Region Anda.
  • PROJECT_ID: Project ID Anda.
  • TENSORBOARD_INSTANCE_NAME: (Wajib) Nama lengkap instance Vertex AI TensorBoard yang sudah ada yang menyimpan log Vertex AI TensorBoard Anda:
    projects/PROJECT_ID/locations/LOCATION_ID/tensorboards/TENSORBOARD_INSTANCE_ID
    Catatan: Jika instance tensorboard bukan yang sudah ada, pembuatan customJobs akan menampilkan 404.
  • GCS_BUCKET_NAME: "${PROJECT_ID}-tensorboard-logs-${LOCATION}"
  • USER_SA_EMAIL: (Wajib) Akun layanan yang dibuat pada langkah sebelumnya, atau akun layanan Anda sendiri. "USER_SA_NAME@${PROJECT_ID}.iam.gserviceaccount.com"
  • TRAINING_CONTAINER: TRAINING_CONTAINER.
  • INVOCATION_TIMESTAMP: "$(date +'%Y%m%d-%H%M%S')"
  • JOB_NAME: "tensorboard-example-job-${INVOCATION_TIMESTAMP}"
  • BASE_OUTPUT_DIR: (Wajib) jalur Google Cloud tempat semua output pelatihan ditulis. "gs://$GCS_BUCKET_NAME/$JOB_NAME"

Metode HTTP dan URL:

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

Meminta isi JSON:

{
"displayName": JOB_NAME,
"jobSpec":{
"workerPoolSpecs":[
  {
    "replicaCount": "1",
     "machineSpec": {
        "machineType": "n1-standard-8",
      },
      "containerSpec": {
        "imageUri": TRAINING_CONTAINER,
      }
    }
  ],

  "base_output_directory": {
  "output_uri_prefix": BASE_OUTPUT_DIR,
   },
  "serviceAccount": USER_SA_EMAIL,
  "tensorboard": TENSORBOARD_INSTANCE_NAME,
  }
}

Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:

Anda akan melihat respons JSON seperti berikut:

{
  "name": "projects/PROJECT_ID/locations/LOCATION_ID/customJobs/CUSTOM_JOB_ID",
  "displayName": "DISPLAY_NAME",
  "jobSpec": {
    "workerPoolSpecs": [
      {
        "machineSpec": {
          "machineType": "n1-standard-8"
        },
        "replicaCount": "1",
        "diskSpec": {
          "bootDiskType": "pd-ssd",
          "bootDiskSizeGb": 100
        },
        "containerSpec": {
          "imageUri": "IMAGE_URI"
        }
      }
    ],
    "serviceAccount": "SERVICE_ACCOUNT",
    "baseOutputDirectory": {
      "outputUriPrefix": "OUTPUT_URI_PREFIX"
    },
    "tensorboard": "projects//locations/LOCATION_ID/tensorboards/tensorboard-id"
  },
  "state": "JOB_STATE_PENDING",
  "createTime": "CREATE-TIME",
  "updateTime": "UPDATE-TIME"
}

Langkah selanjutnya