Menjalankan MNIST di Cloud TPU (TF 2.x)


Tutorial ini berisi deskripsi tingkat tinggi tentang model MNIST, petunjuk cara mendownload contoh kode TPU TensorFlow MNIST, dan panduan untuk menjalankan kode pada Cloud TPU.

Pernyataan penyangkalan

Tutorial ini menggunakan set data pihak ketiga. Google tidak memberikan representasi, garansi, atau jaminan lain terkait validitas, atau aspek lain apa pun dari set data ini.

Deskripsi model

Set data MNIST berisi sejumlah besar gambar digit tulisan tangan dalam rentang 0 hingga 9, serta label yang mengidentifikasi digit di setiap gambar.

Tutorial ini melatih model machine learning untuk mengklasifikasikan gambar berdasarkan set data MNIST. Setelah pelatihan, model mengklasifikasikan gambar yang masuk ke dalam 10 kategori (0 hingga 9) berdasarkan apa yang dipelajari tentang gambar tulisan tangan dari set data MNIST. Selanjutnya, Anda dapat mengirim gambar yang belum pernah dilihat sebelumnya ke model, dan model mengidentifikasi digit dalam gambar berdasarkan hal yang telah dipelajari model selama pelatihan.

Set data MNIST telah dibagi menjadi tiga bagian:

  • 60.000 contoh data pelatihan
  • 10.000 contoh data pengujian
  • 5.000 contoh data validasi

Model ini memiliki campuran tujuh lapisan:

  • 2 x konvolusi
  • Penggabungan 2 x maksimum
  • 2 x padat (terhubung sepenuhnya)
  • 1 x keluar

Kerugian dihitung melalui entropi silang kategori.

Versi model MNIST ini menggunakan Keras API, cara yang direkomendasikan untuk membangun dan menjalankan model machine learning di Cloud TPU.

Keras menyederhanakan proses pengembangan model dengan menyembunyikan sebagian besar implementasi level rendah, sehingga memudahkan peralihan antara TPU dan platform pengujian lainnya seperti GPU atau CPU.

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}
    

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

  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, lihat Arsitektur Sistem.

    VM TPU

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

    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.
    preemptible
    TPU yang preemptible lebih hemat biayanya, tetapi dapat dinonaktifkan kapan saja.

    Node TPU

    $ gcloud compute tpus execution-groups create \
    --name=mnist-tutorial \
    --zone=us-central1-b \
    --tf-version=2.12.0 \
    --machine-type=n1-standard-1 \
    --accelerator-type=v3-8 \
    --preemptible
    

    Deskripsi flag perintah

    name
    Nama Cloud TPU yang akan dibuat.
    zone
    Zona tempat Anda berencana membuat Cloud TPU.
    tf-version
    Versi TensorFlow yang diinstal perintah gcloud di VM Anda.
    machine-type
    Jenis mesin VM Compute Engine yang akan dibuat.
    accelerator-type
    Jenis Cloud TPU yang akan dibuat.
    preemptible
    TPU yang preemptible lebih hemat biayanya, tetapi dapat dinonaktifkan kapan saja.

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

  7. Setelah perintah gcloud compute tpus selesai dijalankan, pastikan perintah shell Anda telah berubah dari username@projectname menjadi username@vm-name. Perubahan ini menunjukkan bahwa Anda kini telah login ke VM Compute Engine.

    Jika tidak terhubung ke instance Compute Engine, Anda dapat menghubungkannya dengan menjalankan perintah berikut:

    VM TPU

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

    Node TPU

    gcloud compute ssh mnist-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=mnist-tutorial
    
  9. 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 tensorflow-model-optimization>=0.1.3
    

Melatih model

Kode sumber untuk model TPU MNIST tersedia di GitHub.

  1. Tetapkan variabel berikut. Ganti bucket-name dengan nama bucket Anda:

    (vm)$ export STORAGE_BUCKET=gs://bucket-name
    (vm)$ export MODEL_DIR=${STORAGE_BUCKET}/mnist
    (vm)$ export DATA_DIR=${STORAGE_BUCKET}/data
    
  2. Menetapkan variabel lingkungan PYTHONPATH.

    VM TPU

    (vm)$ export PYTHONPATH="${PYTHONPATH}:/usr/share/tpu/models"
    

    Node TPU

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

    VM TPU

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

    Node TPU

    (vm)$ cd /usr/share/models/official/legacy/image_classification
    
  5. Jalankan skrip pelatihan MNIST:

    (vm)$ python3 mnist_main.py \
      --tpu=${TPU_NAME} \
      --model_dir=${MODEL_DIR} \
      --data_dir=${DATA_DIR} \
      --train_epochs=10 \
      --distribution_strategy=tpu \
      --download
    

    Deskripsi flag perintah

    tpu
    Nama Cloud TPU. Jika tidak ditentukan saat menyiapkan VM Compute Engine dan Cloud TPU, nama pengguna Anda akan ditetapkan secara default.
    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.
    data_dir
    Jalur Cloud Storage input pelatihan. Parameter ini disetel ke set data palsu_imagenet dalam contoh ini.
    train_epochs
    Jumlah epoch untuk melatih model.
    distribution_strategy
    Untuk melatih model ResNet di Cloud TPU, tetapkan distribution_strategy ke tpu.
    download
    Jika ditetapkan ke true, skrip akan mendownload dan melakukan prapemrosesan pada set data MNIST, jika belum didownload.

Skrip pelatihan berjalan dalam waktu kurang dari 5 menit di Cloud TPU v3-8 dan menampilkan output yang mirip dengan:

Run stats:
{
  'accuracy_top_1': 0.9762369990348816,
  'eval_loss': 0.07863274961709976,
  'loss': 0.1111728847026825,
  'training_accuracy_top_1': 0.966645359992981
}

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

    Node TPU

    $ gcloud compute tpus execution-groups delete mnist-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.