Menyimpan data dalam container dan menjalankan kode pelatihan secara lokal

Anda dapat menggunakan perintah gcloud ai custom-jobs local-run untuk membangun image container Docker berdasarkan kode pelatihan dan menjalankan image tersebut sebagai container di komputer lokal. Fitur ini menawarkan beberapa manfaat:

  • Anda dapat membangun image container walau tidak mengetahui banyak hal tentang Docker. Anda tidak perlu menulis Dockerfile Anda sendiri. Nantinya Anda dapat mengirim image ini ke Artifact Registry dan menggunakannya untuk pelatihan container kustom.

    Untuk kasus penggunaan lanjutan, Anda mungkin sebaiknya menulis Dockerfile Anda sendiri.

  • Image container Anda dapat menjalankan aplikasi pelatihan Python atau skrip Bash.

    Anda dapat menggunakan skrip Bash untuk menjalankan kode pelatihan yang ditulis dalam bahasa pemrograman lain (selama Anda juga menentukan image container dasar yang mendukung bahasa lain).

  • Menjalankan container secara lokal akan mengeksekusi kode pelatihan dengan cara yang sama seperti saat berjalan di Vertex AI.

    Menjalankan kode secara lokal dapat membantu Anda men-debug masalah pada kode sebelum melakukan pelatihan kustom di Vertex AI.

Sebelum memulai

  1. Siapkan lingkungan pengembangan Vertex AI Anda.

  2. Instal Docker Engine.

  3. Jika Anda menggunakan Linux, konfigurasi Docker agar Anda dapat menjalankannya tanpa sudo.

    Perintah local-run memerlukan konfigurasi ini untuk menggunakan Docker.

Menggunakan perintah local-run.

Jalankan perintah berikut untuk membangun image container berdasarkan kode pelatihan dan jalankan container secara lokal:

gcloud ai custom-jobs local-run \
  --executor-image-uri=BASE_IMAGE_URI \
  --local-package-path=WORKING_DIRECTORY \
  --script=SCRIPT_PATH \
  --output-image-uri=OUTPUT_IMAGE_NAME

Ganti kode berikut:

  • BASE_IMAGE_URI: URI image Docker yang akan digunakan sebagai dasar container. Pilih image dasar yang menyertakan dependensi yang diperlukan untuk kode pelatihan Anda.

    Anda dapat menggunakan URI ke image container pelatihan bawaan atau nilai lain yang akan valid untuk petunjuk FROM Dockerfile; misalnya, image Docker yang tersedia secara publik atau image Docker di Artifact Registry yang dapat Anda akses.

  • WORKING_DIRECTORY: Direktori level terendah di sistem file yang berisi semua kode pelatihan dan dependensi lokal yang perlu Anda gunakan untuk pelatihan.

    Secara default, perintah ini hanya menyalin direktori induk dari file yang ditentukan oleh flag --script (lihat item daftar berikut) ke dalam image Docker yang dihasilkan. Image Docker tidak selalu menyertakan semua file dalam WORKING_DIRECTORY; untuk menyesuaikan file mana yang disertakan, lihat bagian dalam dokumen ini tentang menyertakan dependensi.

    Jika Anda menghilangkan flag --local-package-path (dan placeholder ini), perintah local-run akan menggunakan direktori kerja saat ini untuk nilai ini.

  • SCRIPT_PATH: Jalur, relatif terhadap WORKING_DIRECTORY pada sistem file lokal, ke skrip yang merupakan titik entri untuk kode pelatihan Anda. Ini dapat berupa skrip Python (diakhiri dengan .py) atau skrip Bash.

    Misalnya, jika Anda ingin menjalankan /hello-world/trainer/task.py dan WORKING_DIRECTORY adalah /hello-world, gunakan trainer/task.py untuk nilai ini.

    Jika Anda menentukan skrip Python, image dasar harus sudah menginstal Python, dan jika Anda menentukan skrip bash, image dasar harus sudah menginstal Bash. (Semua container pelatihan bawaan dan banyak image Docker lain yang tersedia secara publik menyertakan kedua dependensi ini.)

    Gunakan --python-module, bukan --script

    Jika menghilangkan flag --script (dan SCRIPT_PATH), Anda harus menggunakan flag --python-module untuk menentukan nama modul Python di WORKING_DIRECTORY agar dapat dijalankan sebagai titik entri untuk pelatihan. Misalnya, sebagai ganti --script=trainer/task.py, Anda dapat menentukan --python-module=trainer.task.

    Dalam hal ini, container Docker yang dihasilkan akan memuat kode Anda sebagai modul, bukan sebagai skrip. Sebaiknya gunakan opsi ini jika skrip titik entri Anda mengimpor modul Python lainnya di WORKING_DIRECTORY.

  • OUTPUT_IMAGE_NAME: Nama untuk image Docker yang dihasilkan, yang dibuat oleh perintah tersebut. Anda dapat menggunakan nilai apa pun yang diterima oleh flag -t docker build.

    Jika Anda berencana mengirim image ke Artifact Registry, sebaiknya gunakan nama image yang memenuhi persyaratan Artifact Registry. Jika Anda berencana mengirim image ke Container Registry, sebaiknya gunakan nama image yang memenuhi persyaratan Container Registry. (Atau, Anda dapat memberi tag pada image dengan nama tambahan nanti).

    Jika Anda menghilangkan flag --output-image-uri (dan placeholder ini), perintah local-run akan memberi tag pada image dengan nama berdasarkan waktu saat ini dan nama file dari skrip titik entri Anda.

Perintah ini membangun image container Docker berdasarkan konfigurasi Anda. Setelah membangun image, perintah akan mencetak output berikut:

A training image is built.
Starting to run ...

Perintah kemudian segera menggunakan image container ini untuk menjalankan container di komputer lokal Anda. Saat container ditutup, perintah akan mencetak output berikut:

A local run is finished successfully using custom image: OUTPUT_IMAGE_NAME

Opsi tambahan

Bagian berikut menjelaskan opsi tambahan yang dapat Anda gunakan untuk menyesuaikan perilaku perintah local-run.

Menginstal dependensi

Kode pelatihan dapat bergantung pada dependensi apa pun yang diinstal pada image dasar (misalnya, image container pelatihan bawaan menyertakan banyak library Python untuk machine learning), serta file apa pun yang Anda sertakan di image Docker yang dibuat oleh perintah local-run.

Saat Anda menentukan skrip dengan flag --script atau flag --python-module, perintah tersebut akan menyalin direktori induk skrip (dan subdirektorinya) ke dalam image Docker. Misalnya, jika Anda menentukan --local-package-path=/hello-world dan --script=trainer/task.py, perintah akan menyalin /hello-world/trainer/ ke dalam image Docker.

Anda juga dapat menyertakan dependensi Python tambahan atau file arbitrer dari sistem file dengan menyelesaikan langkah-langkah tambahan yang dijelaskan di salah satu bagian berikut:

Menginstal dependensi Python tambahan

Anda dapat menyertakan dependensi Python tambahan di image Docker melalui beberapa cara:

Menggunakan file requirements.txt

Jika ada file bernama requirements.txt di direktori kerja, maka perintah local-run akan memperlakukannya sebagai file persyaratan pip dan menggunakannya untuk menginstal dependensi Python di image Docker.

Menggunakan file setup.py

Jika ada file bernama setup.py di direktori kerja, maka perintah local-run akan memperlakukannya sebagai file setup.py Python, menyalin file tersebut ke image Docker, dan menjalankan pip install di direktori di image Docker yang berisi file ini.

Misalnya, Anda dapat menambahkan argumen install_requires ke setup.py untuk menginstal dependensi Python di image Docker.

Menentukan setiap dependensi PyPI

Anda dapat menggunakan flag --requirements untuk menginstal dependensi tertentu dari PyPI di image Docker. Contoh:

gcloud ai custom-jobs local-run \
  --executor-image-uri=BASE_IMAGE_URI \
  --local-package-path=WORKING_DIRECTORY \
  --script=SCRIPT_PATH \
  --output-image-uri=OUTPUT_IMAGE_NAME \
  --requirements=REQUIREMENTS

Ganti REQUIREMENTS dengan daftar penentu persyaratan Python yang dipisahkan koma.

Menentukan dependensi Python lokal tambahan

Anda dapat menggunakan flag --extra-packages untuk menginstal dependensi Python lokal tertentu. Dependensi Python ini harus berada di direktori kerja, dan setiap dependensi harus dalam format yang didukung pip install; misalnya, file roda atau distribusi sumber Python.

Contoh:

gcloud ai custom-jobs local-run \
  --executor-image-uri=BASE_IMAGE_URI \
  --local-package-path=WORKING_DIRECTORY \
  --script=SCRIPT_PATH \
  --output-image-uri=OUTPUT_IMAGE_NAME \
  --extra-packages=LOCAL_DEPENDENCIES

Ganti LOCAL_DEPENDENCIES dengan daftar jalur file lokal yang dipisahkan koma, yang dinyatakan relatif terhadap direktori kerja.

Menyertakan file lain

Untuk menyalin direktori tambahan ke image Docker (tanpa menginstalnya sebagai dependensi Python), Anda dapat menggunakan flag --extra-dirs. Anda hanya dapat menentukan direktori pada direktori kerja. Contoh:

gcloud ai custom-jobs local-run \
  --executor-image-uri=BASE_IMAGE_URI \
  --local-package-path=WORKING_DIRECTORY \
  --script=SCRIPT_PATH \
  --output-image-uri=OUTPUT_IMAGE_NAME \
  --extra-dirs=EXTRA_DIRECTORIES

Ganti EXTRA_DIRECTORIES dengan daftar direktori lokal yang dipisahkan koma, yang dinyatakan relatif terhadap direktori kerja.

Argumen aplikasi pelatihan

Jika skrip titik entri untuk aplikasi pelatihan mengharapkan argumen command line, Anda dapat menentukannya saat menjalankan perintah local-run. Argumen ini tidak disimpan di image Docker; bukan diteruskan sebagai argumen saat image dijalankan sebagai container.

Untuk meneruskan argumen ke skrip titik entri, teruskan argumen -- yang diikuti dengan argumen skrip ke perintah local-run setelah semua flag perintah lainnya.

Misalnya, bayangkan skrip yang Anda jalankan secara lokal dengan perintah berikut:

python /hello-world/trainer/task.py \
  --learning_rate=0.1 \
  --input_data=gs://BUCKET/small-dataset/

Saat menggunakan perintah local-run, Anda dapat menggunakan flag berikut untuk menjalankan skrip di container dengan argumen yang sama:

gcloud ai custom-jobs local-run \\
  --executor-image-uri=BASE_IMAGE_URI \
  --local-package-path=/hello-world \
  --script=/trainer/task.py \
  --output-image-uri=OUTPUT_IMAGE_NAME \
  -- \
  --learning_rate=0.1 \
  --input_data=gs://BUCKET/small-dataset/

Mempercepat pelatihan model dengan GPU

Jika pada akhirnya Anda ingin men-deploy image Docker yang dibuat oleh perintah local-run ke Vertex AI dan menggunakan GPU untuk pelatihan, pastikan menulis kode pelatihan yang memanfaatkan GPU dan menggunakan image Docker yang mendukung GPU untuk nilai flag --executor-image-uri. Misalnya, Anda dapat menggunakan salah satu image container pelatihan bawaan yang mendukung GPU.

Jika komputer lokal Anda menjalankan Linux dan memiliki GPU, Anda juga dapat mengonfigurasi perintah local-run untuk menggunakan GPU saat menjalankan container secara lokal. Tindakan ini bersifat opsional, tetapi dapat berguna jika Anda ingin menguji cara kerja kode pelatihan dengan GPU. Lakukan tindakan berikut:

  1. Instal NVIDIA Container Toolkit (nvidia-docker) di komputer lokal, jika Anda belum melakukannya.

  2. Tentukan flag --gpu saat Anda menjalankan perintah local-run. Contoh:

    gcloud ai custom-jobs local-run \
      --executor-image-uri=BASE_IMAGE_URI \
      --local-package-path=WORKING_DIRECTORY \
      --script=SCRIPT_PATH \
      --output-image-uri=OUTPUT_IMAGE_NAME \
      --gpu
    

Menentukan akun layanan kustom

Secara default, saat perintah local-run menjalankan kode pelatihan di container lokal, perintah tersebut memasang kredensial Google Cloud yang tersedia di lingkungan lokal Anda melalui Kredensial Default Aplikasi (ADC) ke dalam container, sehingga kode pelatihan Anda dapat menggunakan ADC untuk autentikasi dengan kredensial yang sama. Dengan kata lain, kredensial yang tersedia oleh ADC di shell lokal juga tersedia oleh ADC ke kode saat Anda menjalankan perintah local-run.

Anda dapat menggunakan perintah gcloud auth application-default login untuk menggunakan akun pengguna untuk ADC, atau Anda dapat menyetel variabel lingkungan di shell untuk menggunakan akun layanan untuk ADC.

Jika Anda ingin container dijalankan dengan kredensial Google Cloud selain yang disediakan oleh ADC di shell lokal, lakukan hal berikut:

  1. Buat atau pilih akun layanan dengan izin yang ingin Anda berikan aksesnya kepada kode pelatihan.

  2. Download kunci akun layanan untuk akun layanan ke komputer lokal Anda.

  3. Saat menjalankan perintah local-run, tentukan flag --service-account-key-file. Contoh:

    gcloud ai custom-jobs local-run \
      --executor-image-uri=BASE_IMAGE_URI \
      --local-package-path=WORKING_DIRECTORY \
      --script=SCRIPT_PATH \
      --output-image-uri=OUTPUT_IMAGE_NAME \
      --service-account-key-file=KEY_PATH
    

    Ganti KEY_PATH dengan jalur ke kunci akun layanan di sistem file lokal Anda. Hal ini harus bersifat mutlak atau relatif terhadap direktori kerja shell saat ini, tidak relatif dengan direktori yang ditentukan oleh flag --local-package-path.

Dalam container yang dihasilkan, kode pelatihan Anda dapat menggunakan ADC untuk melakukan autentikasi dengan Kredensial Akun Layanan yang ditentukan.

Perbandingan dengan pelatihan di Vertex AI

Saat Anda melakukan pelatihan kustom di Vertex AI, Vertex AI akan menggunakan Agen Layanan Kode Kustom Vertex AI untuk project Anda secara default untuk menjalankan kode. Anda juga dapat melampirkan akun layanan lain untuk pelatihan kustom.

Ketika menggunakan perintah local-run, Anda tidak dapat melakukan autentikasi sebagai Agen Layanan Kode Kustom Vertex AI, tetapi Anda dapat membuat akun layanan dengan izin serupa dan menggunakannya secara lokal.

Langkah selanjutnya