Jika belum terbiasa menggunakan Cloud TPU, sebaiknya Anda membaca quickstart untuk mempelajari cara membuat VM TPU.
Tutorial ini menunjukkan cara melatih model Transformer di Cloud TPU. Transformer adalah arsitektur jaringan neural yang memecahkan masalah urutan ke urutan menggunakan mekanisme atensi. Tidak seperti model seq2seq neural tradisional, Transformer tidak melibatkan koneksi berulang. Mekanisme atensi mempelajari dependensi di antara token dalam dua urutan. Karena bobot atensi berlaku untuk semua token dalam urutan, model Transformer dapat dengan mudah menangkap dependensi jarak jauh.
Struktur keseluruhan transformator mengikuti pola encoder-decoder standar. Encoder menggunakan self-attention untuk menghitung representasi urutan input. Decoder menghasilkan token urutan output satu per satu, dengan mengambil output encoder dan token decoder-output sebelumnya sebagai input.
Model ini juga menerapkan embedding pada token input dan output, serta menambahkan encoding posisi konstan. Encoding posisi menambahkan informasi tentang posisi setiap token.
Tujuan
- Membuat bucket Cloud Storage untuk menyimpan set data dan output model Anda.
- Download dan proses terlebih dahulu set data yang digunakan untuk melatih model.
- Menjalankan tugas pelatihan.
- Verifikasi hasil output.
Biaya
Dalam dokumen ini, Anda menggunakan komponen Google Cloud yang dapat ditagih berikut:
- Compute Engine
- Cloud TPU
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.
- 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.
-
Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.
-
Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.
-
Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.
-
Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.
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.
Berlatih dengan satu perangkat Cloud TPU
Bagian ini memberikan informasi tentang penyiapan bucket Cloud Storage dan VM TPU untuk pelatihan perangkat tunggal.
Buka jendela Cloud Shell.
Buat variabel lingkungan untuk project ID Anda.
export PROJECT_ID=project-id
Konfigurasikan Google Cloud CLI untuk menggunakan project Google Cloud 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.
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 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 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.
Melatih model Transformer pada satu Cloud TPU
Luncurkan VM Cloud TPU menggunakan perintah
gcloud
.$ gcloud compute tpus tpu-vm create transformer-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.
Hubungkan ke VM Cloud TPU dengan menjalankan perintah
ssh
berikut.gcloud compute tpus tpu-vm ssh transformer-tutorial --zone=us-central2-b
Mengekspor variabel lingkungan.
(vm)$ export STORAGE_BUCKET=gs://bucket-name (vm)$ export SENTENCEPIECE_MODEL=sentencepiece (vm)$ export SENTENCEPIECE_MODEL_PATH=${STORAGE_BUCKET}/${SENTENCEPIECE_MODEL}.model (vm)$ export TFDS_DIR=${STORAGE_BUCKET}/tfds (vm)$ export PARAM_SET=big (vm)$ export TPU_NAME=local (vm)$ export MODEL_DIR=${STORAGE_BUCKET}/transformer/model_${PARAM_SET} (vm)$ export PYTHONPATH="/usr/share/tpu/models:$PYTHONPATH"
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
Menginstal persyaratan Tensorflow.
(vm)$ pip3 install -r /usr/share/tpu/models/official/requirements.txt
Mendownload dan memproses set data terlebih dahulu
(vm)$ python3 -c "import tensorflow_datasets as tfds; tfds.load('wmt14_translate/de-en', split='train+validation', shuffle_files=True, download=True)" (vm)$ python3 /usr/share/tpu/models/official/nlp/data/train_sentencepiece.py --output_model_path=${SENTENCEPIECE_MODEL}
Menyalin set data ke bucket Cloud Storage
(vm)$ gsutil -m cp ${SENTENCEPIECE_MODEL}.model ${STORAGE_BUCKET} (vm)$ gsutil -m cp ${SENTENCEPIECE_MODEL}.vocab ${STORAGE_BUCKET} (vm)$ gsutil -m cp -r tensorflow_datasets/wmt14_translate ${TFDS_DIR}/wmt14_translate
Buka direktori pelatihan
(vm)$ cd /usr/share/tpu/models/
Menjalankan skrip pelatihan
(vm)$ python3 official/nlp/train.py \ --tpu=${TPU_NAME} \ --experiment=wmt_transformer/large \ --mode=train_and_eval \ --model_dir=${MODEL_DIR} \ --params_override="runtime.distribution_strategy=tpu, task.train_data.tfds_data_dir=${TFDS_DIR}, task.validation_data.tfds_data_dir=${TFDS_DIR}, task.sentencepiece_model_path=${SENTENCEPIECE_MODEL_PATH}, trainer.train_steps=10000, trainer.validation_interval=10000"
Deskripsi flag perintah
tpu
- Nama Cloud TPU. Hal ini ditetapkan dengan menentukan variabel lingkungan (
TPU_NAME
). experiment
- Model yang akan dilatih.
mode
- Mode yang digunakan untuk menjalankan skrip.
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.
params_override
- Menetapkan parameter model.
Secara default, model akan dievaluasi setelah setiap 10.000 langkah. Anda dapat meningkatkan jumlah langkah pelatihan atau menentukan seberapa sering evaluasi dijalankan dengan menetapkan parameter ini:
train.train_steps
: Jumlah total langkah pelatihan yang akan dijalankan.trainer.validation_interval
: Jumlah langkah pelatihan yang akan dijalankan di antara evaluasi.
Pelatihan dan evaluasi memerlukan waktu sekitar 20 menit di Cloud TPU v4-8. Saat pelatihan dan evaluasi selesai, pesan yang mirip dengan yang berikut ini akan muncul:
I0208 20:57:19.309512 140039467895872 controller.py:310] eval | step: 10000 | eval time: 69.2 sec | output: {'bleu_score': 19.204771518707275, 'sacrebleu_score': 18.307039308307356, 'validation_loss': 2.0654342} eval | step: 10000 | eval time: 69.2 sec | output: {'bleu_score': 19.204771518707275, 'sacrebleu_score': 18.307039308307356, 'validation_loss': 2.0654342}
Sekarang Anda telah menyelesaikan pelatihan satu perangkat. Gunakan langkah-langkah berikut untuk menghapus resource TPU satu perangkat.
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.
$ gcloud compute tpus tpu-vm delete transformer-tutorial \ --zone=us-central2-b
Deskripsi flag perintah
zone
- Zona tempat Cloud TPU Anda berada.
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
Buka jendela Cloud Shell.
Buat variabel untuk project ID 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.
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-central1 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.
Meluncurkan resource VM TPU
Luncurkan Pod VM TPU menggunakan perintah
gcloud
. Tutorial ini menentukan Pod v4-32. Untuk opsi Pod lainnya, lihat halaman jenis TPU yang tersedia jenis TPU.$ gcloud compute tpus tpu-vm create transformer-tutorial \ --zone=us-central2-b \ --accelerator-type=v3-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.
Hubungkan ke VM TPU dengan menjalankan perintah
ssh
berikut. Saat Anda login ke VM, perintah shell Anda akan berubah dariusername@projectname
menjadiusername@vm-name
:gcloud compute tpus tpu-vm ssh transformer-tutorial --zone=us-central2-b
Instal persyaratan TensorFlow.
(vm)$ pip3 install -r /usr/share/tpu/models/official/requirements.txt
Menyiapkan dan memulai pelatihan Pod
Ekspor variabel penyiapan Cloud TPU:
(vm)$ export PYTHONPATH="/usr/share/tpu/models:$PYTHONPATH" (vm)$ export STORAGE_BUCKET=gs://bucket-name (vm)$ export SENTENCEPIECE_MODEL=sentencepiece (vm)$ export SENTENCEPIECE_MODEL_PATH=${STORAGE_BUCKET}/${SENTENCEPIECE_MODEL}.model (vm)$ export TFDS_DIR=${STORAGE_BUCKET}/tfds (vm)$ export TPU_NAME=transformer-tutorial (vm)$ export PARAM_SET=big (vm)$ export MODEL_DIR=${STORAGE_BUCKET}/transformer/model_${PARAM_SET} (vm)$ export TPU_LOAD_LIBRARY=0
Mengunduh {i>dataset<i}
(vm)$ python3 -c "import tensorflow_datasets as tfds; tfds.load('wmt14_translate/de-en', split='train+validation', shuffle_files=True, download=True)" (vm)$ python3 /usr/share/tpu/models/official/nlp/data/train_sentencepiece.py --output_model_path=${SENTENCEPIECE_MODEL}
Salin set data ke bucket Cloud Storage
(vm)$ gsutil -m cp ${SENTENCEPIECE_MODEL}.model ${STORAGE_BUCKET} (vm)$ gsutil -m cp ${SENTENCEPIECE_MODEL}.vocab ${STORAGE_BUCKET} (vm)$ gsutil -m cp -r tensorflow_datasets/wmt14_translate ${TFDS_DIR}/wmt14_translate
Ubah ke direktori pelatihan:
(vm)$ cd /usr/share/tpu/models/
Jalankan skrip pelatihan:
(vm)$ python3 official/nlp/train.py
--tpu=${TPU_NAME}
--experiment=wmt_transformer/large
--mode=train_and_eval
--model_dir=${MODEL_DIR}
--params_override="runtime.distribution_strategy=tpu, task.train_data.tfds_data_dir=${TFDS_DIR}, task.validation_data.tfds_data_dir=${TFDS_DIR}, task.sentencepiece_model_path=${SENTENCEPIECE_MODEL_PATH}, trainer.train_steps=10000, trainer.validation_interval=10000"Command flag descriptions
tpu
- The name of the Cloud TPU. This is set by specifying
the environment variable (
TPU_NAME
). experiment
- The model to train.
mode
- The mode in which to run the script.
model_dir
- The Cloud Storage bucket where checkpoints and summaries are stored during training. You can use an existing folder to load previously generated checkpoints created on a TPU of the same size and TensorFlow version.
params_override
- Set model parameters.
Secara default, model akan dievaluasi setelah setiap 10.000 langkah. Untuk berlatih agar mencapai konvergensi, ubah train_steps
menjadi 200.000.
Anda dapat meningkatkan jumlah langkah pelatihan atau menentukan seberapa sering evaluasi dijalankan dengan menetapkan parameter berikut:
trainer.train_steps
: Menetapkan jumlah total langkah pelatihan yang akan dijalankan.trainer.validation_interval
: Menetapkan jumlah langkah pelatihan yang akan dijalankan di antara evaluasi.
Pelatihan dan evaluasi memerlukan waktu sekitar 14 menit di Cloud TPU v4-32. Setelah pelatihan dan evaluasi selesai, pesan yang mirip dengan pesan berikut akan muncul:
I0209 22:19:49.143219 139751309618240 controller.py:310] eval | step: 10000 | eval time: 73.6 sec | output: {'bleu_score': 19.401752948760986, 'sacrebleu_score': 18.442741330886378, 'validation_loss': 2.0558002} eval | step: 10000 | eval time: 73.6 sec | output: {'bleu_score': 19.401752948760986, 'sacrebleu_score': 18.442741330886378, 'validation_loss': 2.0558002}
Skrip pelatihan ini melatih 20.000 langkah dan menjalankan evaluasi setiap 2.000 langkah. Pelatihan dan evaluasi khusus ini memerlukan waktu sekitar 8 menit di Pod Cloud TPU v3-32. Saat pelatihan dan evaluasi selesai, pesan yang mirip dengan yang berikut ini akan muncul:
INFO:tensorflow:Writing to file /tmp/tmpdmlanxcf I0218 21:09:19.100718 140509661046592 translate.py:184] Writing to file /tmp/tmpdmlanxcf I0218 21:09:28.043537 140509661046592 transformer_main.py:118] Bleu score (uncased): 1.799112930893898 I0218 21:09:28.043911 140509661046592 transformer_main.py:119] Bleu score (cased): 1.730366237461567
Untuk melatih ke konvergensi, ubah train_steps
menjadi 200000. Anda dapat meningkatkan jumlah langkah pelatihan atau menentukan seberapa sering evaluasi harus dijalankan dengan menetapkan parameter berikut:
--train_steps
: Menetapkan jumlah total langkah pelatihan yang akan dijalankan.--steps_between_evals
: Jumlah langkah pelatihan yang akan dijalankan di antara evaluasi.
Setelah pelatihan dan evaluasi selesai, pesan yang mirip dengan yang berikut akan muncul:
0509 00:27:59.984464 140553148962624 translate.py:184] Writing to file /tmp/tmp_rk3m8jp I0509 00:28:11.189308 140553148962624 transformer_main.py:119] Bleu score (uncased): 1.3239131309092045 I0509 00:28:11.189623 140553148962624 transformer_main.py:120] Bleu score (cased): 1.2855342589318752
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.
$ gcloud compute tpus tpu-vm delete transformer-tutorial \ --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.