BERT Fine Tuning dengan Cloud TPU: Tugas Klasifikasi Kalimat dan Kalimat (TF 2.x)


Tutorial ini menunjukkan cara melatih model Bidirectional Encoder Representations from Transformers (BERT) di Cloud TPU.

BERT adalah metode representasi bahasa pra-pelatihan. Pra-pelatihan mengacu pada cara BERT pertama kali dilatih pada sumber teks yang besar, seperti Wikipedia. Kemudian, Anda dapat menerapkan hasil pelatihan ke tugas Natural Language Processing (NLP) lainnya, seperti penjawab pertanyaan dan analisis sentimen. Dengan BERT dan Cloud TPU, Anda dapat melatih berbagai model NLP dalam waktu sekitar 30 menit.

Untuk mengetahui informasi selengkapnya tentang BERT, lihat referensi berikut:

Tujuan

  • Membuat bucket Cloud Storage untuk menyimpan set data dan output model Anda.
  • 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

Bagian ini memberikan informasi tentang penyiapan bucket Cloud Storage dan VM Compute Engine.

  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}
  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 us-central1 gs://bucket-name

    Bucket Cloud Storage ini menyimpan data yang Anda gunakan untuk melatih model dan hasil pelatihan. Perintah yang Anda gunakan untuk membuat TPU (gcloud compute tpus execution-groups create untuk arsitektur TPU Node atau gcloud compute tpus tpu-vm create untuk arsitektur VM TPU) akan menyiapkan izin default untuk Akun Layanan Cloud TPU yang Anda siapkan pada 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 dan Cloud 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. Untuk mengetahui informasi lebih lanjut tentang perintah gcloud, lihat Referensi gcloud.

    VM TPU

    $ gcloud compute tpus tpu-vm create bert-tutorial \
    --zone=us-central1-b \
    --accelerator-type=v3-8 \
    --version=tpu-vm-tf-2.16.1-se

    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 \
      --name=bert-tutorial \
      --zone=us-central1-b \
      --tf-version=2.12.0 \
      --machine-type=n1-standard-1 \
      --accelerator-type=v3-8 

    Deskripsi flag perintah

    name
    Nama Cloud TPU yang akan dibuat.
    zone
    Zona tempat Anda berencana membuat Cloud TPU.
    tf-version
    Versi Tensorflow ctpu dapat diinstal di VM.
    machine-type
    Jenis mesin VM Compute Engine yang akan dibuat.
    accelerator type
    Jenis Cloud TPU yang akan dibuat.
  7. 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 dari username@projectname menjadi username@vm-name:

    VM TPU

    gcloud compute tpus tpu-vm ssh bert-tutorial --zone=us-central1-b

    Node TPU

    gcloud compute ssh bert-tutorial --zone=us-central1-b

    Saat Anda melanjutkan petunjuk ini, jalankan setiap perintah yang diawali dengan (vm)$ di jendela sesi VM Anda.

  8. Buat variabel lingkungan untuk nama TPU.

    VM TPU

    (vm)$ export TPU_NAME=local

    Node TPU

    (vm)$ export TPU_NAME=bert-tutorial

Menyiapkan set data

  1. Tentukan bucket penyimpanan yang diperlukan untuk menyimpan model dan set data:

    (vm)$ export STORAGE_BUCKET=gs://bucket-name
  2. Salin file checkpoint dan kosakata yang telah dilatih sebelumnya ke bucket penyimpanan Anda:

      (vm)$ curl https://storage.googleapis.com/tf_model_garden/nlp/bert/v3/uncased_L-12_H-768_A-12.tar.gz -o uncased_L-12_H-768_A-12.tar.gz
      (vm)$ mkdir -p uncased_L-12_H-768_A-12
      (vm)$ tar -xvf uncased_L-12_H-768_A-12.tar.gz
      (vm)$ gsutil -m cp -R uncased_L-12_H-768_A-12 ${STORAGE_BUCKET} 

Melatih model

  1. Tentukan beberapa parameter value yang diperlukan saat Anda melatih dan mengevaluasi model:

      (vm)$ export INIT_CHECKPOINT=${STORAGE_BUCKET}/uncased_L-12_H-768_A-12/bert_model.ckpt
      (vm)$ export TFDS_DIR=${STORAGE_BUCKET}/tfds
      (vm)$ export VOCAB_FILE=${STORAGE_BUCKET}/uncased_L-12_H-768_A-12/vocab.txt
      (vm)$ export MODEL_DIR=${STORAGE_BUCKET}/bert-output
      (vm)$ export TASK=mnli
      

  2. 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
    (vm)$ pip3 install tensorflow-datasets==4.6.0
  3. Menetapkan variabel lingkungan PYTHONPATH

    VM TPU

    (vm)$ export PYTHONPATH=/usr/share/tpu/models

    Node TPU

    (vm)$ export PYTHONPATH="${PYTHONPATH}:/usr/share/models"
  4. Ubah ke direktori yang menyimpan model:

    VM TPU

    (vm)$ cd /usr/share/tpu/models

    Node TPU

    (vm)$ cd /usr/share/models
  5. Jalankan skrip pelatihan:

    (vm)$ python3 official/nlp/train.py \
      --tpu=${TPU_NAME} \
      --experiment=bert/sentence_prediction_text \
      --mode=train_and_eval \
      --model_dir=${MODEL_DIR} \
      --config_file=official/nlp/configs/experiments/glue_mnli_text.yaml \
      --params_override="runtime.distribution_strategy=tpu, task.init_checkpoint=${INIT_CHECKPOINT}, task.train_data.tfds_data_dir=${TFDS_DIR}, task.train_data.vocab_file=${VOCAB_FILE}, task.validation_data.tfds_data_dir=${TFDS_DIR}, task.validation_data.vocab_file=${VOCAB_FILE}, trainer.train_steps=2000"

    Deskripsi flag perintah

    tpu
    Nama Cloud TPU yang akan digunakan untuk pelatihan.
    mode
    Salah satu dari train, eval, train_and_eval, atau predict.
    model_dir
    Jalur Cloud Storage tempat checkpoint dan ringkasan disimpan selama pelatihan model. Anda dapat menggunakan kembali folder yang ada untuk memuat checkpoint yang dihasilkan sebelumnya dan menyimpan checkpoint tambahan selama checkpoint sebelumnya dibuat menggunakan Cloud TPU dengan ukuran dan versi TensorFlow yang sama.

    Skrip melatih 2000 langkah, lalu menjalankan 307 langkah evaluasi. Pada TPU v3-8, setelah sekitar 5 menit, skrip pelatihan akan selesai dan menampilkan hasil yang mirip dengan ini:

    I0719 00:47:52.683979 140297079573568 controller.py:457] train | step:   2000 | steps/sec:   26.3 | output:
    {'cls_accuracy': 0.7249375,
     'learning_rate': 1.4670059e-05,
     'training_loss': 0.6740678}
    train | step:   2000 | steps/sec:   26.3 | output:
    {'cls_accuracy': 0.7249375,
     'learning_rate': 1.4670059e-05,
     'training_loss': 0.6740678}
    I0719 00:47:53.184051 140297079573568 controller.py:277]  eval | step:   2000 | running 307 steps of evaluation...
    eval | step:   2000 | running 307 steps of evaluation...
    

Pembersihan

  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. 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 bert-tutorial \
    --zone=us-central1-b

    Node TPU

    $ gcloud compute tpus execution-groups delete bert-tutorial \
    --zone=us-central1-b
  3. 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 apa pun yang dibuat dalam tutorial ini:

    VM TPU

    $ gcloud compute tpus tpu-vm list --zone=us-central1-b

    Node TPU

    $ gcloud compute tpus execution-groups list --zone=us-central1-b
  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.