Melatih RetinaNet di Cloud TPU (TF 2.x)


Dokumen ini menjelaskan implementasi model deteksi objek RetinaNet. Kode ini tersedia di GitHub.

Petunjuk di bawah ini mengasumsikan bahwa Anda sudah terbiasa menjalankan model di Cloud TPU. Jika baru menggunakan Cloud TPU, Anda dapat membaca Panduan Memulai untuk mendapatkan pengantar dasar.

Jika Anda berencana untuk berlatih di slice Pod TPU, tinjau Pelatihan tentang Pod TPU untuk memahami perubahan parameter yang diperlukan untuk slice Pod.

Tujuan

  • Siapkan set data COCO
  • Membuat bucket Cloud Storage untuk menyimpan set data dan output model
  • Menyiapkan resource TPU untuk pelatihan dan evaluasi
  • Menjalankan pelatihan dan evaluasi pada satu Cloud TPU atau Pod Cloud TPU

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.

Siapkan set data COCO

Tutorial ini menggunakan {i>dataset <i}COCO. Set data harus dalam format TFRecord di bucket Cloud Storage agar dapat digunakan untuk pelatihan.

Jika sudah menyiapkan set data COCO di bucket Cloud Storage yang terletak di zona yang akan digunakan untuk melatih model, Anda dapat langsung membuka pelatihan satu perangkat. Jika tidak, gunakan langkah-langkah berikut untuk menyiapkan set data.

  1. Buka jendela Cloud Shell.

    Buka Cloud Shell

  2. Di Cloud Shell, konfigurasikan gcloud dengan ID project Anda.

    export PROJECT_ID=project-id
    gcloud config set project ${PROJECT_ID}
    
  3. Di Cloud Shell, buat bucket Cloud Storage menggunakan perintah berikut:

    gsutil mb -p ${PROJECT_ID} -c standard -l europe-west4 gs://bucket-name
    
  4. Luncurkan instance VM Compute Engine.

    Instance VM ini hanya akan digunakan untuk mendownload dan melakukan prapemrosesan set data COCO. Isi instance-name dengan nama pilihan Anda.

    $ gcloud compute tpus execution-groups create \
     --vm-only \
     --name=instance-name \
     --zone=europe-west4-a \
     --disk-size=300 \
     --machine-type=n1-standard-16 \
     --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 gcloud compute tpus execution-groups dapat diinstal di VM.
  5. 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:

      $ gcloud compute ssh instance-name --zone=europe-west4-a
      

  6. Siapkan dua variabel, satu untuk bucket penyimpanan yang Anda buat sebelumnya, dan satu lagi untuk direktori yang menyimpan data pelatihan (DATA_DIR) di bucket penyimpanan.

    (vm)$ export STORAGE_BUCKET=gs://bucket-name
    
    (vm)$ export DATA_DIR=${STORAGE_BUCKET}/coco
  7. Instal paket yang diperlukan untuk melakukan pra-pemrosesan data.

    (vm)$ sudo apt-get install -y python3-tk && \
      pip3 install --user Cython matplotlib opencv-python-headless pyyaml Pillow && \
      pip3 install --user "git+https://github.com/cocodataset/cocoapi#egg=pycocotools&subdirectory=PythonAPI"
    
  8. Jalankan skrip download_and_preprocess_coco.sh untuk mengonversi set data COCO menjadi kumpulan TFRecords (*.tfrecord) yang diharapkan oleh aplikasi pelatihan.

    (vm)$ git clone https://github.com/tensorflow/tpu.git
    (vm)$ sudo bash tpu/tools/datasets/download_and_preprocess_coco.sh ./data/dir/coco
    

    Tindakan ini akan menginstal library yang diperlukan, lalu menjalankan skrip pra-pemrosesan. Ini menghasilkan sejumlah file *.tfrecord di direktori data lokal Anda. Skrip konversi dan download COCO memerlukan waktu sekitar 1 jam.

  9. Menyalin data ke bucket Cloud Storage

    Setelah mengonversi data menjadi TFRecords, salin data tersebut dari penyimpanan lokal ke bucket Cloud Storage menggunakan perintah gsutil. Anda juga harus menyalin file anotasi. File ini membantu memvalidasi performa model.

    (vm)$ gsutil -m cp ./data/dir/coco/*.tfrecord ${DATA_DIR}
    (vm)$ gsutil cp ./data/dir/coco/raw-data/annotations/*.json ${DATA_DIR}
    
  10. Membersihkan resource VM

    Setelah set data COCO dikonversi menjadi TFRecords dan disalin ke DATA_DIR di bucket Cloud Storage, Anda dapat menghapus instance Compute Engine.

    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 instance Compute Engine Anda.

      $ gcloud compute instances delete instance-name
        --zone=europe-west4-a
      

Pelatihan perangkat tunggal Cloud TPU

  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 Google Cloud 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:

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

Menyiapkan dan memulai Cloud TPU

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

    VM TPU

    $ gcloud compute tpus tpu-vm create retinanet-tutorial \
    --zone=europe-west4-a \
    --accelerator-type=v3-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.

    Node TPU

    $ gcloud compute tpus execution-groups create  \
     --zone=europe-west4-a \
     --name=retinanet-tutorial \
     --accelerator-type=v3-8 \
     --machine-type=n1-standard-8 \
     --disk-size=300 \
     --tf-version=2.12.0
    

    Deskripsi flag perintah

    zone
    Zona tempat Anda berencana membuat Cloud TPU.
    accelerator-type
    Jenis Cloud TPU yang akan dibuat.
    machine-type
    Jenis mesin VM Compute Engine yang akan dibuat.
    disk-size
    Ukuran volume root VM Compute Engine Anda (dalam GB).
    tf-version
    Versi TensorFlow gcloud diinstal di VM.

    Untuk mengetahui informasi lebih lanjut tentang perintah gcloud, lihat Referensi gcloud.

  2. 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 retinanet-tutorial --zone=europe-west4-a
    

    Node TPU

    gcloud compute ssh retinanet-tutorial --zone=europe-west4-a
    

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

  3. Menginstal paket tambahan

    Aplikasi pelatihan RetinaNet memerlukan beberapa paket tambahan. Instal sekarang:

    (vm)$ sudo apt-get install -y python3-tk
    (vm)$ pip3 install --user Cython matplotlib opencv-python-headless pyyaml Pillow
    
    (vm)$ pip3 install --user 'git+https://github.com/cocodataset/cocoapi#egg=pycocotools&subdirectory=PythonAPI'
    
  4. Instal persyaratan TensorFlow.

    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
    
  5. Tetapkan variabel nama Cloud TPU.

    VM TPU

    (vm)$ export TPU_NAME=local
    

    Node TPU

    (vm)$ export TPU_NAME=retinanet-tutorial
    
  6. Tambahkan variabel lingkungan untuk direktori data dan model.

    (vm)$ export STORAGE_BUCKET=gs://bucket-name
    
    (vm)$ export DATA_DIR=${STORAGE_BUCKET}/coco
    (vm)$ export MODEL_DIR=${STORAGE_BUCKET}/retinanet-train
    
  7. Tetapkan variabel lingkungan PYTHONPATH:

    VM TPU

    (vm)$ export PYTHONPATH="${PWD}/models:${PYTHONPATH}"
    

    Node TPU

    (vm)$ export PYTHONPATH="${PYTHONPATH}:/usr/share/models"
    
  8. 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
    
  9. Ubah ke direktori yang menyimpan model:

    VM TPU

    (vm)$ cd /usr/share/tpu/models/official/legacy/detection
    

    Node TPU

    (vm)$ cd /usr/share/models/official/legacy/detection
    

Pelatihan perangkat Cloud TPU tunggal

Skrip pelatihan berikut dijalankan di Cloud TPU v3-8. Proses ini akan memerlukan waktu lebih lama, tetapi Anda juga dapat menjalankannya di Cloud TPU v2-8.

Contoh skrip di bawah ini hanya dilatih untuk 10 langkah dan memerlukan waktu kurang dari 5 menit untuk dijalankan di TPU Node v3-8. Melatih ke konvergensi memerlukan waktu sekitar 22.500 langkah dan sekitar 1 1/2 jam pada Cloud TPU v3-8 TPU.

  1. Siapkan variabel lingkungan berikut:

    (vm)$ export RESNET_CHECKPOINT=gs://cloud-tpu-checkpoints/retinanet/resnet50-checkpoint-2018-02-07
    (vm)$ export TRAIN_FILE_PATTERN=${DATA_DIR}/train-*
    (vm)$ export EVAL_FILE_PATTERN=${DATA_DIR}/val-*
    (vm)$ export VAL_JSON_FILE=${DATA_DIR}/instances_val2017.json
    
  2. Jalankan skrip pelatihan:

    (vm)$ python3 main.py \
         --strategy_type=tpu \
         --tpu=${TPU_NAME} \
         --model_dir=${MODEL_DIR} \
         --mode="train" \
         --params_override="{ type: retinanet, train: { total_steps: 10, checkpoint: { path: ${RESNET_CHECKPOINT}, prefix: resnet50/ }, train_file_pattern: ${TRAIN_FILE_PATTERN} }, eval: { val_json_file: ${VAL_JSON_FILE}, eval_file_pattern: ${EVAL_FILE_PATTERN}, eval_samples: 5000 } }"
    

    Deskripsi flag perintah

    strategy_type
    Untuk melatih model RetinaNet di TPU, Anda harus menetapkan distribution_strategy ke tpu.
    tpu
    Nama Cloud TPU. Ini ditetapkan menggunakan variabel lingkungan TPU_NAME.
    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.
    mode
    Tetapkan ini ke train untuk melatih model atau eval untuk mengevaluasi model.
    params_override
    String JSON yang mengganti parameter skrip default. Untuk informasi selengkapnya tentang parameter skrip, lihat /usr/share/models/official/legacy/detection/main.py.

Model ini akan dilatih selama 10 langkah dalam waktu sekitar 5 menit pada TPU v3-8. Setelah pelatihan selesai, Anda akan melihat output yang mirip dengan berikut ini:

Train Step: 10/10  / loss = {
  'total_loss': 2.4581615924835205,
  'cls_loss': 1.4098565578460693,
  'box_loss': 0.012001709081232548,
  'model_loss': 2.0099422931671143,
  'l2_regularization_loss': 0.44821977615356445,
  'learning_rate': 0.008165999
}
/ training metric = {
  'total_loss': 2.4581615924835205,
  'cls_loss': 1.4098565578460693,
  'box_loss': 0.012001709081232548,
  'model_loss': 2.0099422931671143,
  'l2_regularization_loss': 0.44821977615356445,
 'learning_rate': 0.008165999
}

Evaluasi perangkat Cloud TPU tunggal

Prosedur berikut menggunakan data evaluasi COCO. Perlu waktu sekitar 10 menit untuk menjalankan langkah-langkah evaluasi di TPU v3-8.

  1. Siapkan variabel lingkungan berikut:

    (vm)$ export EVAL_SAMPLES=5000
    
  2. Jalankan skrip evaluasi:

    (vm)$ python3 main.py \
          --strategy_type=tpu \
          --tpu=${TPU_NAME} \
          --model_dir=${MODEL_DIR} \
          --checkpoint_path=${MODEL_DIR} \
          --mode=eval_once \
          --params_override="{ type: retinanet, eval: { val_json_file: ${VAL_JSON_FILE}, eval_file_pattern: ${EVAL_FILE_PATTERN}, eval_samples: ${EVAL_SAMPLES} } }"
    

    Deskripsi flag perintah

    strategy_type
    Strategi distribusi yang akan digunakan. Berupa tpu atau multi_worker_gpu.
    tpu
    Nama Cloud TPU. Ini ditetapkan menggunakan variabel lingkungan TPU_NAME.
    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.
    mode
    Salah satu dari train, eval, atau train_and_eval.
    params_override
    String JSON yang mengganti parameter skrip default. Untuk informasi selengkapnya tentang parameter skrip, lihat /usr/share/models/official/legacy/detection/main.py.

    Di akhir evaluasi, Anda akan melihat pesan yang mirip dengan pesan berikut di konsol:

    Accumulating evaluation results...
    DONE (t=7.66s).
     Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.000
     Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=100 ] = 0.000
     Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=100 ] = 0.000
     Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.000
     Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.000
     Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.000
     Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=  1 ] = 0.000
     Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets= 10 ] = 0.000
     Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.000
     Average Recall     (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.000
     Average Recall     (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.000
     Average Recall     (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.000
    

Sekarang Anda telah menyelesaikan pelatihan dan evaluasi satu perangkat. Gunakan langkah-langkah berikut untuk menghapus resource TPU satu perangkat saat ini.

  1. Putuskan koneksi dari instance Compute Engine:

    (vm)$ exit
    

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

  2. Hapus resource TPU.

    VM TPU

    $ gcloud compute tpus tpu-vm delete retinanet-tutorial \
    --zone=europe-west4-a
    

    Deskripsi flag perintah

    zone
    Zona tempat Cloud TPU Anda berada.

    Node TPU

    $ gcloud compute tpus execution-groups delete retinanet-tutorial \
    --tpu-only \
    --zone=europe-west4-a
    

    Deskripsi flag perintah

    tpu-only
    Hanya menghapus Cloud TPU. VM tetap tersedia.
    zone
    Zona yang berisi TPU yang akan dihapus.

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.

Melatih Retinanet pada Pod TPU

  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 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 atau gunakan bucket yang Anda buat sebelumnya untuk project Anda.

    Di perintah berikut, ganti europe-west4 dengan nama region yang akan Anda gunakan untuk menjalankan pelatihan. Ganti bucket-name dengan nama yang ingin Anda tetapkan ke bucket.

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

    Lokasi bucket harus berada di region yang sama dengan resource TPU Anda.

  6. Jika sebelumnya Anda telah menyiapkan set data COCO dan memindahkannya ke bucket penyimpanan, Anda dapat menggunakannya lagi untuk pelatihan Pod. Jika Anda belum menyiapkan set data COCO, siapkan sekarang dan kembali ke sini untuk menyiapkan pelatihan.

  7. Menyiapkan dan meluncurkan Pod Cloud TPU

    Tutorial ini menentukan Pod v3-32. Untuk opsi Pod lainnya, lihat versi TPU.

    VM TPU

    Luncurkan Pod VM TPU menggunakan perintah gcloud compute tpus tpu-vm. Tutorial ini menentukan Pod v3-32.

    $ gcloud compute tpus tpu-vm create retinanet-tutorial \
    --zone=europe-west4-a \
    --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.

    Node TPU

    Jalankan perintah gcloud compute tpus execution-groups menggunakan parameter accelerator-type untuk menentukan slice Pod yang ingin Anda gunakan. Misalnya, perintah berikut menggunakan slice Pod v3-32.

    $ gcloud compute tpus execution-groups create  \
     --zone=europe-west4-a \
     --name=retinanet-tutorial \
     --accelerator-type=v3-32 \
     --machine-type=n1-standard-8 \
     --disk-size=300 \
     --tf-version=2.12.0 

    Deskripsi flag perintah

    zone
    Zona tempat Anda berencana membuat Cloud TPU.
    name
    Nama TPU. Jika tidak ditentukan, setelan defaultnya adalah nama pengguna Anda.
    accelerator-type
    Jenis Cloud TPU yang akan dibuat.
    machine-type
    Jenis mesin VM Compute Engine yang akan dibuat.
    tf-version
    Versi Tensorflow gcloud dapat diinstal di VM.
  8. 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 retinanet-tutorial --zone=europe-west4-a
    

    Node TPU

    gcloud compute ssh retinanet-tutorial --zone=europe-west4-a
    
  9. Tetapkan variabel nama Cloud TPU.

    (vm)$ export TPU_NAME=retinanet-tutorial
    
  10. 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 MODEL_DIR=${STORAGE_BUCKET}/retinanet-train
    (vm)$ export DATA_DIR=${STORAGE_BUCKET}/coco
    

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

  11. Menginstal paket tambahan

    Aplikasi pelatihan RetinaNet memerlukan beberapa paket tambahan. Instal sekarang:

    (vm)$ sudo apt-get install -y python3-tk
    (vm)$ pip3 install --user Cython matplotlib opencv-python-headless pyyaml Pillow
    (vm)$ pip3 install --user 'git+https://github.com/cocodataset/cocoapi#egg=pycocotools&subdirectory=PythonAPI' 
  12. Instal persyaratan TensorFlow.

    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
    
  13. Tetapkan beberapa variabel lingkungan yang diperlukan:

    (vm)$ export RESNET_PRETRAIN_DIR=gs://cloud-tpu-checkpoints/retinanet/resnet50-checkpoint-2018-02-07
    (vm)$ export TRAIN_FILE_PATTERN=${DATA_DIR}/train-*
    (vm)$ export EVAL_FILE_PATTERN=${DATA_DIR}/val-*
    (vm)$ export VAL_JSON_FILE=${DATA_DIR}/instances_val2017.json
    
  14. Tetapkan variabel lingkungan PYTHONPATH:

    VM TPU

    (vm)$ export PYTHONPATH="${PWD}/models:${PYTHONPATH}"
    (vm)$ export TPU_LOAD_LIBRARY=0
    

    Node TPU

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

    VM TPU

    (vm)$ cd /usr/share/tpu/models/official/legacy/detection

    Node TPU

    (vm)$ cd /usr/share/models/official/legacy/detection
  16. Melatih model

    VM TPU

    (vm)$ python3 main.py \
    --strategy_type=tpu \
    --tpu=${TPU_NAME} \
    --model_dir=${MODEL_DIR} \
    --mode=train \
    --model=retinanet \
    --params_override="{architecture: {use_bfloat16: true}, eval: {batch_size: 40, eval_file_pattern: ${EVAL_FILE_PATTERN}, val_json_file: ${VAL_JSON_FILE}}, postprocess: {pre_nms_num_boxes: 1000}, predict: {batch_size: 40}, train: {batch_size: 256, checkpoint: {path: ${RESNET_PRETRAIN_DIR}, prefix: resnet50/}, iterations_per_loop: 5000, total_steps: 5625, train_file_pattern: ${TRAIN_FILE_PATTERN}, } }" 

    Deskripsi flag perintah

    tpu
    Nama TPU Anda.
    model_dir
    Menentukan direktori tempat checkpoint dan ringkasan disimpan selama pelatihan model. Jika foldernya tidak ada, program akan membuat folder tersebut. Saat menggunakan Cloud TPU, model_dir harus berupa jalur Cloud Storage (gs://...). Anda dapat menggunakan kembali folder yang ada untuk memuat data checkpoint saat ini dan menyimpan checkpoint tambahan selama checkpoint sebelumnya dibuat menggunakan Cloud TPU dengan ukuran dan versi TensorFlow yang sama.
    params_override
    String JSON yang mengganti parameter skrip default. Untuk informasi selengkapnya tentang parameter skrip, lihat /usr/share/tpu/models/official/legacy/detection/main.py.

    Prosedur ini melatih model pada set data COCO untuk 5625 langkah pelatihan. Pelatihan ini memerlukan waktu sekitar 20 menit pada Cloud TPU v3-32. Setelah pelatihan selesai, pesan yang mirip dengan berikut akan muncul:

    Node TPU

    Contoh skrip pelatihan berikut dijalankan di Pod Cloud TPU v3-32. Mobil ini hanya berlatih 10 langkah dan membutuhkan waktu kurang dari 5 menit untuk berlari. Melatih ke konvergensi memerlukan 2.109 langkah dan memerlukan waktu sekitar 50 menit pada Pod TPU v3-32.

    (vm)$  python3 main.py \
    --strategy_type=tpu \
    --tpu=${TPU_NAME} \
    --model_dir=${MODEL_DIR} \
    --mode="train" \
    --params_override="{ type: retinanet, train: { total_steps: 10, batch_size: 256, checkpoint: { path: ${RESNET_CHECKPOINT}, prefix: resnet50/ }, train_file_pattern: ${TRAIN_FILE_PATTERN} }, eval: { val_json_file: ${VAL_JSON_FILE}, eval_file_pattern: ${EVAL_FILE_PATTERN}, eval_samples: 5000 } }" 

    Deskripsi flag perintah

    strategy_type
    Strategi distribusi yang akan digunakan. Berupa tpu atau multi_worker_gpu.
    tpu
    Menentukan nama Cloud TPU. Hal ini ditetapkan menggunakan variabel lingkungan TPU_NAME.
    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.
    mode
    Salah satu dari train, eval, atau train_and_eval.
    params_override
    String JSON yang mengganti parameter skrip default. Untuk informasi selengkapnya tentang parameter skrip, lihat /usr/share/models/official/legacy/detection/main.py.

Setelah pelatihan selesai, pesan yang mirip dengan yang berikut ini akan muncul:

VM TPU

Train Step: 5625/5625  / loss = {'total_loss': 0.730501651763916,
'cls_loss': 0.3229793608188629, 'box_loss': 0.003082591574639082,
'model_loss': 0.4771089553833008, 'l2_regularization_loss': 0.2533927261829376,
'learning_rate': 0.08} / training metric = {'total_loss': 0.730501651763916,
'cls_loss': 0.3229793608188629, 'box_loss': 0.003082591574639082,
'model_loss': 0.4771089553833008, 'l2_regularization_loss': 0.2533927261829376,
'learning_rate': 0.08} 

Node TPU

Train Step: 10/10  / loss = {'total_loss': 3.5455241203308105,
'cls_loss': 1.458828330039978, 'box_loss': 0.01220895815640688,
'model_loss': 2.0692763328552246, 'l2_regularization_loss': 1.4762479066848755,
'learning_rate': 0.008165999} / training metric = {'total_loss': 3.5455241203308105,
'cls_loss': 1.458828330039978, 'box_loss': 0.01220895815640688,
'model_loss': 2.0692763328552246, 'l2_regularization_loss': 1.4762479066848755,
'learning_rate': 0.008165999}

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 VM Compute Engine:

    (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 retinanet-tutorial \
    --zone=europe-west4-a
    

    Node TPU

    $ gcloud compute tpus execution-groups delete retinanet-tutorial \
    --zone=europe-west4-a
    
  3. Verifikasi bahwa resource telah dihapus dengan menjalankan gcloud compute tpus execution-groups list. Penghapusan memerlukan waktu beberapa menit. Respons seperti di bawah ini menunjukkan bahwa instance Anda telah berhasil dihapus.

    $ gcloud compute tpus execution-groups list --zone=europe-west4-a
    
    Listed 0 items.
    
  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.

Berlatih dengan ukuran gambar yang berbeda

Anda dapat menjelajah menggunakan jaringan backbone yang lebih besar (misalnya, ResNet-101, bukan ResNet-50). Gambar input yang lebih besar dan backbone yang lebih andal akan menghasilkan model yang lebih lambat tetapi lebih akurat.

Gunakan basis yang berbeda

Atau, Anda dapat mempelajari pra-pelatihan model ResNet di set data Anda sendiri dan menggunakannya sebagai dasar untuk model RetinaNet Anda. Dengan beberapa pekerjaan lagi, Anda juga dapat bertukar di jaringan backbone alternatif sebagai pengganti ResNet. Terakhir, jika Anda tertarik untuk menerapkan model deteksi objek Anda sendiri, jaringan ini dapat menjadi dasar yang baik untuk eksperimen lebih lanjut.