Pelatihan Cloud TPU (TF 2.x)


Tutorial ini menunjukkan cara melatih model Keras ResNet-RS di Cloud TPU menggunakan tf.distribute.TPUStrategy. Untuk mengetahui informasi selengkapnya tentang ResNet-RS, lihat Meninjau Kembali ResNet: Peningkatan Pelatihan dan Strategi Penskalaan.

Jika belum terbiasa menggunakan Cloud TPU, sebaiknya Anda membaca quickstart untuk mempelajari cara membuat TPU dan VM Compute Engine.

Tujuan

  • Membuat bucket Cloud Storage untuk menyimpan set data dan output model Anda.
  • Siapkan set data imagenet palsu yang mirip dengan set data ImageNet.
  • Menjalankan tugas pelatihan.
  • Verifikasi hasil output.

Biaya

Dalam dokumen ini, Anda menggunakan komponen Google Cloud yang dapat ditagih berikut:

  • Compute Engine
  • Cloud TPU
  • Cloud Storage

Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda, gunakan kalkulator harga. Pengguna baru Google Cloud mungkin memenuhi syarat untuk mendapatkan uji coba gratis.

Sebelum memulai

Sebelum memulai tutorial ini, pastikan project Google Cloud Anda sudah disiapkan dengan benar.

  1. Login ke akun Google Cloud Anda. Jika Anda baru menggunakan Google Cloud, buat akun untuk mengevaluasi performa produk kami dalam skenario dunia nyata. Pelanggan baru juga mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy workload.
  2. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  3. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

  4. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  5. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

  6. Panduan ini menggunakan komponen Google Cloud yang dapat ditagih. Lihat halaman harga Cloud TPU untuk memperkirakan biaya Anda. Pastikan untuk membersihkan resource yang Anda buat setelah selesai menggunakannya untuk menghindari biaya yang tidak perlu.

Menyiapkan resource

Bagian ini memberikan informasi tentang penyiapan resource Cloud Storage, VM, dan Cloud TPU untuk tutorial.

  1. Buka jendela Cloud Shell.

    Buka Cloud Shell

  2. Buat variabel untuk ID project Anda.

    export PROJECT_ID=project-id
    
  3. Konfigurasikan Google Cloud CLI untuk menggunakan project tempat Anda ingin membuat Cloud TPU.

    gcloud config set project ${PROJECT_ID}
    

    Saat pertama kali menjalankan perintah ini di VM Cloud Shell baru, halaman Authorize Cloud Shell akan ditampilkan. Klik Authorize di bagian bawah halaman untuk mengizinkan gcloud melakukan panggilan Google Cloud API dengan kredensial Anda.

  4. Membuat Akun Layanan untuk project Cloud TPU.

    gcloud beta services identity create --service tpu.googleapis.com --project $PROJECT_ID
    

    Perintah akan menampilkan Akun Layanan Cloud TPU dengan format berikut:

    service-PROJECT_NUMBER@cloud-tpu.iam.gserviceaccount.com
    

  5. Buat bucket Cloud Storage menggunakan perintah berikut:

    gsutil mb -p ${PROJECT_ID} -c standard -l europe-west4 gs://bucket-name
    

    Bucket Cloud Storage ini menyimpan data yang Anda gunakan untuk melatih model dan hasil pelatihan. Alat gcloud compute tpus execution-groups yang digunakan dalam tutorial ini menyiapkan izin default untuk Akun Layanan Cloud TPU yang Anda siapkan di langkah sebelumnya. Jika Anda menginginkan izin yang lebih terperinci, tinjau izin tingkat akses.

    Lokasi bucket harus berada di region yang sama dengan Compute Engine (VM) dan node Cloud TPU.

  6. Luncurkan VM Compute Engine menggunakan perintah gcloud.

    $ gcloud compute tpus execution-groups create \
     --vm-only \
     --name=resnet-rs-tutorial \
     --zone=europe-west4-a \
     --disk-size=300 \
     --machine-type=n1-standard-16 \
     --tf-version=2.12.0
     

    Deskripsi flag perintah

    vm-only
    Buat VM saja, jangan membuat TPU.
    name
    Nama TPU yang akan dibuat.
    zone
    Zona tempat membuat Cloud TPU Anda.
    disk-size
    Ukuran hard disk dalam GB VM yang dibuat oleh perintah gcloud compute tpus execution-groups.
    machine-type
    Jenis mesin VM Compute Engine yang akan dibuat.

    Untuk mengetahui informasi lebih lanjut tentang perintah gcloud, lihat Referensi gcloud.

  7. Saat diminta, tekan y untuk membuat resource Cloud TPU.

    Setelah perintah gcloud compute tpus execution-groups selesai dijalankan, pastikan perintah shell Anda telah berubah dari username@projectname menjadi username@vm-name. Perubahan ini menunjukkan bahwa Anda kini telah login ke VM Compute Engine.

    gcloud compute ssh resnet-rs-tutorial --zone=europe-west4-a
    

    Saat Anda melanjutkan petunjuk ini, jalankan setiap perintah yang dimulai dengan (vm)$ di instance Compute Engine.

  8. Instal paket yang diperlukan.

    $ pip3 install tensorflow-text==2.8.1 --no-deps

Menetapkan variabel bucket Cloud Storage

Siapkan variabel lingkungan berikut, dengan mengganti bucket-name dengan nama bucket Cloud Storage Anda:

(vm)$ export STORAGE_BUCKET=gs://bucket-name
(vm)$ export MODEL_DIR=${STORAGE_BUCKET}/resnet-rs-2x
(vm)$ export IMAGENET_DIR=gs://cloud-tpu-test-datasets/fake_imagenet
(vm)$ export PYTHONPATH=/usr/share/models
(vm)$ export TPU_NAME=resnet-rs-tutorial

Aplikasi pelatihan mengharapkan data pelatihan Anda dapat diakses di Cloud Storage. Aplikasi pelatihan juga menggunakan bucket Cloud Storage Anda untuk menyimpan checkpoint selama pelatihan.

Pelatihan dan evaluasi perangkat tunggal Cloud TPU

ImageNet adalah database gambar. Gambar dalam database diatur menjadi hierarki, dengan setiap node hierarki digambarkan dalam ratusan gambar.

Tutorial ini menggunakan versi demonstrasi set data ImageNet lengkap, yang disebut sebagai fake_imagenet. Versi demonstrasi ini memungkinkan Anda untuk menguji tutorial, sekaligus mengurangi persyaratan penyimpanan dan waktu yang biasanya terkait dengan menjalankan model pada database ImageNet lengkap.

Set data palsu_imagenet berada di lokasi ini pada Cloud Storage:

gs://cloud-tpu-test-datasets/fake_imagenet

Set data fault_imagenet hanya berguna untuk memahami cara menggunakan Cloud TPU dan memvalidasi performa end-to-end. Angka akurasi dan model yang tersimpan tidak akan bermakna.

Untuk mengetahui informasi tentang cara mendownload dan memproses set data ImageNet lengkap, lihat Mendownload, melakukan prapemrosesan, dan mengupload set data ImageNet.

  1. Buat Cloud TPU menggunakan perintah gcloud.

    $ gcloud compute tpus execution-groups create \
     --tpu-only \
     --accelerator-type=v3-8  \
     --name=resnet-rs-tutorial \
     --zone=europe-west4-a \
     --tf-version=2.12.0

    Deskripsi flag perintah

    tpu-only
    Buat TPU saja, jangan membuat VM.
    accelerator-type
    Jenis Cloud TPU yang akan dibuat.
    name
    Nama TPU yang akan dibuat.
    zone
    Zona tempat membuat Cloud TPU Anda.
    tf-version
    Versi Tensorflow yang diinstal di VM.
  2. Tetapkan variabel nama TPU_NAME.

    (vm)$ export TPU_NAME=resnet-rs-tutorial
    
  3. Jalankan skrip pelatihan.

    (vm)$ python3 /usr/share/models/official/vision/beta/train.py \
    --experiment=resnet_rs_imagenet \
    --mode=train_and_eval \
    --model_dir=$MODEL_DIR \
    --tpu=$TPU_NAME \
    --config_file=/usr/share/models/official/vision/beta/configs/experiments/image_classification/imagenet_resnetrs50_i160.yaml \
    --params_override="task.train_data.input_path=$IMAGENET_DIR/train*, task.validation_data.input_path=$IMAGENET_DIR/valid*, trainer.train_steps=100"
    

    Deskripsi flag perintah

    experiment
    Nama eksperimen yang akan dijalankan.
    mode
    Mode yang digunakan untuk menjalankan skrip. Nilai yang valid adalah: `train`, `eval` , atau `train_and_eval`.
    model_dir
    Bucket Cloud Storage tempat checkpoint dan ringkasan disimpan selama pelatihan. Anda dapat menggunakan folder yang sudah ada untuk memuat checkpoint yang dihasilkan sebelumnya yang dibuat di TPU dengan ukuran dan versi TensorFlow yang sama.
    tpu
    Nama TPU yang akan digunakan.
    config_file
    Jalur ke file konfigurasi skrip.
    params_override
    Mengganti setelan yang ditetapkan di file konfigurasi skrip.

Perintah ini akan melatih ResNet-RS untuk 100 langkah pelatihan dan akan diselesaikan pada node TPU v3-8 dalam waktu kurang dari 5 menit. Output skrip pelatihan harus menyertakan teks seperti:

{
  'train_loss': 1.435225,
  'train_accuracy': 0.00084427913
}

Skrip pelatihan juga melakukan evaluasi. Output evaluasi harus berisi teks seperti ini:

Run stats:
{
  'eval_loss': 0.861013,
  'eval_acc': 0.001,
  'train_loss': 1.435225,
  'train_acc': 0.00084427913,
  'step_timestamp_log': [
    'BatchTimestamp<batch_index: 0,
    timestamp: 1606330585.7613473>',
    'BatchTimestamp<batch_index: 500,
    timestamp: 1606330883.8486104>',
    'BatchTimestamp<batch_index: 1000,
    timestamp: 1606331119.515312>',
    'BatchTimestamp<batch_index: 1251,
    timestamp: 1606331240.7516596>'
  ],
  'train_finish_time': 1606331296.395158,
  'avg_exp_per_second': 1951.6983246161021
}

Untuk melatih model ResNet-RS agar konvergensi, hapus argumen trainer.train_steps=100 seperti yang ditunjukkan dalam skrip berikut. Pelatihan dan evaluasi dilakukan bersama.

(vm)$ python3 /usr/share/models/official/vision/beta/train.py \
  --experiment=resnet_rs_imagenet \
  --mode=train_and_eval \
  --model_dir=$MODEL_DIR \
  --tpu=$TPU_NAME \
  --config_file=/usr/share/models/official/vision/beta/configs/experiments/image_classification/imagenet_resnetrs50_i160.yaml \
  --params_override="task.train_data.input_path=$IMAGENET_DIR/train*, task.validation_data.input_path=$IMAGENET_DIR/valid*"

Deskripsi flag perintah

experiment
Nama eksperimen yang akan dijalankan.
mode
Mode yang digunakan untuk menjalankan skrip. Nilai yang valid adalah: `train`, `eval`, atau `train_and_eval`.
model_dir
Bucket Cloud Storage tempat checkpoint dan ringkasan disimpan selama pelatihan. Anda dapat menggunakan folder yang sudah ada untuk memuat checkpoint yang dihasilkan sebelumnya yang dibuat di TPU dengan ukuran dan versi TensorFlow yang sama.
tpu
Nama TPU yang akan digunakan.
config_file
Jalur ke file konfigurasi skrip.
params_override
Mengganti setelan yang ditetapkan di file konfigurasi skrip.

Karena pelatihan dan evaluasi dilakukan pada set data palsu_imagenet, hasil output tidak mencerminkan output sebenarnya yang akan muncul jika pelatihan dan evaluasi dilakukan pada set data sebenarnya.

Pada tahap ini, Anda dapat menyelesaikan tutorial ini dan membersihkan resource Google Cloud, atau mempelajari lebih lanjut cara menjalankan model di Pod Cloud TPU.

Menggunakan model yang lebih besar

ResNet-RS menyediakan kelompok model dengan ukuran berbeda dengan model lebih besar yang biasanya lebih akurat dengan biaya komputasi yang lebih besar. Untuk mengetahui informasi selengkapnya, lihat Meninjau Kembali ResNet: Peningkatan Pelatihan dan Strategi Penskalaan.

Anda dapat memilih ukuran model yang akan dilatih dengan mengubah config_file dalam perintah berikut.

(vm)$ python3 /usr/share/models/official/vision/beta/train.py \
  --experiment=resnet_rs_imagenet \
  --mode=train_and_eval \
  --model_dir=$MODEL_DIR \
  --tpu=$TPU_NAME \
  --config_file=/usr/share/models/official/vision/beta/configs/experiments/image_classification/imagenet_resnetrs200_i256.yaml \
  --params_override="task.train_data.input_path=$IMAGENET_DIR/train*, task.validation_data.input_path=$IMAGENET_DIR/valid*"

Konfigurasi yang tersedia ada di /usr/share/models/official/vision/beta/configs/experiments/ pada VM Anda.

Menskalakan model Anda dengan Pod Cloud TPU

Melatih model Anda di Pod Cloud TPU mungkin memerlukan beberapa perubahan pada skrip pelatihan Anda. Untuk mengetahui informasi selengkapnya, lihat Pelatihan terkait Pod TPU.

Anda dapat memperoleh hasil lebih cepat dengan menskalakan model menggunakan Pod Cloud TPU. Model ResNet-RS-50 yang didukung sepenuhnya dapat berfungsi dengan slice Pod berikut:

  • v2-32
  • v3-32

Dengan Pod Cloud TPU, pelatihan dan evaluasi dilakukan bersama-sama.

Pelatihan dengan Pod Cloud TPU

  1. Hapus resource Cloud TPU yang Anda buat untuk melatih model di satu perangkat.

    (vm)$ gcloud compute tpus execution-groups delete resnet-rs-tutorial \
      --zone=europe-west4-a \
      --tpu-only
  2. Buat resource Cloud TPU baru untuk Pod menggunakan parameter accelerator-type untuk menentukan slice Pod yang ingin digunakan. Misalnya, perintah berikut menggunakan slice Pod v3-32.

    (vm)$ gcloud compute tpus execution-groups  create --name=resnet-rs-tutorial \
      --accelerator-type=v3-32  \
      --zone=europe-west4-a \
      --tf-version=2.12.0 \
      --tpu-only
    

    Deskripsi flag perintah

    name
    Nama Cloud TPU yang akan dibuat.
    accelerator-type
    Jenis Cloud TPU yang akan dibuat.
    zone
    Zona tempat Anda berencana membuat Cloud TPU.
    tf-version
    Versi Tensorflow gcloud dapat diinstal di VM.
    tpu-only
    Buat Cloud TPU saja. Secara default, perintah gcloud akan membuat VM dan Cloud TPU.
  3. Jalankan skrip pelatihan.

    (vm)$ python3 /usr/share/models/official/vision/beta/train.py \
    --experiment=resnet_rs_imagenet \
    --mode=train_and_eval \
    --model_dir=$MODEL_DIR \
    --tpu=$TPU_NAME \
    --config_file=/usr/share/models/official/vision/beta/configs/experiments/image_classification/imagenet_resnetrs50_i160.yaml \
    --params_override="task.train_data.input_path=$IMAGENET_DIR/train*, task.validation_data.input_path=$IMAGENET_DIR/valid*, trainer.train_steps=100"
    

    Deskripsi flag perintah

    experiment
    Nama eksperimen yang akan dijalankan.
    mode
    Mode yang digunakan untuk menjalankan skrip. Nilai yang valid adalah: `train`, `eval`, atau `train_and_eval`.
    model_dir
    Bucket Cloud Storage tempat checkpoint dan ringkasan disimpan selama pelatihan. Anda dapat menggunakan folder yang sudah ada untuk memuat checkpoint yang dihasilkan sebelumnya yang dibuat di TPU dengan ukuran dan versi TensorFlow yang sama.
    tpu
    Nama TPU yang akan digunakan.
    config_file
    Jalur ke file konfigurasi skrip.
    params_override
    Mengganti setelan yang ditetapkan di file konfigurasi skrip.

Perintah ini akan melatih ResNet-RS untuk 100 langkah pelatihan dan akan diselesaikan pada node TPU v3-8 dalam waktu kurang dari 5 menit. Output skrip pelatihan harus menyertakan teks seperti:

{
  'train_loss': 1.435225,
  'train_accuracy': 0.00084427913
}

Skrip pelatihan juga melakukan evaluasi. Output evaluasi harus berisi teks seperti ini:

Run stats:
{
  'eval_loss': 0.861013,
  'eval_acc': 0.001,
  'train_loss': 1.435225,
  'train_acc': 0.00084427913,
  'step_timestamp_log': [
    'BatchTimestamp<batch_index: 0,
    timestamp: 1606330585.7613473>',
    'BatchTimestamp<batch_index: 500,
    timestamp: 1606330883.8486104>',
    'BatchTimestamp<batch_index: 1000,
    timestamp: 1606331119.515312>',
    'BatchTimestamp<batch_index: 1251,
    timestamp: 1606331240.7516596>'
  ],
  'train_finish_time': 1606331296.395158,
  'avg_exp_per_second': 1951.6983246161021
}

Pelatihan dan evaluasi dilakukan bersama. Setiap epoch memiliki 1.251 langkah dengan total 112.590 langkah pelatihan dan 48 langkah evaluasi.

Pembersihan

Agar tidak dikenakan biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini, hapus project yang berisi resource tersebut, atau simpan project dan hapus setiap resource-nya.

  1. Putuskan koneksi dari instance Compute Engine jika Anda belum melakukannya:

    (vm)$ exit
    

    Prompt Anda sekarang akan menjadi username@projectname, yang menunjukkan bahwa Anda berada di Cloud Shell.

  2. Di Cloud Shell, gunakan perintah berikut untuk menghapus VM Compute Engine dan Cloud TPU:

    $ gcloud compute tpus execution-groups delete resnet-rs-tutorial \
      --zone=europe-west4-a
    
  3. Verifikasi bahwa resource telah dihapus dengan menjalankan gcloud compute tpus execution-groups list. Penghapusan memerlukan waktu beberapa menit. Respons seperti di bawah ini menunjukkan bahwa instance Anda telah berhasil dihapus.

    $ gcloud compute tpus execution-groups list \
     --zone=europe-west4-a
    

    Anda akan melihat daftar TPU kosong seperti berikut:

       NAME             STATUS
    
  4. Hapus bucket Cloud Storage menggunakan gsutil seperti yang ditunjukkan di bawah ini. Ganti bucket-name dengan nama bucket Cloud Storage Anda.

    $ gsutil rm -r gs://bucket-name
    

Langkah selanjutnya

Tutorial TensorFlow Cloud TPU umumnya melatih model menggunakan sampel set data. Hasil pelatihan ini tidak dapat digunakan untuk inferensi. Agar dapat menggunakan model untuk inferensi, Anda dapat melatih data pada set data yang tersedia untuk publik atau set data Anda sendiri. Model TensorFlow yang dilatih di Cloud TPU umumnya memerlukan set data dalam format TFRecord.

Anda dapat menggunakan contoh alat konversi set data untuk mengonversi set data klasifikasi gambar menjadi format TFRecord. Jika tidak menggunakan model klasifikasi gambar, Anda harus mengonversi set data ke format TFRecord sendiri. Untuk mengetahui informasi selengkapnya, lihat TFRecord dan tf.Example.

Penyesuaian hyperparameter

Untuk meningkatkan performa model dengan set data, Anda dapat menyesuaikan hyperparameter model. Anda dapat menemukan informasi tentang hyperparameter yang umum untuk semua model yang didukung TPU di GitHub. Informasi tentang hyperparameter khusus model dapat ditemukan di kode sumber untuk setiap model. Untuk informasi selengkapnya tentang penyesuaian hyperparameter, lihat Ringkasan penyesuaian hyperparameter dan Menyesuaikan hyperparameter.

Inferensi

Setelah melatih model, Anda dapat menggunakannya untuk inferensi (juga disebut prediksi). Anda dapat menggunakan alat konverter inferensi Cloud TPU untuk menyiapkan dan mengoptimalkan model TensorFlow untuk inferensi di Cloud TPU v5e. Untuk mengetahui informasi selengkapnya tentang inferensi di Cloud TPU v5e, lihat pengantar inferensi Cloud TPU v5e.