Melatih DLRM dan DCN pada Cloud TPU (TF 2.x)


Tutorial ini menunjukkan cara melatih model peringkat DLRM dan DCN v2 yang dapat digunakan untuk tugas seperti prediksi rasio klik-tayang (CTR). Lihat catatan dalam artikel Menyiapkan untuk menjalankan model DLRM atau DCN guna mengetahui cara menyetel parameter untuk melatih model peringkat DLRM atau DCN v2.

Input model berupa fitur numerik dan kategoris, sedangkan output-nya berupa skalar (misalnya probabilitas klik). Model ini dapat dilatih dan dievaluasi di Cloud TPU. Model deep peringkat memerlukan banyak memori (untuk embedding tabel/pencarian) dan komputasi intensif untuk jaringan dalam (MLP). TPU dirancang untuk keduanya.

Model ini menggunakan lapisan TPUEmbedding untuk fitur kategoris. Embedding TPU mendukung tabel embedding besar dengan pencarian cepat, dan ukuran tabel embedding diskalakan secara linear dengan ukuran pod TPU. Tabel embedding hingga 90 GB dapat digunakan untuk TPU v3-8, 5,6 TB untuk Pod v3-512, dan 22,4 TB untuk Pod TPU v3-2048.

Kode model ada di library TensorFlow Recommenders, sedangkan pipeline input, konfigurasi, dan loop pelatihan dijelaskan di TensorFlow Model Garden.

Tujuan

  • Menyiapkan lingkungan pelatihan
  • Menjalankan tugas pelatihan menggunakan data sintetis
  • Memverifikasi 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

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.

Menyiapkan resource

Bagian ini memberikan informasi tentang penyiapan bucket Cloud Storage, VM, dan resource Cloud TPU yang digunakan dalam tutorial ini.

  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}

    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 dengan opsi -l yang menentukan region tempat bucket harus dibuat. Lihat jenis dan zona untuk mengetahui detail selengkapnya tentang zona dan region:

    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. Alat gcloud compute tpus execution-groups yang digunakan dalam tutorial ini 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 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 dlrm-dcn-tutorial \
    --zone=europe-west4-a \
    --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=dlrm-dcn-tutorial \
    --zone=europe-west4-a \
    --disk-size=300 \
    --machine-type=n1-standard-8 \
    --tf-version=2.12.0

    Deskripsi flag perintah

    vm-only
    Buat VM saja. Secara default, perintah gcloud compute tpus execution-groups akan membuat VM dan Cloud TPU.
    name
    Nama Cloud TPU yang akan dibuat.
    zone
    Zona tempat Anda berencana membuat Cloud TPU.
    disk-size
    Ukuran hard disk dalam GB VM yang dibuat oleh perintah gcloud compute tpus execution-groups.
    machine-type
    Jenis mesin VM Compute Engine yang akan dibuat.
    tf-version
    Versi TensorFlow ctpu diinstal di VM.
  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 dlrm-dcn-tutorial --zone=europe-west4-a

    Node TPU

    gcloud compute ssh dlrm-dcn-tutorial --zone=europe-west4-a

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

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 PYTHONPATH="/usr/share/tpu/models/:${PYTHONPATH}"
(vm)$ export EXPERIMENT_NAME=dlrm-exp

Tetapkan variabel lingkungan untuk nama TPU.

VM TPU

(vm)$ export TPU_NAME=local

Node TPU

(vm)$ export TPU_NAME=dlrm-dcn-tutorial

Aplikasi pelatihan mengharapkan data pelatihan Anda dapat diakses di Cloud Storage. Aplikasi pelatihan juga menggunakan bucket Cloud Storage Anda untuk menyimpan checkpoint selama pelatihan.

Menyiapkan untuk menjalankan model DLRM atau DCN dengan data sintetis

Model ini dapat dilatih pada berbagai set data. Dua platform yang umum digunakan adalah Criteo Terabyte dan Criteo Kaggle. Tutorial ini melatih data sintetis dengan menyetel flag use_synthetic_data=True.

Set data sintetis hanya berguna untuk memahami cara menggunakan Cloud TPU dan memvalidasi performa end-to-end. Angka akurasi dan model tersimpan tidak akan berarti.

Kunjungi situs Criteo Terabyte dan Criteo Kaggle untuk mendapatkan informasi tentang cara mendownload dan melakukan prapemrosesan set data ini.

  1. Instal paket yang diperlukan.

    (vm)$ pip3 install tensorflow-recommenders
    (vm)$ pip3 install -r /usr/share/tpu/models/official/requirements.txt
  2. Ubah ke direktori skrip.

    VM TPU

    (vm)$ cd /usr/share/tpu/models/official/recommendation/ranking

    Node TPU

    (vm)$ cd /usr/share/models/official/recommendation/ranking
  3. Jalankan skrip pelatihan. Contoh ini menggunakan set data palsu mirip Criteo untuk melatih model DLRM. Pelatihan ini memerlukan waktu sekitar 20 menit.

    export EMBEDDING_DIM=32
    
    python3 train.py --mode=train_and_eval \
         --model_dir=${STORAGE_BUCKET}/model_dirs/${EXPERIMENT_NAME} --params_override="
         runtime:
             distribution_strategy: 'tpu'
         task:
             use_synthetic_data: true
             train_data:
                 input_path: '${DATA_DIR}/train/*'
                 global_batch_size: 16384
             validation_data:
                 input_path: '${DATA_DIR}/eval/*'
                 global_batch_size: 16384
             model:
                 num_dense_features: 13
                 bottom_mlp: [512,256,${EMBEDDING_DIM}]
                 embedding_dim: ${EMBEDDING_DIM}
                 top_mlp: [1024,1024,512,256,1]
                 interaction: 'dot'
                 vocab_sizes: [39884406, 39043, 17289, 7420, 20263, 3, 7120, 1543, 63,
                     38532951, 2953546, 403346, 10, 2208, 11938, 155, 4, 976, 14,
                     39979771, 25641295, 39664984, 585935, 12972, 108, 36]
         trainer:
             use_orbit: false
             validation_interval: 1000
             checkpoint_interval: 1000
             validation_steps: 500
             train_steps: 1000
             steps_per_loop: 1000
         "
    

Pelatihan ini berjalan sekitar 10 menit di TPU v3-8. Setelah selesai, Anda akan melihat pesan yang mirip dengan yang berikut ini:

I0621 21:32:58.519792 139675269142336 tpu_embedding_v2_utils.py:907] Done with log of TPUEmbeddingConfiguration.
I0621 21:32:58.540874 139675269142336 tpu_embedding_v2.py:389] Done initializing TPU Embedding engine.
1000/1000 [==============================] - 335s 335ms/step - auc: 0.7360 - accuracy: 0.6709 - prediction_mean: 0.4984
- label_mean: 0.4976 - loss: 0.0734 - regularization_loss: 0.0000e+00 - total_loss: 0.0734 - val_auc: 0.7403
- val_accuracy: 0.6745 - val_prediction_mean: 0.5065 - val_label_mean: 0.4976 - val_loss: 0.0749
- val_regularization_loss: 0.0000e+00 - val_total_loss: 0.0749

Model: "ranking"
_________________________________________________________________
Layer (type)                 Output Shape              Param #
=================================================================
tpu_embedding (TPUEmbedding) multiple                  1
_________________________________________________________________
mlp (MLP)                    multiple                  154944
_________________________________________________________________
mlp_1 (MLP)                  multiple                  2131969
_________________________________________________________________
dot_interaction (DotInteract multiple                  0
_________________________________________________________________
ranking_1 (Ranking)          multiple                  0
=================================================================
Total params: 2,286,914
Trainable params: 2,286,914
Non-trainable params: 0
_________________________________________________________________
I0621 21:43:54.977140 139675269142336 train.py:177] Train history: {'auc': [0.7359596490859985],
'accuracy': [0.67094486951828], 'prediction_mean': [0.4983849823474884], 'label_mean': [0.4975697994232178],
'loss': [0.07338511198759079], 'regularization_loss': [0], 'total_loss': [0.07338511198759079],
'val_auc': [0.7402724623680115], 'val_accuracy': [0.6744520664215088], 'val_prediction_mean': [0.5064718723297119],
'val_label_mean': [0.4975748658180237], 'val_loss': [0.07486172765493393],
'val_regularization_loss': [0], 'val_total_loss': [0.07486172765493393]}

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. 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 dlrm-dcn-tutorial \
    --zone=europe-west4-a

    Node TPU

    $ gcloud compute tpus execution-groups delete dlrm-dcn-tutorial \
    --zone=europe-west4-a
  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=europe-west4-a

    Node TPU

    $ gcloud compute tpus execution-groups list --zone=europe-west4-a
  4. Hapus bucket Cloud Storage menggunakan gsutil. 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.