Panduan ini adalah panduan umum tentang cara men-deploy dan menggunakan model pada AI Platform Prediction dengan AI Explanations.
Sebelum memulai
Anda harus melakukan beberapa hal sebelum dapat melatih dan men-deploy model di AI Platform:
- Menyiapkan lingkungan pengembangan lokal Anda.
- Siapkan project GCP dengan penagihan dan API yang diperlukan telah diaktifkan.
- Buat bucket Cloud Storage untuk menyimpan paket pelatihan dan model yang Anda latih.
Untuk menyiapkan project GCP, ikuti petunjuk yang diberikan di contoh notebook.
Menyimpan model
TensorFlow 1.15, 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 2.8, 2.9, 2.10, dan 2.11 didukung. Gunakan tf.saved_model.save
untuk menyimpan model di TensorFlow 2.11, tetapi jangan gunakan untuk TensorFlow 1.15.
Pelajari lebih lanjut cara menyimpan model untuk digunakan dengan AI Explanations, dan cara menggunakan Explainable AI SDK.
File metadata penjelasan
Sebelum men-deploy model, Anda harus mengirimkan file metadata yang berisi informasi tentang input, output, dan dasar pengukuran model, sehingga AI Explanations memberikan penjelasan untuk bagian yang benar dari model Anda.
Sebaiknya gunakan Explainable AI SDK untuk menemukan input dan output model Anda secara otomatis. Pada umumnya, hal ini akan menghemat waktu dan tenaga, karena Explainable AI SDK akan membuat dan mengupload file metadata penjelasan untuk Anda.
Membuat file metadata penjelasan secara manual
Jika memiliki kasus penggunaan lanjutan, Anda dapat memilih untuk menentukan input dan output model secara manual. Untuk membuat file metadata penjelasan secara manual, ikuti langkah-langkah berikut:
- Identifikasi nama-nama argumen input dan output yang ingin Anda jelaskan. Lihat bagian di bawah ini tentang menemukan nama TensorFlow input dan output secara manual Pelajari lebih lanjut cara mengidentifikasi tensor input dan output.
- Buat dasar pengukuran yang sesuai dan tentukan di
input_baselines
. - Tentukan "tensorflow" untuk
framework
. - Beri nama file
explanation_metadata.json
. - Upload file
explanation_metadata.json
Anda ke bucket Cloud Storage yang sama dengan tempatSavedModel Anda disimpan.
Contoh berikut menunjukkan tampilan file explanation_metadata.json
:
{
"inputs": {
"data": {
"input_tensor_name": "YOUR_INPUT_TENSOR_NAME"
"input_baselines": [0]
}
},
"outputs": {
"duration": {
"output_tensor_name": "YOUR_OUTPUT_TENSOR_NAME"
}
},
"framework": "tensorflow"
}
Dalam contoh ini, "data"
dan "duration"
adalah nama yang bermakna untuk TensorFlow input dan output yang dapat Anda tetapkan dalam proses membangun dan melatih model. Nama TensorFlow input dan output yang sebenarnya mengikuti format
name:index
. Contohnya, x:0
atau Placeholder:0
.
Untuk input_baselines
, Anda dapat memulai dengan menentukan satu dasar pengukuran.
Dalam contoh ini, [0]
merepresentasikan gambar yang sepenuhnya berwarna hitam. Anda dapat
menentukan beberapa dasar pengukuran untuk memberikan informasi tambahan. Pelajari lebih lanjut cara
menyesuaikan dasar pengukuran.
Menemukan nama TensorFlow input dan output secara manual
Pada umumnya, Anda dapat menggunakan Explainable AI SDK untuk membuat input dan output untuk model Anda. Anda hanya perlu menemukan nama TensorFlow input dan output secara manual jika menggunakan model TensorFlow 1.15 terlatih.
Cara terbaik untuk menemukan nama TensorFlow input dan output Anda bergantung pada jenis data input dan output Anda, serta cara Anda membangun model. Untuk penjelasan lebih mendalam tentang setiap kasus, serta contohnya, lihat panduan tentang [memahami input dan output][memahami-input-output].
Jenis data input | Jenis data output | Kriteria lainnya | Pendekatan yang direkomendasikan |
---|---|---|---|
Numerik atau string | Angka | Input tidak dalam bentuk serial. Output bukanlah data numerik yang diperlakukan sebagai data kategoris (misalnya, ID class numerik). | GunakanSavedModel CLI untuk menemukan nama TensorFlow input dan output Anda. Atau, build file metadata penjelasan saat melatih dan menyimpan model, di mana program atau lingkungan Anda masih memiliki akses ke kode pelatihan. |
Semua data yang diserialisasi | Any | Tambahkan operasi penguraian TensorFlow ke fungsi input inferensi saat Anda mengekspor model. Gunakan output operasi penguraian untuk membantu mengidentifikasi TensorFlow. | |
Any | Any | Model mencakup operasi pra-pemrosesan | Untuk mendapatkan nama TensorFlow input setelah
langkah-langkah pra-pemrosesan, gunakan properti name dari
tf.Tensor untuk mendapatkan nama TensorFlow input. |
Any | Bukan probabilitas, logits, atau jenis TensorFlow floating point lainnya | Anda ingin mendapatkan penjelasan untuk output yang bukan merupakan probabilitas, logits, atau jenis TensorFlow floating point lainnya. | Periksa grafik Anda dengan TensorBoard untuk menemukan TensorFlow output yang benar. |
Semua data yang tidak dapat dibedakan | Any | Anda ingin menggunakan gradien terintegrasi, yang memerlukan input yang dapat dibedakan. | Mengenkode input yang tidak dapat dibedakan sebagai TensorFlow yang dapat dibedakan. Tambahkan nama TensorFlow input asli dan TensorFlow input yang dienkode ke file metadata penjelasan Anda. |
Men-deploy model dan versi
AI Platform Prediction mengatur model terlatih Anda menggunakan resource model dan versi. Model Prediksi AI Platform adalah penampung untuk versi model machine learning Anda.
Untuk men-deploy model, buat resource model di AI Platform Prediction, buat versi model tersebut, lalu tautkan versi model ke file model yang disimpan di Cloud Storage.
Membuat resource model
AI Platform Prediction menggunakan resource model untuk mengatur berbagai versi model Anda.
Buat resource model untuk versi model Anda. Pada perintah Google Cloud CLI berikut, ganti MODEL_NAME dengan nama yang Anda inginkan untuk model Anda. Nama model Anda harus diawali dengan huruf, dan hanya boleh berisi huruf, angka, serta garis bawah.
Anda harus membuat model di endpoint regional untuk menggunakan AI Explanations.
gcloud ai-platform models create MODEL_NAME \
--region us-central1
Lihat AI Platform Prediction model API untuk detail selengkapnya.
Membuat versi model
Sekarang Anda siap untuk membuat versi model dengan model terlatih yang sebelumnya diupload ke Cloud Storage. Saat Anda membuat versi, tentukan parameter berikut:
name
: harus unik dalam model AI Platform Prediction.deploymentUri
: jalur ke direktori TersimpanModel di Cloud Storage.framework
(wajib diisi): hanyatensorflow
runtimeVersion
: gunakan salah satu versi runtime berikut yang mendukung Penjelasan AI: 1.15, 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 2.8, 2.9, 2.10, dan 2.11.pythonVersion
: menggunakan "3.7" untuk runtime versi 1.15 dan yang lebih baru.machineType
(wajib): jenis mesin virtual yang digunakan AI Platform Prediction untuk node yang menyajikan prediksi dan penjelasan. Pilih jenis mesin yang didukung untuk AI Explanations.explanation-method
: jenis metode atribusi fitur yang akan digunakan: "sampled-shapley", "integrated-Gradiens", atau "xrai".- Jalur atau langkah: gunakan
--num-paths
untuk Shapley yang dijadikan sampel, dan gunakan--num-integral-steps
untuk gradien atau XRAI terintegrasi.
Lihat informasi selengkapnya tentang setiap parameter ini di AI Platform Training and Prediction API untuk resource versi.
Tetapkan variabel lingkungan untuk menyimpan jalur ke direktori Cloud Storage tempatSavedModel Anda berada, nama model, nama versi, dan pilihan framework Anda.
MODEL=your_model_name MODEL_DIR="gs://your_bucket_name/" VERSION=your_version_name FRAMEWORK=tensorflow
Buat versi:
EXPLAIN_METHOD="integrated-gradients" gcloud beta ai-platform versions create $VERSION \ --model $MODEL \ --origin $MODEL_DIR \ --runtime-version 1.15 \ --framework $FRAMEWORK \ --python-version 3.7 \ --machine-type n1-standard-4 \ --explanation-method $EXPLAIN_METHOD \ --num-integral-steps 25 \ --region us-central1
Pembuatan versi memerlukan waktu beberapa menit. Jika sudah siap, Anda akan melihat output berikut:
Creating version (this might take a few minutes)......done.
Periksa status deployment model Anda, dan pastikan model Anda di-deploy dengan benar:
gcloud ai-platform versions describe $VERSION_NAME \ --model $MODEL_NAME \ --region us-central1
Periksa apakah statusnya
READY
. Anda akan melihat output yang serupa dengan ini:createTime: '2018-02-28T16:30:45Z' deploymentUri: gs://your_bucket_name framework: TENSORFLOW machineType: n1-standard-4 name: projects/your_project_id/models/your_model_name/versions/your_version_name pythonVersion: '3.7' runtimeVersion: '1.15' state: READY
Jenis mesin yang didukung untuk penjelasan
Untuk permintaan AI Explanations, Anda harus men-deploy versi model dengan salah satu jenis mesin berikut. Jika Anda tidak menentukan jenis mesin, deployment akan gagal.
Tabel berikut membandingkan jenis mesin yang tersedia:
Nama | vCPUs | Memori (GB) |
---|---|---|
n1-standard-2 |
2 | 7.5 |
n1-standard-4 |
4 | 15 |
n1-standard-8 |
8 | 30 |
n1-standard-16 |
16 | 60 |
n1-standard-32 |
32 | 120 |
Jenis mesin ini hanya tersedia di endpoint regional. Pelajari lebih lanjut dukungannya untuk fitur Prediksi AI Platform lainnya.
Pelajari harga untuk setiap jenis mesin. Baca selengkapnya tentang spesifikasi mendetail jenis mesin Compute Engine (N1) di dokumentasi Compute Engine.
Memformat data input
Format dasar untuk prediksi online adalah daftar instance data. Daftar ini dapat berupa daftar nilai biasa atau anggota objek JSON, bergantung pada cara Anda mengonfigurasi input dalam aplikasi pelatihan. Pelajari cara memformat input dan data biner yang kompleks untuk prediksi.
Contoh ini menunjukkan tensor input dan kunci instance ke model TensorFlow:
{"values": [1, 2, 3, 4], "key": 1}
Susunan string JSON bisa menjadi kompleks selama mengikuti aturan berikut:
Data instance tingkat teratas harus berupa objek JSON: kamus key-value pair.
Nilai individual dalam objek instance dapat berupa string, angka, atau daftar. Anda tidak dapat menyematkan objek JSON.
Daftar hanya boleh berisi item dari jenis yang sama (termasuk daftar lainnya). Anda tidak boleh mencampur nilai string dan numerik.
Anda meneruskan instance input untuk prediksi online sebagai isi pesan untuk panggilan projects.explain. Pelajari lebih lanjut persyaratan pemformatan isi permintaan prediksi.
Untuk mengirim permintaan dengan
gcloud
, pastikan file input Anda adalah file JSON yang dibatasi baris baru, dengan setiap instance sebagai objek JSON, satu instance per baris.{"values": [1, 2, 3, 4], "key": 1} {"values": [5, 6, 7, 8], "key": 2}
Meminta prediksi dan penjelasan
Meminta prediksi dan penjelasan Anda:
gcloud beta ai-platform explain \
--model $MODEL \
--version $VERSION \
--json-instances='your-data.txt' \
--region us-central1
Memahami respons penjelasan
Setelah men-deploy model, Anda dapat menggunakan Explainable AI SDK untuk meminta penjelasan dan memvisualisasikan hasil atribusi fitur untuk data tabel dan gambar:
import explainable_ai_sdk
m = explainable_ai_sdk.load_model_from_ai_platform(PROJECT_ID, MODEL_NAME, VERSION, region=REGION)
explanations = m.explain([instance_dict])
explanations[0].visualize_attributions()
Untuk model tabel, atribusi diplot dalam diagram batang. Untuk model gambar, atribusi ditampilkan pada gambar input, menggunakan setelan visualisasi yang sama dengan yang Anda tentukan saat men-deploy model.
Untuk mengetahui detail tentang setiap kolom dalam respons penjelasan, lihat contoh respons lengkap di referensi API.
Pelajari cara mengurai respons penjelasan dengan melihat contoh notebook:
TensorFlow 2:
TensorFlow 1.15:
Memeriksa penjelasan Anda
Contoh kode berikut membantu Anda memeriksa sekumpulan penjelasan dan melihat apakah Anda perlu menyesuaikan baseline.
Dalam kode, Anda hanya perlu memperbarui nilai kunci input sesuai dengan nilai
yang Anda tentukan dalam file explanation_metadata.json
.
{
"inputs": {
"YOUR_INPUT_KEY_VALUE": {
"input_tensor_name": "YOUR_INPUT_TENSOR_NAME"
"input_baselines": [0]
}
...
}
Misalnya, jika nilai kunci input Anda adalah "data", nilai yang sama akan menjadi "data" di baris 4 cuplikan kode berikut:
def check_explanations(example, mean_tgt_value=None, variance_tgt_value=None):
passed_test = 0
total_test = 1
attribution_vals = example['attributions_by_label'][0]['attributions']['YOUR-INPUT-KEY-VALUE']
baseline_score = example['attributions_by_label'][0]['baseline_score']
sum_with_baseline = np.sum(attribution_vals) + baseline_score
predicted_val = example['attributions_by_label'][0]['example_score']
# Check 1
# The prediction at the input is equal to that at the baseline.
# Please use a different baseline. Some suggestions are: random input, training
# set mean.
if abs(predicted_val - baseline_score) <= 0.05:
print('Warning: example score and baseline score are too close.')
print('You might not get attributions.')
else:
passed_test += 1
# Check 2 (only for models using Integrated Gradient explanations)
# Ideally, the sum of the integrated gradients must be equal to the difference
# in the prediction probability at the input and baseline. Any discrepancy in
# these two values is due to the errors in approximating the integral.
if explain_method == 'integrated-gradients':
total_test += 1
want_integral = predicted_val - baseline_score
got_integral = sum(attribution_vals)
if abs(want_integral-got_integral)/abs(want_integral) > 0.05:
print('Warning: Integral approximation error exceeds 5%.')
print('Please try increasing the number of integrated gradient steps.')
else:
passed_test += 1
print(passed_test, ' out of ', total_test, ' sanity checks passed.')
Saat mengurai penjelasan, Anda dapat menjalankan pemeriksaan ini pada setiap atribusi yang telah diterima:
for i in attributions_resp['explanations']:
check_explanations(i)
Menggunakan kesalahan perkiraan untuk meningkatkan hasil
Metode atribusi fitur AI Explanations (contoh Shapley, gradien terintegrasi, dan XRAI) semuanya didasarkan pada varian nilai Shapley. Karena nilai Shapley sangat mahal secara komputasi, AI Explanations memberikan perkiraan, bukan nilai yang tepat. Bersama dengan hasil atribusi fitur, AI Explanations juga menampilkan error perkiraan. Jika error perkiraan melebihi 0,05, pertimbangkan untuk menyesuaikan input Anda guna mengurangi error tersebut.
Anda dapat mengurangi error perkiraan dan mendapatkan nilai yang mendekati nilai yang tepat dengan mengubah input berikut:
- Meningkatkan jumlah langkah integral atau jumlah jalur.
- Mengubah dasar pengukuran input yang Anda pilih.
- Menambahkan lebih banyak dasar pengukuran input. Dengan gradien terintegrasi dan metode XRAI, penggunaan dasar pengukuran tambahan akan meningkatkan latensi. Menggunakan dasar pengukuran tambahan dengan metode Shapley yang dijadikan sampel tidak akan meningkatkan latensi.
Meningkatkan langkah atau jalur
Untuk mengurangi error perkiraan, Anda dapat meningkatkan:
- jumlah jalur untuk Shapley yang dijadikan sampel
- jumlah langkah integral untuk gradien terintegrasi atau XRAI
Anda menetapkan parameter ini saat membuat resource versi selama deployment model.
Menyesuaikan garis dasar
Anda dapat menetapkan input_baselines
dalam file explanation_metadata.json
. Bagian ini memberikan contoh untuk data tabel dan gambar. Dasar pengukuran input dapat
mewakili nilai median, minimum, maksimum, atau acak dalam kaitannya dengan
data pelatihan Anda.
Secara umum:
- Memulai dengan satu dasar pengukuran yang mewakili nilai median.
- Ubah dasar pengukuran ini menjadi dasar yang mewakili nilai acak.
- Coba dua dasar pengukuran, yang masing-masing mewakili nilai minimum dan maksimum.
- Tambahkan dasar pengukuran lain yang mewakili nilai acak.
Contoh untuk data tabular
Kode Python berikut membuat konten file metadata penjelasan untuk data tabel. Anda dapat menggunakan Shapley dengan sampel atau gradien terintegrasi guna mendapatkan atribusi fitur untuk data tabel. Kode ini adalah bagian dari contoh notebook untuk data tabel.
Perhatikan bahwa input_baselines
adalah daftar tempat Anda dapat menentukan beberapa
dasar pengukuran. Contoh ini hanya menetapkan satu dasar pengukuran. Dasar pengukuran adalah daftar nilai median
untuk data pelatihan (dalam contoh ini train_data
).
explanation_metadata = {
"inputs": {
"data": {
"input_tensor_name": model.input.name,
"input_baselines": [train_data.median().values.tolist()],
"encoding": "bag_of_features",
"index_feature_mapping": train_data.columns.tolist()
}
},
"outputs": {
"duration": {
"output_tensor_name": model.output.name
}
},
"framework": "tensorflow"
}
Untuk menetapkan dua dasar pengukuran yang mewakili nilai minimum dan maksimum, tetapkan
input_baselines
sebagai berikut:
[train_data.min().values.tolist(), train_data.max().values.tolist()]
Contoh untuk data gambar
Kode Python berikut membuat konten file metadata penjelasan untuk data gambar. Anda dapat menggunakan gradien terintegrasi untuk mendapatkan atribusi fitur untuk data gambar. Kode ini adalah bagian dari contoh notebook untuk data gambar.
Perhatikan bahwa input_baselines
adalah daftar tempat Anda dapat menentukan beberapa
dasar pengukuran. Contoh ini hanya menetapkan satu dasar pengukuran. Dasar pengukuran adalah daftar
nilai acak. Menggunakan nilai acak untuk dasar pengukuran gambar adalah pendekatan yang baik jika
gambar dalam set data pelatihan berisi banyak warna hitam putih.
Jika tidak, tetapkan input_baselines
ke [0, 1]
untuk mewakili gambar hitam putih.
random_baseline = np.random.rand(192,192,3)
explanation_metadata = {
"inputs": {
"data": {
"input_tensor_name": "input_pixels:0",
"modality": "image",
"input_baselines": [random_baseline.tolist()]
}
},
"outputs": {
"probability": {
"output_tensor_name": "dense/Softmax:0"
}
},
"framework": "tensorflow"
}
Langkah selanjutnya
- Pelajari lebih lanjut batasan atribusi fitur
- Untuk memvisualisasikan penjelasan, Anda dapat menggunakan What-If Tool. Lihat contoh notebook untuk mempelajari lebih lanjut.
- Lihat AI Explanations SDK.