Mengekspor SavedModel untuk prediksi

Untuk men-deploy model terlatih ke AI Platform Prediction dan menggunakannya untuk menayangkan prediksi, Anda harus mengekspornya terlebih dahulu dalam format SavedModel TensorFlow.

Halaman ini menguraikan beberapa hal penting yang perlu dipertimbangkan saat Anda membuat SavedModel. Untuk informasi yang lebih mendetail tentang cara mengekspor ke SavedModel, baca panduan TensorFlow untuk SavedModel dan panduan TensorFlow untuk menyimpan model Keras. Untuk mengetahui detail tentang cara men-deploy SavedModel ke AI Platform Prediction untuk menayangkan prediksi, baca panduan untuk men-deploy model. Untuk informasi latar belakang umum tentang proses prediksi, lihat halaman ringkasan prediksi.

Rutinitas prediksi kustom

Sebagai alternatif untuk men-deploy SavedModel, Anda juga dapat membuat dan men-deploy rutinitas prediksi kustom. Rutinitas prediksi kustom dapat menggabungkan SavedModel (atau model terlatih yang disimpan dengan cara lain) dengan artefak pelatihan lain dan kode Python yang Anda berikan untuk menyesuaikan cara AI Platform Prediction menangani permintaan prediksi. Misalnya, Anda dapat menggunakan fleksibilitas ini untuk melakukan pra-pemrosesan input prediksi sebelum model membuat prediksi.

Untuk mempelajari lebih lanjut, baca panduan rutinitas prediksi kustom.

Memahami grafik pelatihan dan grafik penayangan

Setelah melatih model dan mengekspornya sebagai SavedModel, ada beberapa langkah penting yang harus dilakukan sebelum Anda siap mendapatkan prediksi.

Ada beberapa perbedaan utama antara grafik pelatihan dan grafik penayangan. Grafik pelatihan berisi fitur yang tidak sesuai untuk ditayangkan, seperti:

  • pembaca file
  • antrean input
  • lapisan dropout
  • fungsi loss
  • pengoptimal

Karena proses penayangan prediksi memiliki kebutuhan yang berbeda dengan proses pelatihan, praktik terbaiknya adalah mengekspor grafik terpisah khusus untuk menayangkan prediksi.

Memahami SavedModel

SavedModel adalah format yang direkomendasikan TensorFlow untuk menyimpan model, dan merupakan format yang diperlukan untuk men-deploy model TensorFlow yang telah dilatih di AI Platform Prediction. Mengekspor model terlatih sebagai SavedModel akan menyimpan grafik pelatihan dengan aset, variabel, dan metadatanya dalam format yang dapat digunakan dan dipulihkan oleh AI Platform Prediction untuk prediksi.

Setelah mengekspor SavedModel, Anda memiliki direktori SavedModel yang berisi hal berikut:

  • grafik pelatihan Anda, yang disimpan dalam buffer protokol SavedModel
  • file eksternal, yang disebut aset
  • variabel, yang disimpan sebagai file checkpoint

Saat men-deploy SavedModel ke AI Platform Prediction, Anda harus menyertakan seluruh direktori SavedModel, bukan hanya file buffering protokol SavedModel yang berisi grafik dan metadatanya. File ini biasanya memiliki ekstensi .pb atau .pbtxt.

SavedModel memungkinkan Anda menyimpan beberapa versi grafik yang memiliki aset dan variabel (atau titik pemeriksaan) yang sama. Misalnya, Anda mungkin ingin mengembangkan dua versi grafik yang sama: satu untuk dijalankan di CPU, dan satu lagi untuk dijalankan di GPU.

Pelajari lebih lanjut struktur direktori SavedModel.

Mengekspor dari berbagai TensorFlow API

Ada beberapa cara untuk mengekspor SavedModels dari kode pelatihan TensorFlow Anda. Daftar berikut menjelaskan beberapa cara yang sesuai untuk berbagai API TensorFlow:

Kompatibilitas dengan AI Explanations

Jika Anda ingin menggunakan Penjelasan AI dengan model Anda, pelajari persyaratan tambahan untuk SavedModel Anda.

Memeriksa dan menyesuaikan ukuran model

SavedModel Anda harus berukuran 500 MB atau lebih kecil jika Anda ingin men-deploynya ke versi model yang menggunakan jenis mesin lama (MLS1). Jumlahnya dapat mencapai 10 GB jika Anda menggunakan jenis mesin Compute Engine (N1). Pelajari lebih lanjut jenis mesin untuk prediksi online.

Batas ukuran ini mencakup semua aset dan variabel di direktori SavedModel Anda, bukan hanya file buffering protokol SavedModel itu sendiri (yaitu, saved_model.pb atau saved_model.pbtxt).

Untuk memeriksa ukuran model selama pengembangan, ekspor SavedModel dan periksa ukuran file direktori.

Jika SavedModel Anda melebihi batas 500 MB:

Dengan mengikuti langkah-langkah ini, SavedModel dapat berada di bawah batas 500 MB dan mengurangi latensi prediksi. Manfaatnya mencakup performa yang lebih baik dan tidak perlu meminta serta menunggu penambahan kuota.

Jika Anda masih memerlukan kuota tambahan, pelajari cara meminta penambahan kuota.

Membuat grafik prediksi yang optimal

Pelatihan menghasilkan beberapa titik pemeriksaan yang tidak digunakan untuk menyalurkan prediksi. Pastikan untuk mengupload direktori yang bebas dari artefak tersebut, yang hanya berisi model yang akan di-deploy.

Misalnya, jika Anda mengekspor ringkasan selama proses pelatihan untuk visualisasi di TensorBoard, Anda harus memastikan ringkasan tersebut tidak disertakan dalam SavedModel Anda. Ringkasan TensorBoard ini tidak diperlukan untuk grafik prediksi.

Mengurangi presisi untuk mengurangi ukuran file

Mengurangi presisi variabel dan data input adalah kompromi yang mengurangi ukuran model Anda secara signifikan dengan beberapa biaya akurasi prediksi. Data presisi tinggi disimpan dengan kurang efisien dibandingkan data presisi rendah. Meskipun data presisi rendah adalah sumber derau, jaringan saraf dapat "mengabaikan" derau ini dan tetap menghasilkan prediksi yang cukup akurat.

Jika penggunaan metode ini menyebabkan penurunan akurasi prediksi yang terlalu besar untuk kasus penggunaan Anda, coba minta peningkatan kuota.

  • Perkecil ukuran file dengan mengurangi ukuran bobot, yang secara default menggunakan bilangan floating point yang sulit disimpan secara efisien. Bobot yang disimpan secara tidak efisien ini adalah kontributor terbesar untuk keseluruhan ukuran file model.

  • Kuantisasi data berkelanjutan Anda untuk mengurangi ukuran model hingga 75% tanpa mengorbankan akurasi dalam jumlah yang signifikan.

  • Menggunakan variabel yang kurang akurat. Misalnya, ubah jenis data (dtype) dari int64 menjadi int32.

  • Kurangi ukuran fitur input lainnya di folder assets di direktori SavedModel Anda. Misalnya, gunakan ukuran kosakata yang lebih kecil untuk data teks.

  • Baca teknik untuk mengoptimalkan model TensorFlow untuk penayangan secara lebih mendetail, dan pelajari contoh penerapan teknik ini. Teknik tertaut hanya berlaku jika Anda menggunakan TensorFlow 1.

Alat untuk memeriksa SavedModel dan grafik

TensorFlow menyediakan antarmuka command line yang dapat Anda gunakan untuk memeriksa aspek SavedModel, seperti pemformatan input dan SignatureDefs. Pelajari lebih lanjut CLI SavedModel.

Alat Transformasi Grafik di TensorFlow dapat digunakan untuk mengoptimalkan model Anda untuk deployment. Meskipun penggunaan alat ini dijelaskan dalam konteks deployment seluler, alat ini juga dapat digunakan untuk mengoptimalkan model untuk deployment non-seluler.

Membuat fungsi input inferensi

Jika mengekspor SavedModel menggunakan tf.keras.Model.save, Anda tidak perlu menentukan fungsi input inferensi.

Jika tidak, tentukan fungsi input penayangan saat Anda mengekspor SavedModel. Anda dapat melakukannya pada poin berikut sehubungan dengan keseluruhan proses pelatihan:

  • Selama akhir proses pelatihan.
  • Sebagai proses terpisah setelah pelatihan selesai.

Contoh berikut menunjukkan cara melakukannya untuk Estimator terlatih. Lihat informasi selengkapnya tentang menayangkan fungsi input untuk Estimator.

Membuat grafik penayangan selama pelatihan

Hal ini biasanya terjadi di akhir proses pelatihan, tetapi masih terkait dengan pelatihan.

  1. Tentukan fungsi input penayangan. Dalam fungsi Anda, pastikan dimensi terluar fitur Anda adalah None. Ini sesuai dengan ukuran batch Anda, dan ditunjukkan di bawah saat menentukan nilai item dalam dict fitur menggunakan tf.placeholder. Contoh kode berikut berasal dari contoh Sensus kami:

    def json_serving_input_fn():
        """Build the serving inputs."""
        inputs = {}
        for feat in featurizer.INPUT_COLUMNS:
            inputs[feat.name] = tf.placeholder(shape=[None], dtype=feat.dtype)
    
        return tf.estimator.export.ServingInputReceiver(inputs, inputs)
    
    
  2. Mengekspor SavedModel dari estimator menggunakan tf.estimator.Estimator.export_saved_model, meneruskan jalur ke model sebagai parameter export_dir_base, dan nama fungsi input penayangan sebagai parameter serving_input_fn. Dalam contoh Sensus, jenis Estimator yang digunakan adalah tf.estimator.DNNLinearCombinedClassifier.

Membuat grafik penayangan secara terpisah dari pelatihan

Jika sudah melatih model, Anda bisa mendapatkan prediksi tanpa melatih ulang. Proses ini sangat mirip dengan membuat grafik penayangan selama pelatihan. Perbedaan utamanya adalah Anda membuat grafik penayangan dalam skrip Python terpisah yang Anda jalankan setelah pelatihan selesai. Ide dasarnya adalah membuat Estimator dengan model_dir yang sama yang digunakan dalam pelatihan, lalu memanggil tf.estimator.Estimator.export_saved_model seperti yang dijelaskan di bagian sebelumnya.

  1. Tentukan fungsi input penayangan dalam skrip Python, mirip dengan cara Anda menentukannya dalam pelatihan:

    def json_serving_input_fn():
        """Build the serving inputs."""
        inputs = {}
        for feat in featurizer.INPUT_COLUMNS:
            inputs[feat.name] = tf.placeholder(shape=[None], dtype=feat.dtype)
    
        return tf.estimator.export.ServingInputReceiver(inputs, inputs)
    
    
  2. Saat membuat Estimator, pastikan untuk menetapkan parameter model_dir yang sama dengan yang digunakan dalam pelatihan. Tindakan ini akan membuat checkpoint dari model yang sebelumnya Anda simpan tersedia untuk Estimator.

  3. Terakhir, gunakan Estimator untuk memanggil tf.estimator.Estimator.export_saved_model yang meneruskan jalur ke model Anda sebagai parameter export_dir_base, dan nama fungsi input penayangan sebagai parameter serving_input_fn.

Tag dan tanda tangan TensorFlow

Jika Anda mengekspor SavedModel dari tf.keras atau dari estimator TensorFlow, grafik yang diekspor siap ditayangkan secara default.

Dalam kasus lain, saat mem-build grafik prediksi TensorFlow, Anda harus menentukan nilai yang benar untuk tag dan tanda tangan grafik. TensorFlow menyediakan konstanta untuk nilai tag dan tanda tangan ini, yang digunakan untuk tujuan berikut:

  • Untuk memilih grafik di SavedModel Anda guna menayangkan prediksi
  • Untuk menunjukkan bahwa Anda membuat tanda tangan prediksi untuk grafik prediksi

Tanda tangan menentukan input dan output untuk grafik Anda. Saat mem-build tanda tangan untuk grafik prediksi, Anda harus menentukan konstanta tanda tangan yang valid sebagai parameter method_name di build_signature_def. Untuk prediksi, pilihan terbaik biasanya adalah PREDICT_METHOD_NAME.

Anda harus menggunakan tag untuk menentukan grafik mana di SavedModel yang digunakan untuk menayangkan prediksi. Di add_meta_graph_and_variables, tambahkan tag_constants.SERVING ke daftar tags Anda.

Lihat contoh cara membuat grafik prediksi menggunakan konstanta yang benar untuk tag dan tanda tangan.

Langkah selanjutnya