Memantau dan men-debug pelatihan dengan shell interaktif

Halaman ini menunjukkan cara menggunakan shell interaktif untuk memeriksa container tempat kode pelatihan Anda berjalan. Anda dapat menjelajahi sistem file dan menjalankan utilitas proses debug di setiap container bawaan atau container kustom yang berjalan di Vertex AI.

Penggunaan shell interaktif untuk memeriksa container pelatihan dapat membantu Anda men-debug masalah terkait kode pelatihan atau konfigurasi Vertex AI. Misalnya, Anda dapat menggunakan shell interaktif untuk melakukan hal berikut:

  • Menjalankan alat pelacakan dan pembuatan profil.
  • Menganalisis penggunaan GPU.
  • Memeriksa izin Google Cloud yang tersedia untuk container.

Anda juga dapat menggunakan Cloud Profiler untuk men-debug performa pelatihan model untuk tugas pelatihan kustom Anda. Untuk mengetahui detailnya, lihat Membuat profil performa pelatihan model menggunakan Profiler.

Sebelum memulai

Anda dapat menggunakan shell interaktif saat melakukan pelatihan kustom dengan resource CustomJob, resource HyperparameterTuningJob, atau resource TrainingPipeline kustom. Saat menyiapkan kode pelatihan dan mengonfigurasi resource pelatihan kustom pilihan Anda, pastikan Anda memenuhi persyaratan berikut:

  • Pastikan container pelatihan Anda telah menginstal bash.

    Semua container pelatihan bawaan telah terinstal bash. Jika Anda membuat container kustom untuk pelatihan, gunakan container dasar yang menyertakan bash atau instal bash di Dockerfile Anda.

  • Lakukan pelatihan kustom di region yang mendukung shell interaktif.

  • Pastikan siapa saja yang ingin mengakses shell interaktif memiliki izin berikut untuk project Google Cloud tempat pelatihan kustom dijalankan:

    • aiplatform.customJobs.create
    • aiplatform.customJobs.get
    • aiplatform.customJobs.cancel

    Jika Anda memulai pelatihan kustom sendiri, kemungkinan besar Anda sudah memiliki izin ini dan dapat mengakses shell interaktif. Namun, jika ingin menggunakan shell interaktif untuk memeriksa resource pelatihan kustom yang dibuat oleh orang lain di organisasi, Anda mungkin perlu mendapatkan izin ini.

    Salah satu cara untuk mendapatkan izin ini adalah dengan meminta administrator organisasi memberi Anda peran Pengguna Vertex AI (roles/aiplatform.user).

Persyaratan untuk kasus lanjutan

Jika Anda menggunakan fitur lanjutan tertentu, penuhi persyaratan tambahan berikut:

  • Jika Anda melampirkan akun layanan kustom ke resource pelatihan kustom, pastikan setiap pengguna yang ingin mengakses shell interaktif memiliki izin iam.serviceAccounts.actAs untuk akun layanan yang terpasang.

    Panduan untuk akun layanan kustom mencatat bahwa Anda harus memiliki izin ini agar dapat melampirkan akun layanan. Anda juga memerlukan izin ini untuk melihat shell interaktif selama pelatihan kustom.

    Misalnya, untuk membuat CustomJob dengan akun layanan terlampir, Anda harus memiliki izin iam.serviceAccounts.actAs untuk akun layanan. Jika salah satu rekan kerja Anda ingin melihat shell interaktif untuk CustomJob ini, mereka juga harus memiliki izin iam.serviceAccounts.actAs yang sama.

  • Jika Anda telah mengonfigurasi project untuk menggunakan Kontrol Layanan VPC dengan Vertex AI, pertimbangkan batasan tambahan berikut:

    • Anda tidak dapat menggunakan IP pribadi untuk pelatihan kustom. Jika Anda memerlukan VPC-SC dengan Peering VPC, ada penyiapan tambahan yang diperlukan untuk menggunakan shell interaktif. Ikuti petunjuk yang dibahas dalam artikel Dasbor Ray dan Shell Interaktif dengan VPC-SC + VPC Peering untuk mengonfigurasi penyiapan shell interaktif dengan VPC-SC dan VPC Peering di project pengguna Anda.

    • Dari dalam shell interaktif, Anda tidak dapat mengakses resource internet publik atau Google Cloud di luar perimeter layanan.

    • Untuk mengamankan akses ke shell interaktif, Anda harus menambahkan notebooks.googleapis.com sebagai layanan terbatas dalam perimeter layanan, selain aiplatform.googleapis.com. Jika Anda hanya membatasi aiplatform.googleapis.com dan bukan notebooks.googleapis.com, pengguna dapat mengakses shell interaktif dari mesin di luar perimeter layanan, yang mengurangi manfaat keamanan dari penggunaan Kontrol Layanan VPC.

Mengaktifkan shell interaktif

Guna mengaktifkan shell interaktif untuk resource pelatihan kustom, tetapkan kolom API enableWebAccess ke true saat Anda membuat CustomJob, HyperparameterTuningJob, atau TrainingPipeline kustom.

Contoh berikut menunjukkan cara melakukannya menggunakan beberapa alat yang berbeda:

Konsol

Ikuti panduan untuk membuat TrainingPipeline kustom di Konsol Google Cloud. Di panel Train new model, saat Anda mencapai langkah Model details, lakukan hal berikut:

  1. Klik Advanced options.

  2. Centang kotak Enable training debugging.

Kemudian, selesaikan alur kerja Train new model lainnya.

gcloud

Untuk mempelajari cara menggunakan perintah ini, lihat panduan untuk membuat CustomJob dan panduan untuk membuat HyperparameterTuningJob.

API

Isi permintaan REST sebagian berikut menunjukkan tempat untuk menentukan kolom enableWebAccess untuk setiap jenis resource pelatihan kustom:

CustomJob

Contoh berikut adalah isi permintaan sebagian untuk metode API projects.locations.customJobs.create:

{
  ...
  "jobSpec": {
    ...
    "enableWebAccess": true
  }
  ...
}

Untuk contoh pengiriman permintaan API guna membuat CustomJob, lihat Membuat tugas pelatihan kustom.

HyperparameterTuningJob

Contoh berikut adalah isi permintaan sebagian untuk metode API projects.locations.hyperparameterTuningJobs.create:

{
  ...
  "trialJobSpec": {
    ...
    "enableWebAccess": true
  }
  ...
}

Untuk contoh pengiriman permintaan API untuk membuat HyperparameterTuningJob, lihat Menggunakan penyesuaian hyperparameter.

TrainingPipeline Kustom

Contoh berikut menunjukkan isi permintaan sebagian untuk metode API projects.locations.trainingPipelines.create. Pilih salah satu tab berikut, bergantung pada apakah Anda menggunakan penyesuaian hyperparameter:

Tanpa penyesuaian hyperparameter

{
  ...
  "trainingTaskInputs": {
    ...
    "enableWebAccess": true
  }
  ...
}

Dengan penyesuaian hyperparameter

{
  ...
  "trainingTaskInputs": {
    ...
    "trialJobSpec": {
      ...
      "enableWebAccess": true
    }
  }
  ...
}

Untuk contoh pengiriman permintaan API guna membuat TrainingPipeline kustom, lihat Membuat pipeline pelatihan.

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.

Tetapkan parameter enable_web_access ke true saat Anda menjalankan salah satu metode berikut:

Setelah Anda memulai pelatihan kustom sesuai dengan panduan di bagian sebelumnya, Vertex AI akan menghasilkan satu atau beberapa URI yang dapat Anda gunakan untuk mengakses shell interaktif. Vertex AI menghasilkan URI unik untuk setiap node pelatihan dalam tugas Anda.

Anda dapat menavigasi ke shell interaktif dengan salah satu cara berikut:

  • Mengklik link di Konsol Google Cloud
  • Gunakan Vertex AI API untuk mendapatkan URI akses web shell
  1. Di Konsol Google Cloud, di bagian Vertex AI, buka salah satu halaman berikut:

  2. Klik nama fasilitas pelatihan kustom Anda.

    Jika Anda membuat TrainingPipeline untuk pelatihan kustom, klik nama CustomJob atau HyperparameterTuningJob yang dibuat oleh TrainingPipeline Anda. Misalnya, jika pipeline Anda memiliki nama PIPELINE_NAME, nama ini mungkin disebut PIPELINE_NAME-custom-job atau PIPELINE_NAME-hyperparameter-tuning-job.

  3. Di halaman tugas Anda, klik Launch web terminal. Jika tugas Anda menggunakan beberapa node, klik Launch web terminal di samping node yang ingin Anda buat shell interaktifnya.

    Perhatikan, Anda hanya dapat mengakses shell interaktif saat tugas berjalan. Jika Anda tidak melihat Launch web terminal, hal ini mungkin karena Vertex AI belum mulai menjalankan tugas Anda, atau karena tugas tersebut sudah selesai atau gagal. Jika Status tugas adalah Queued atau Pending, tunggu sebentar; lalu coba muat ulang halaman.

    Jika Anda menggunakan penyesuaian hyperparameter, ada link Luncurkan terminal web terpisah untuk setiap uji coba.

Mendapatkan URI akses web dari API

Gunakan metode API projects.locations.customJobs.get atau metode API projects.locations.hyperparameterTuningJobs.get untuk melihat URI yang dapat Anda gunakan untuk mengakses shell interaktif.

Bergantung pada jenis resource pelatihan kustom yang Anda gunakan, pilih salah satu tab berikut untuk melihat contoh cara menemukan kolom API webAccessUris, yang berisi URI shell interaktif untuk setiap node di tugas:

CustomJob

Tab berikut menunjukkan berbagai cara untuk mengirim permintaan projects.locations.customJobs.get:

gcloud

Jalankan perintah gcloud ai custom-jobs describe:

gcloud ai custom-jobs describe JOB_ID \
  --region=LOCATION \
  --format=json

Ganti kode berikut:

  • JOB_ID: ID numerik tugas Anda. ID ini adalah bagian terakhir dari kolom name tugas. Anda mungkin sudah melihat ID saat membuat tugas. (Jika tidak mengetahui ID tugas, Anda dapat menjalankan perintah gcloud ai custom-jobs list dan mencari tugas yang sesuai.)

  • LOCATION: Wilayah tempat Anda membuat tugas.

REST

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

  • LOCATION: Wilayah tempat Anda membuat tugas.

  • PROJECT_ID: Project ID Anda.

  • JOB_ID: ID numerik tugas Anda. ID ini adalah bagian terakhir dari kolom name tugas. Anda mungkin sudah melihat ID saat membuat tugas.

Metode HTTP dan URL:

GET https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/customJobs/JOB_ID

Untuk mengirim permintaan, perluas salah satu opsi berikut:

 

Pada output, cari berikut ini:

{
  ...
  "state": "JOB_STATE_RUNNING",
  ...
  "webAccessUris": {
    "workerpool0-0": "INTERACTIVE_SHELL_URI"
  }
}

Jika Anda tidak melihat kolom webAccessUris, hal ini mungkin karena Vertex AI belum mulai menjalankan tugas Anda. Pastikan Anda melihat JOB_STATE_RUNNING di kolom state. Jika statusnya adalah JOB_STATE_QUEUED atau JOB_STATE_PENDING, tunggu sebentar; kemudian coba dapatkan info proyek lagi.

HyperparameterTuningJob

Tab berikut menunjukkan berbagai cara untuk mengirim permintaan projects.locations.hyperparameterTuningJobs.get:

gcloud

Jalankan perintah gcloud ai hp-tuning-jobs describe:

gcloud ai hp-tuning-jobs describe JOB_ID \
  --region=LOCATION \
  --format=json

Ganti kode berikut:

  • JOB_ID: ID numerik tugas Anda. ID ini adalah bagian terakhir dari kolom name tugas. Anda mungkin sudah melihat ID saat membuat tugas. (Jika tidak mengetahui ID tugas, Anda dapat menjalankan perintah gcloud ai hp-tuning-jobs list dan mencari tugas yang sesuai.)

  • LOCATION: Wilayah tempat Anda membuat tugas.

REST

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

  • LOCATION: Wilayah tempat Anda membuat tugas.

  • PROJECT_ID: Project ID Anda.

  • JOB_ID: ID numerik tugas Anda. ID ini adalah bagian terakhir dari kolom name tugas. Anda mungkin sudah melihat ID saat membuat tugas.

Metode HTTP dan URL:

GET https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/hyperparameterTuningJobs/JOB_ID

Untuk mengirim permintaan, perluas salah satu opsi berikut:

 

Pada output, cari berikut ini:

{
  ...
  "state": "JOB_STATE_RUNNING",
  ...
  "trials": [
    ...
    {
      ...
      "state": "ACTIVE",
      ...
      "webAccessUris": {
        "workerpool0-0": "INTERACTIVE_SHELL_URI"
      }
    }
  ],
}

Jika Anda tidak melihat kolom webAccessUris, hal ini mungkin karena Vertex AI belum mulai menjalankan tugas Anda. Pastikan Anda melihat JOB_STATE_RUNNING di kolom state. Jika statusnya adalah JOB_STATE_QUEUED atau JOB_STATE_PENDING, tunggu sebentar; kemudian coba dapatkan info proyek lagi.

Vertex AI menyediakan sekumpulan URI shell interaktif untuk setiap uji coba penyesuaian hyperparameter saat uji coba memasuki status ACTIVE. Jika Anda ingin mendapatkan URI shell interaktif untuk uji coba selanjutnya, dapatkan info tugas lagi setelah uji coba tersebut dimulai.

Contoh sebelumnya menunjukkan output yang diharapkan untuk pelatihan replika tunggal: satu URI untuk node pelatihan utama. Jika Anda melakukan pelatihan terdistribusi, outputnya akan berisi satu URI untuk setiap node pelatihan, yang diidentifikasi oleh pool worker.

Misalnya, jika tugas Anda memiliki pool worker utama dengan satu replika dan pool worker sekunder dengan dua replika, kolom webAccessUris akan terlihat mirip dengan berikut ini:

{
  "workerpool0-0": "URI_FOR_PRIMARY",
  "workerpool1-0": "URI_FOR_FIRST_SECONDARY",
  "workerpool1-1": "URI_FOR_SECOND_SECONDARY"
}

Menggunakan shell interaktif

Untuk menggunakan shell interaktif bagi node pelatihan, buka salah satu URI yang Anda temukan di bagian sebelumnya. Shell Bash akan muncul di browser, yang memberi Anda akses ke sistem file container tempat Vertex AI menjalankan kode pelatihan Anda.

Bagian berikut menjelaskan beberapa hal yang perlu dipertimbangkan saat menggunakan shell dan memberikan beberapa contoh alat pemantauan yang dapat Anda gunakan dalam shell.

Mencegah tugas berakhir

Setelah Vertex AI selesai menjalankan tugas atau uji coba, Anda akan langsung kehilangan akses ke shell interaktif Anda. Jika hal ini terjadi, Anda mungkin melihat pesan command terminated with exit code 137 atau shell mungkin berhenti merespons. Jika Anda membuat file apa pun dalam sistem file container, file tersebut tidak akan bertahan setelah tugas berakhir.

Dalam beberapa kasus, Anda mungkin ingin sengaja membuat tugas berjalan lebih lama untuk melakukan debug dengan shell interaktif. Misalnya, Anda dapat menambahkan kode seperti berikut ke kode pelatihan agar tugas tetap berjalan setidaknya selama satu jam setelah pengecualian terjadi:

import time
import traceback

try:
    # Replace with a function that runs your training code
    train_model()
except Exception as e:
    traceback.print_exc()
    time.sleep(60 * 60)  # 1 hour

Namun, perlu diperhatikan bahwa Anda akan dikenai biaya Pelatihan Vertex AI selama tugas tersebut terus berjalan.

Memeriksa masalah izin

Lingkungan shell interaktif diautentikasi menggunakan kredensial default aplikasi (ADC) untuk akun layanan yang digunakan Vertex AI untuk menjalankan kode pelatihan Anda. Anda dapat menjalankan gcloud auth list di shell untuk detail selengkapnya.

Di shell, Anda dapat menggunakan bq dan alat lain yang mendukung ADC. Hal ini dapat membantu Anda memverifikasi bahwa tugas dapat mengakses bucket Cloud Storage, tabel BigQuery, atau resource Google Cloud tertentu yang dibutuhkan kode pelatihan Anda.

Memvisualisasikan eksekusi Python dengan py-spy

py-spy memungkinkan Anda membuat profil eksekusi program Python, tanpa mengubahnya. Untuk menggunakan py-spy dalam shell interaktif, lakukan hal berikut:

  1. Instal py-spy:

    pip3 install py-spy
    
  2. Jalankan ps aux di shell, lalu cari PID program pelatihan python.

  3. Jalankan salah satu subperintah yang dijelaskan dalam dokumentasi py-spy, menggunakan PID yang Anda temukan pada langkah sebelumnya.

  4. Jika Anda menggunakan py-spy record untuk membuat file SVG, salin file ini ke bucket Cloud Storage sehingga Anda dapat melihatnya nanti di komputer lokal. Contoh:

    gcloud storage cp profile.svg gs://BUCKET
    

    Ganti BUCKET dengan nama bucket yang dapat Anda akses.

Menganalisis performa dengan perf

perf memungkinkan Anda menganalisis performa node pelatihan. Untuk menginstal versi perf yang sesuai bagi kernel Linux node Anda, jalankan perintah berikut:

apt-get update
apt-get install -y linux-tools-generic
rm /usr/bin/perf
LINUX_TOOLS_VERSION=$(ls /usr/lib/linux-tools | tail -n 1)
ln -s "/usr/lib/linux-tools/${LINUX_TOOLS_VERSION}/perf" /usr/bin/perf

Setelahnya, Anda dapat menjalankan subperintah yang dijelaskan dalam dokumentasi perf.

Mengambil informasi tentang penggunaan GPU

Container berkemampuan GPU yang berjalan di node dengan GPU biasanya memiliki beberapa alat command line bawaan yang dapat membantu Anda memantau penggunaan GPU. Misalnya:

  • Gunakan nvidia-smi untuk memantau penggunaan GPU berbagai proses.

  • Gunakan nvprof untuk mengumpulkan berbagai informasi pembuatan profil GPU. Karena nvprof tidak dapat ditambahkan ke proses yang ada, Anda mungkin ingin menggunakan alat untuk memulai proses tambahan yang menjalankan kode pelatihan. (Artinya, kode pelatihan Anda akan berjalan dua kali pada node.) Contoh:

    nvprof -o prof.nvvp python3 -m MODULE_NAME
    

    Ganti MODULE_NAME dengan nama modul titik entri aplikasi pelatihan yang sepenuhnya memenuhi syarat; misalnya, trainer.task.

    Kemudian, transfer file output ke bucket Cloud Storage agar Anda dapat menganalisisnya nanti di komputer lokal. Contoh:

    gcloud storage cp prof.nvvp gs://BUCKET
    

    Ganti BUCKET dengan nama bucket yang dapat Anda akses.

  • Jika Anda mengalami error GPU (bukan masalah dengan konfigurasi Anda atau dengan Vertex AI), gunakan nvidia-bug-report.sh untuk membuat laporan bug.

    Kemudian, transfer laporan ke bucket Cloud Storage sehingga Anda dapat menganalisisnya nanti di komputer lokal atau mengirimkannya ke NVIDIA. Contoh:

    gcloud storage cp nvidia-bug-report.log.gz gs://BUCKET
    

    Ganti BUCKET dengan nama bucket yang dapat Anda akses.

Jika bash tidak dapat menemukan perintah NVIDIA ini, coba tambahkan /usr/local/nvidia/bin dan /usr/local/cuda/bin ke PATH shell:

export PATH="/usr/local/nvidia/bin:/usr/local/cuda/bin:${PATH}"

Dasbor Ray dan Shell Interaktif dengan VPC-SC + Peering VPC

  1. Konfigurasi peered-dns-domains.

    {
      VPC_NAME=NETWORK_NAME
      REGION=LOCATION
      gcloud services peered-dns-domains create training-cloud \
      --network=$VPC_NAME \
      --dns-suffix=$REGION.aiplatform-training.cloud.google.com.
    
      # Verify
      gcloud beta services peered-dns-domains list --network $VPC_NAME;
    }
        
    • NETWORK_NAME: Mengubah ke jaringan peering.

    • LOCATION: Lokasi yang diinginkan (misalnya, us-central1).

  2. Konfigurasi DNS managed zone.

    {
      PROJECT_ID=PROJECT_ID
      ZONE_NAME=$PROJECT_ID-aiplatform-training-cloud-google-com
      DNS_NAME=aiplatform-training.cloud.google.com
      DESCRIPTION=aiplatform-training.cloud.google.com
    
      gcloud dns managed-zones create $ZONE_NAME  \
      --visibility=private  \
      --networks=https://www.googleapis.com/compute/v1/projects/$PROJECT_ID/global/networks/$VPC_NAME  \
      --dns-name=$DNS_NAME  \
      --description="Training $DESCRIPTION"
    }
        
    • PROJECT_ID: Project ID Anda. Anda dapat menemukan ID ini di halaman sambutan Konsol Google Cloud.

  3. Catat transaksi DNS.

    {
      gcloud dns record-sets transaction start --zone=$ZONE_NAME
    
      gcloud dns record-sets transaction add \
      --name=$DNS_NAME. \
      --type=A 199.36.153.4 199.36.153.5 199.36.153.6 199.36.153.7 \
      --zone=$ZONE_NAME \
      --ttl=300
    
      gcloud dns record-sets transaction add \
      --name=*.$DNS_NAME. \
      --type=CNAME $DNS_NAME. \
      --zone=$ZONE_NAME \
      --ttl=300
    
      gcloud dns record-sets transaction execute --zone=$ZONE_NAME
    }
        
  4. Kirim tugas pelatihan dengan shell interaktif + VPC-SC + Peering VPC diaktifkan.

Langkah selanjutnya