Melatih HuggingFace GPT2 pada Cloud TPU (TF 2.x)


Jika Anda belum terbiasa menggunakan Cloud TPU, sebaiknya baca quickstart untuk mempelajari cara membuat VM TPU.

Tutorial ini menunjukkan cara melatih model HuggingFace GPT2 pada Cloud TPU.

Tujuan

  • Buat Cloud TPU
  • Menginstal dependensi
  • Menjalankan tugas pelatihan

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.

Melatih HuggingFace GPT2 dengan Cloud TPU

  1. Buka jendela Cloud Shell.

    Buka Cloud Shell

  2. Buat variabel lingkungan untuk project ID Anda.

    export PROJECT_ID=your-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
    

Buat Cloud TPU

  1. Buat VM Cloud TPU menggunakan perintah gcloud. Perintah berikut akan membuat TPU v4-8. Anda juga dapat membuat Podslice TPU dengan menetapkan flag --accelerator-type ke jenis Podslice, misalnya v4-32.

    $ gcloud compute tpus tpu-vm create hf-gpt2 \
      --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 hf-gpt2 --zone=us-central2-b
    

Menginstal dependensi

  1. Clone repositori Transformers HuggingFace:

    (vm)$ cd /tmp
    (vm)$ git clone https://github.com/huggingface/transformers.git
    (vm)$ cd transformers
    
  2. Instal dependensi:

    (vm)$ pip install .
    (vm)$ pip install -r examples/tensorflow/_tests_requirements.txt
    (vm)$ cd /tmp/transformers/examples/tensorflow/language-modeling
    (vm)$ pip install -r requirements.txt
    
  3. Membuat direktori sementara:

    (vm)$ mkdir /tmp/gpt2-wikitext
    
  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
    

Menjalankan skrip pelatihan

(vm)$ python3 run_clm.py \
  --model_name_or_path distilgpt2 \
  --max_train_samples 1000 \
  --max_eval_samples 100 \
  --num_train_epochs 1 \
  --output_dir /tmp/gpt2-wikitext \
  --dataset_name wikitext \
  --dataset_config_name wikitext-103-raw-v1

Deskripsi flag perintah

model_name_or_path
Nama model yang akan dilatih.
max_train_samples
Jumlah maksimum sampel yang akan digunakan untuk pelatihan.
max_eval_samples
Jumlah maksimum sampel yang akan digunakan untuk evaluasi.
num_train_epochs
Jumlah epoch untuk melatih model.
output_dir
Direktori output untuk skrip pelatihan.
dataset_name
Nama set data yang akan digunakan.
dataset_config_name
Nama konfigurasi set data

Setelah pelatihan selesai, pesan yang mirip dengan berikut akan ditampilkan:

  125/125 [============================] - ETA: 0s - loss: 3.61762023-07-07 21:38:17.902850: W tensorflow/core/framework/dataset.cc:956] Input of GeneratorDatasetOp::Dataset will not be optimized because the dataset does not implement the AsGraphDefInternal() method needed to apply optimizations.
  125/125 [============================] - 763s 6s/step - loss: 3.6176 - val_loss: 3.4233
  Configuration saved in /tmp/gpt2-wikitext/config.json
  Configuration saved in /tmp/gpt2-wikitext/generation_config.json
  Model weights saved in /tmp/gpt2-wikitext/tf_model.h5
  D0707 21:38:45.640973681   12027 init.cc:191]                          grpc_shutdown starts clean-up now
  

Pembersihan

  1. Putuskan koneksi dari instance VM TPU:

    (vm)$ exit
    

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

  2. Hapus resource TPU.

    $ gcloud compute tpus tpu-vm delete hf-gpt2 \
    --zone=us-central2-b
    

Langkah selanjutnya

Coba salah satu model referensi yang didukung lain.