Tutorial ini menunjukkan cara melatih model Keras ResNet di Cloud TPU menggunakan tf.distribute.TPUStrategy
.
Jika belum terbiasa menggunakan Cloud TPU, sebaiknya baca quickstart untuk framework Anda guna 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.
Sebelum memulai
Sebelum memulai tutorial ini, pastikan project Google Cloud Anda sudah disiapkan dengan benar.
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.
-
Make sure that billing is enabled for your Google Cloud project.
-
Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.
-
Make sure that billing is enabled for your Google Cloud project.
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.
Pelatihan perangkat tunggal Cloud TPU
Bagian ini memberikan informasi tentang penyiapan resource Cloud Storage, VM, dan Cloud TPU untuk pelatihan perangkat tunggal.
Buka jendela Cloud Shell.
Buat variabel untuk ID project Anda.
$ export PROJECT_ID=project-id
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. KlikAuthorize
di bagian bawah halaman untuk mengizinkangcloud
melakukan panggilan API dengan kredensial Anda.Membuat Akun Layanan untuk project Cloud TPU.
Akun layanan memungkinkan layanan Cloud TPU mengakses layanan Google Cloud lainnya.
$ 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
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. Perintah
gcloud
yang digunakan dalam tutorial ini untuk menyiapkan TPU juga 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.Siapkan set data Anda atau gunakan fake_imagenet
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.
Jika Anda ingin menggunakan set data ImageNet lengkap, lihat Mendownload, melakukan prapemrosesan, dan mengupload set data ImageNet.
Luncurkan resource TPU menggunakan perintah
gcloud
. Perintah yang digunakan bergantung pada apakah Anda menggunakan VM TPU atau node TPU. Untuk informasi selengkapnya tentang dua arsitektur VM, lihat Arsitektur Sistem.VM TPU
$ gcloud compute tpus tpu-vm create resnet-tutorial \ --zone=us-central2-b \ --accelerator-type=v4-8 \ --version=tpu-vm-tf-2.16.1-pjrt
Deskripsi flag perintah
zone
- Zona tempat Anda berencana membuat Cloud TPU.
accelerator-type
- Jenis akselerator menentukan versi dan ukuran Cloud TPU yang ingin Anda buat. Untuk mengetahui informasi selengkapnya tentang jenis akselerator yang didukung untuk setiap versi TPU, lihat versi TPU.
version
- Versi software Cloud TPU.
Node TPU
gcloud compute tpus execution-groups create \ --project=${PROJECT_ID} \ --zoneus-central2-b \ --name=resnet-tutorial \ --disk-size=300 \ --machine-type=n1-standard-16 \ --accelerator-type=v3-8 \ --tf-version=2.12.0
Deskripsi flag perintah
project
- ID project Google Cloud Anda
zone
- Zona tempat Anda berencana membuat Cloud TPU.
name
- Nama Cloud TPU yang akan dibuat.
disk-size
- Ukuran hard disk dalam GB VM yang dibuat oleh perintah
gcloud
. machine-type
- Jenis mesin VM Compute Engine yang akan dibuat.
accelerator-type
- Jenis Cloud TPU yang akan dibuat.
tf-version
- Versi Tensorflow
gcloud
dapat diinstal di VM.
Untuk mengetahui informasi lebih lanjut tentang perintah
gcloud
, lihat Referensi gcloud.Jika Anda tidak login secara otomatis ke instance Compute Engine, login dengan menjalankan perintah
ssh
berikut. Saat Anda login ke VM, perintah shell Anda akan berubah dariusername@projectname
menjadiusername@vm-name
:VM TPU
$ gcloud compute tpus tpu-vm ssh resnet-tutorial --zone=us-central2-b
Node TPU
$ gcloud compute ssh resnet-tutorial --zone=us-central2-b
Saat Anda melanjutkan petunjuk ini, jalankan setiap perintah yang diawali dengan
(vm)$
di jendela sesi VM Anda.Tetapkan variabel nama Cloud TPU.
VM TPU
(vm)$ export TPU_NAME=local
Node TPU
(vm)$ export TPU_NAME=resnet-tutorial
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-2x (vm)$ export DATA_DIR=gs://cloud-tpu-test-datasets/fake_imagenet
Aplikasi pelatihan mengharapkan data pelatihan Anda dapat diakses di Cloud Storage. Aplikasi pelatihan juga menggunakan bucket Cloud Storage untuk menyimpan checkpoint selama pelatihan.
Saat membuat TPU, jika Anda menetapkan parameter
--version
ke versi yang diakhiri dengan-pjrt
, tetapkan variabel lingkungan berikut untuk mengaktifkan runtime PJRT:(vm)$ export NEXT_PLUGGABLE_DEVICE_USE_C_API=true (vm)$ export TF_PLUGGABLE_DEVICE_LIBRARY_PATH=/lib/libtpu.so
Instal persyaratan TensorFlow.
Perintah yang digunakan bergantung pada apakah Anda menggunakan VM TPU atau Node TPU.
VM TPU
(vm)$ pip3 install -r /usr/share/tpu/models/official/requirements.txt
Node TPU
(vm)$ pip3 install --user -r /usr/share/models/official/requirements.txt
Skrip pelatihan ResNet memerlukan paket tambahan. Instal sekarang:
(vm)$ pip3 install --user tensorflow-model-optimization>=0.1.3
Ubah ke direktori yang menyimpan model:
VM TPU
(vm)$ cd /usr/share/tpu/tensorflow/resnet50_keras
Node TPU
(vm)$ cd /usr/share/models
Tetapkan variabel lingkungan
PYTHONPATH
:VM TPU
(vm)$ /usr/share/tpu/tensorflow/resnet50_keras"
Node TPU
(vm)$ export PYTHONPATH="${PYTHONPATH}:/usr/share/models"
Jalankan skrip pelatihan. Kode ini menggunakan set data palsu_imagenet dan melatih ResNet untuk 100 langkah.
VM TPU
(vm)$ resnet50.py --tpu=local --data=gs://cloud-tpu-test-datasets/fake_imagenet
Command flag descriptions
tpu
- The name of your TPU.
data
- Specifies the directory where checkpoints and summaries are stored
during model training. If the folder is missing, the program creates
one. When using a Cloud TPU, the
model_dir
must be a Cloud Storage path (gs://...
). You can reuse an existing folder to load current checkpoint data and to store additional checkpoints as long as the previous checkpoints were created using TPU of the same size and TensorFlow version.
Node TPU
(vm)$ python3 official/vision/train.py \ --tpu=${TPU_NAME} \ --experiment=resnet_imagenet \ --mode=train_and_eval \ --config_file=official/vision/configs/experiments/image_classification/imagenet_resnet50_tpu.yaml \ --model_dir=${MODEL_DIR} \ --params_override="task.train_data.input_path=${DATA_DIR}/train*, task.validation_data.input_path=${DATA_DIR}/validation*,task.train_data.global_batch_size=2048,task.validation_data.global_batch_size=2048,trainer.train_steps=100"
Deskripsi flag perintah
tpu
- Nama TPU Anda.
model_dir
- Menentukan direktori tempat checkpoint dan ringkasan disimpan selama pelatihan model. Jika foldernya tidak ada, program akan membuat
folder tersebut. Saat menggunakan Cloud TPU,
model_dir
harus berupa jalur Cloud Storage (gs://...
). Anda dapat menggunakan kembali folder yang ada untuk memuat data checkpoint saat ini dan menyimpan checkpoint tambahan selama checkpoint sebelumnya dibuat menggunakan TPU dengan ukuran dan versi TensorFlow yang sama.
Tindakan ini akan melatih ResNet untuk 100 langkah dan akan selesai pada node TPU v3-8 dalam waktu sekitar 3 menit. Di akhir 100 langkah ini, output yang mirip dengan berikut akan muncul:
I0624 17:04:26.974905 140457742666816 controller.py:290] eval | step: 100 | eval time: 23.3 sec | output: {'accuracy': 0.0010141226, 'top_5_accuracy': 0.0051457332, 'validation_loss': 8.448798} eval | step: 100 | eval time: 23.3 sec | output: {'accuracy': 0.0010141226, 'top_5_accuracy': 0.0051457332, 'validation_loss': 8.448798}
Sekarang Anda telah menyelesaikan contoh pelatihan satu perangkat. Gunakan langkah-langkah berikut untuk menghapus resource TPU satu perangkat saat ini.
Putuskan koneksi dari instance Compute Engine:
(vm)$ exit
Prompt Anda sekarang akan menjadi
username@projectname
, yang menunjukkan bahwa Anda berada di Cloud Shell.Hapus resource TPU.
VM TPU
$ gcloud compute tpus tpu-vm delete resnet-tutorial \ --zone=us-central2-b
Deskripsi flag perintah
zone
- Zona tempat Cloud TPU Anda berada.
Node TPU
$ gcloud compute tpus execution-groups delete resnet-tutorial \ --zone=us-central2-b
Deskripsi flag perintah
zone
- Zona yang berisi TPU yang akan dihapus.
Di tahap ini, Anda dapat mengakhiri tutorial ini dan membersihkan, atau melanjutkan dan mempelajari cara menjalankan model di Pod Cloud TPU.
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.
Pelatihan Pod TPU
Bagian ini memberikan informasi tentang penyiapan bucket Cloud Storage dan resource Cloud TPU untuk pelatihan Pod.
Buka jendela Cloud Shell.
Buat variabel untuk ID project Anda.
export PROJECT_ID=project-id
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. KlikAuthorize
di bagian bawah halaman untuk mengizinkangcloud
melakukan panggilan Google Cloud API dengan kredensial Anda.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
Buat bucket Cloud Storage menggunakan perintah berikut atau gunakan bucket yang Anda buat sebelumnya untuk project Anda:
gsutil mb -p ${PROJECT_ID} -c standard -l us-central2 gs://bucket-name
Bucket Cloud Storage ini menyimpan data yang Anda gunakan untuk melatih model dan hasil pelatihan. Perintah
gcloud
yang digunakan dalam tutorial ini akan 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 VM TPU Anda.
Siapkan set data Anda atau gunakan fake_imagenet
ImageNet adalah database gambar. Gambar dalam database diatur menjadi hierarki, dengan setiap node hierarki digambarkan dalam ratusan gambar.
Pelatihan Pod default mengakses versi demonstrasi set data ImageNet lengkap, yang disebut sebagai fake_imagenet. Versi demonstrasi ini memungkinkan Anda menguji pelatihan Pod, sekaligus mengurangi persyaratan penyimpanan dan waktu yang biasanya terkait dengan melatih model berdasarkan database ImageNet lengkap.
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.
Jika Anda ingin menggunakan set data ImageNet lengkap, lihat Mendownload, melakukan prapemrosesan, dan mengupload set data ImageNet.
Luncurkan resource Cloud TPU Anda menggunakan perintah
gcloud
.Perintah yang digunakan bergantung pada apakah Anda menggunakan VM TPU atau node TPU. Untuk informasi selengkapnya tentang dua arsitektur VM, lihat Arsitektur Sistem. Untuk mengetahui informasi lebih lanjut tentang perintah
gcloud
, lihat Referensi gcloud. Tutorial ini menentukan Pod v3-32. Untuk opsi Pod lainnya, lihat versi TPU.VM TPU
$ gcloud compute tpus tpu-vm create resnet-tutorial \ --zone=us-central2-b \ --accelerator-type=v4-32 \ --version=tpu-vm-tf-2.16.1-pod-pjrt
Deskripsi flag perintah
zone
- Zona tempat Anda berencana membuat Cloud TPU.
accelerator-type
- Jenis akselerator menentukan versi dan ukuran Cloud TPU yang ingin Anda buat. Untuk mengetahui informasi selengkapnya tentang jenis akselerator yang didukung untuk setiap versi TPU, lihat versi TPU.
version
- Versi software Cloud TPU.
Node TPU
$ gcloud compute tpus execution-groups create \ --zone=us-central2-b \ --name=resnet-tutorial \ --accelerator-type=v3-32 \ --tf-version=2.12.0
Jika Anda tidak login secara otomatis ke instance Compute Engine, login dengan menjalankan perintah
ssh
berikut. Saat Anda login ke VM, perintah shell Anda akan berubah dariusername@projectname
menjadiusername@vm-instance-name
:VM TPU
$ gcloud compute tpus tpu-vm ssh resnet-tutorial --zone=us-central2-b
Node TPU
$ gcloud compute ssh resnet-tutorial --zone=us-central2-b
Saat Anda melanjutkan petunjuk ini, jalankan setiap perintah yang diawali dengan
(vm)$
di jendela sesi VM Anda.Ekspor variabel penyiapan Cloud TPU:
(vm)$ export ZONE=us-central2-b (vm)$ export STORAGE_BUCKET=gs://bucket-name
(vm)$ export TPU_NAME=resnet-tutorial (vm)$ export DATA_DIR=gs://cloud-tpu-test-datasets/fake_imagenet (vm)$ export MODEL_DIR=${STORAGE_BUCKET}/resnet-2x-pod
Aplikasi pelatihan mengharapkan data pelatihan Anda dapat diakses di Cloud Storage. Aplikasi pelatihan juga menggunakan bucket Cloud Storage Anda untuk menyimpan checkpoint selama pelatihan.
Skrip pelatihan ResNet memerlukan paket tambahan. Instal sekarang.:
VM TPU
(vm)$ pip3 install --user tensorflow-model-optimization>=0.1.3
Node TPU
(vm)$ pip3 install --user tensorflow-model-optimization>=0.1.3
Instal persyaratan TensorFlow.
Perintah yang digunakan bergantung pada apakah Anda menggunakan VM TPU atau Node TPU.
VM TPU
(vm)$ pip3 install -r /usr/share/tpu/models/official/requirements.txt
Node TPU
(vm)$ pip3 install --user -r /usr/share/models/official/requirements.txt
Tetapkan variabel lingkungan
PYTHONPATH
:VM TPU
(vm)$ export PYTHONPATH="PYTHONPATH=/usr/share/tpu/tensorflow/resnet50_keras" (vm)$ export TPU_LOAD_LIBRARY=0
Node TPU
(vm)$ export PYTHONPATH="${PYTHONPATH}:/usr/share/models"
Ubah ke direktori yang menyimpan model:
VM TPU
(vm)$ cd /usr/share/tpu/tensorflow/resnet50_keras
Node TPU
(vm)$ cd /usr/share/models
Latih model.
(vm)$ resnet50.py --tpu=${TPU_NAME} --data=gs://cloud-tpu-test-datasets/fake_imagenet
Deskripsi flag perintah
tpu
- Nama TPU Anda.
data
- Menentukan direktori tempat checkpoint dan ringkasan disimpan selama pelatihan model. Jika foldernya tidak ada, program akan membuat
folder tersebut. Saat menggunakan Cloud TPU,
model_dir
harus berupa jalur Cloud Storage (gs://...
). Anda dapat menggunakan kembali folder yang ada untuk memuat data checkpoint saat ini dan menyimpan checkpoint tambahan selama checkpoint sebelumnya dibuat menggunakan Cloud TPU dengan ukuran dan versi TensorFlow yang sama.
Prosedur ini melatih model pada set data palsu_imagenet ke 100 langkah pelatihan dan 13 langkah evaluasi. Pelatihan ini memerlukan waktu sekitar 2 menit di Cloud TPU v3-32. Setelah pelatihan dan evaluasi selesai, pesan yang mirip dengan berikut ini akan muncul:
{'accuracy': 0.0009716797, 'learning_rate': 0.10256411, 'top_5_accuracy': 0.0049560545, 'training_loss': 8.5587225} train | step: 100 | steps/sec: 1.2 | output: {'accuracy': 0.0009716797, 'learning_rate': 0.10256411, 'top_5_accuracy': 0.0049560545, 'training_loss': 8.5587225} eval | step: 100 | eval time: 24.8 sec | output: {'accuracy': 0.0010141226, 'top_5_accuracy': 0.004356971, 'validation_loss': 8.50038} eval | step: 100 | eval time: 24.8 sec | output: {'accuracy': 0.0010141226, 'top_5_accuracy': 0.004356971, 'validation_loss': 8.50038}
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.
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.Hapus resource Cloud TPU dan Compute Engine Anda. Perintah yang digunakan untuk menghapus resource bergantung pada apakah Anda menggunakan VM TPU atau Node TPU. Untuk informasi selengkapnya, lihat Arsitektur Sistem.
VM TPU
$ gcloud compute tpus tpu-vm delete resnet-tutorial \ --zone=us-central2-b
Node TPU
$ gcloud compute tpus execution-groups delete resnet-tutorial \ --zone=us-central2-b
Verifikasi bahwa resource telah dihapus dengan menjalankan
gcloud compute tpus execution-groups list
. Penghapusan memerlukan waktu beberapa menit. Output dari perintah berikut tidak boleh menyertakan resource TPU apa pun yang dibuat dalam tutorial ini:VM TPU
$ gcloud compute tpus tpu-vm list --zone=us-central2-b
Node TPU
$ gcloud compute tpus execution-groups list --zone=us-central2-b
Jalankan
gsutil
seperti yang ditunjukkan, dengan mengganti bucket-name dengan nama bucket Cloud Storage yang Anda buat untuk tutorial ini:$ 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.
- Pelajari cara melatih dan mengevaluasi menggunakan data Anda sendiri sebagai pengganti set datafake_imagenet atau ImageNet dengan mengikuti tutorial konversi set data. Tutorial ini menjelaskan cara menggunakan skrip contoh pengonversi data klasifikasi gambar guna mengonversi set data mentah untuk klasifikasi gambar menjadi TFRecords yang dapat digunakan oleh model Tensorflow Cloud TPU.
- Jalankan kolab Cloud TPU yang menunjukkan cara menjalankan model klasifikasi gambar menggunakan data gambar Anda sendiri.
- Pelajari tutorial Cloud TPU lainnya.
- Pelajari cara menggunakan alat pemantauan TPU di TensorBoard.
- Lihat cara melatih ResNet dengan Cloud TPU dan GKE.