Transformer pelatihan pada Cloud TPU (TF 2.x)


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. 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.

Berlatih dengan satu perangkat Cloud TPU

Bagian ini memberikan informasi tentang penyiapan bucket Cloud Storage dan VM TPU untuk pelatihan perangkat tunggal.

  1. Buka jendela Cloud Shell.

    Buka Cloud Shell

  2. Buat variabel lingkungan untuk project ID Anda.

    export PROJECT_ID=project-id
  3. 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. 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.

    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
    

  5. 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

  1. 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.
  2. Hubungkan ke VM Cloud TPU dengan menjalankan perintah ssh berikut.

    gcloud compute tpus tpu-vm ssh transformer-tutorial --zone=us-central2-b
  3. 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"
  4. 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
  5. Menginstal persyaratan Tensorflow.

    (vm)$ pip3 install -r /usr/share/tpu/models/official/requirements.txt
  6. 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}
  7. 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
  8. Buka direktori pelatihan

    (vm)$ cd /usr/share/tpu/models/
  9. 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.

  10. Putuskan koneksi dari instance Compute Engine:

    (vm)$ exit

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

  11. 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

  1. Buka jendela Cloud Shell.

    Buka Cloud Shell

  2. Buat variabel untuk project ID 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 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 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

  1. 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.
  2. Hubungkan ke VM TPU dengan menjalankan perintah ssh berikut. Saat Anda login ke VM, perintah shell Anda akan berubah dari username@projectname menjadi username@vm-name:

    gcloud compute tpus tpu-vm ssh transformer-tutorial --zone=us-central2-b
  3. Instal persyaratan TensorFlow.

    (vm)$ pip3 install -r /usr/share/tpu/models/official/requirements.txt

Menyiapkan dan memulai pelatihan Pod

  1. 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
  2. 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}

  3. 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
  4. Ubah ke direktori pelatihan:

    (vm)$ cd /usr/share/tpu/models/
  5. 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.

  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. Hapus resource Cloud TPU dan Compute Engine Anda.

    $ gcloud compute tpus tpu-vm delete transformer-tutorial \
      --zone=us-central2-b
  3. 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.