Ini adalah panduan umum tentang cara men-deploy dan menggunakan model di AI Platform Prediction dengan Penjelasan AI.
Sebelum memulai
Anda harus melakukan beberapa hal sebelum dapat melatih dan men-deploy model di AI Platform:
- Siapkan lingkungan pengembangan lokal Anda.
- Siapkan project GCP dengan penagihan dan API yang diperlukan diaktifkan.
- Buat bucket Cloud Storage untuk menyimpan paket pelatihan dan model terlatih Anda.
Untuk menyiapkan project GCP, ikuti petunjuk yang diberikan dalam 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 menggunakannya untuk
TensorFlow 1.15.
Pelajari lebih lanjut cara menyimpan model untuk digunakan dengan Penjelasan AI, dan cara menggunakan Explainable AI SDK.
File metadata penjelasan
Sebelum men-deploy model, Anda harus mengirimkan file metadata dengan informasi tentang input, output, dan dasar pengukuran model, sehingga Penjelasan AI memberikan penjelasan untuk bagian model yang benar.
Sebaiknya gunakan Explainable AI SDK untuk menemukan input dan output model Anda secara otomatis. Pada umumnya, hal ini menghemat waktu dan tenaga, karena Explainable AI SDK membuat dan mengupload file metadata penjelasan untuk Anda.
Membuat file metadata penjelasan secara manual
Jika memiliki kasus penggunaan lanjutan, Anda mungkin lebih memilih untuk menentukan input dan output model secara manual. Untuk membuat file metadata penjelasan secara manual, ikuti langkah-langkah berikut:
- Identifikasi nama tensor input dan output yang ingin Anda jelaskan. Lihat bagian di bawah tentang menemukan nama tensor 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
Anda. - Beri nama file
explanation_metadata.json
. - Upload file
explanation_metadata.json
ke bucket Cloud Storage yang sama dengan tempat SavedModel 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 tensor input dan
output yang dapat Anda tetapkan dalam proses membuat dan melatih
model. Nama tensor 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]
mewakili gambar yang seluruhnya hitam. Anda dapat
menentukan beberapa dasar pengukuran untuk memberikan informasi tambahan. Pelajari lebih lanjut cara
menyesuaikan dasar pengukuran.
Menemukan nama tensor input dan output secara manual
Pada umumnya, Anda dapat menggunakan Explainable AI SDK untuk menghasilkan input dan output untuk model Anda. Anda hanya perlu menemukan nama tensor input dan output secara manual jika menggunakan model TensorFlow 1.15 terlatih.
Cara terbaik untuk menemukan nama tensor input dan output bergantung pada jenis data input dan output, serta cara Anda mem-build model. Untuk penjelasan yang lebih mendalam tentang setiap kasus, serta contoh, lihat panduan tentang [memahami input dan output][understanding-inputs-outputs].
Jenis data input | Jenis data output | Kriteria lainnya | Pendekatan yang direkomendasikan |
---|---|---|---|
Numerik atau string | Angka | Input tidak dalam bentuk serial. Output bukan data numerik yang diperlakukan sebagai data kategoris (misalnya, ID kelas numerik). | Gunakan CLI SavedModel untuk menemukan nama tensor input dan output Anda. Atau, build file metadata penjelasan saat melatih dan menyimpan model, dengan program atau lingkungan Anda masih memiliki akses ke kode pelatihan. |
Data serial apa pun | Semua | Tambahkan operasi penguraian TensorFlow ke fungsi input inferensi saat mengekspor model. Gunakan output operasi penguraian untuk membantu mengidentifikasi tensor input. | |
Semua | Semua | Model mencakup operasi pra-pemrosesan | Untuk mendapatkan nama tensor input setelah
langkah prapemrosesan, gunakan properti name dari
tf.Tensor untuk mendapatkan nama tensor input. |
Semua | Bukan probabilitas, logit, atau jenis tensor floating point lainnya | Anda ingin mendapatkan penjelasan untuk output yang bukan probabilitas, logit, atau jenis tensor floating point lainnya. | Periksa grafik Anda dengan TensorBoard untuk menemukan tensor output yang benar. |
Data apa pun yang tidak dapat dibedakan | Semua | Anda ingin menggunakan gradien terintegrasi, yang memerlukan input yang dapat dibedakan. | Enkode input yang tidak terdiferensiasi sebagai tensor terdiferensiasi. Tambahkan nama tensor input asli dan tensor 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 AI Platform Prediction adalah penampung untuk versi model machine learning Anda.
Untuk men-deploy model, Anda membuat resource model di AI Platform Prediction, membuat versi model tersebut, lalu menautkan 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. Dalam 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 Penjelasan AI.
gcloud ai-platform models create MODEL_NAME \
--region us-central1
Lihat API model AI Platform Prediction untuk mengetahui detail selengkapnya.
Membuat versi model
Sekarang Anda siap membuat versi model dengan model terlatih yang sebelumnya diupload ke Cloud Storage. Saat membuat versi, tentukan parameter berikut:
name
: harus unik dalam model AI Platform Prediction.deploymentUri
: jalur ke direktori SavedModel Anda di Cloud Storage.framework
(wajib): Khusustensorflow
runtimeVersion
: menggunakan 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
: gunakan "3.7" untuk versi runtime 1.15 dan yang lebih baru.machineType
(wajib): jenis virtual machine yang digunakan AI Platform Prediction untuk node yang menayangkan prediksi dan penjelasan. Pilih jenis mesin yang didukung untuk Penjelasan AI.explanation-method
: jenis metode atribusi fitur yang akan digunakan: "sampled-shapley", "integrated-gradients", atau "xrai".- Jalur atau langkah: gunakan
--num-paths
untuk sampel Shapley, dan gunakan--num-integral-steps
untuk gradien terintegrasi atau XRAI.
Lihat informasi selengkapnya tentang setiap parameter ini di Training API dan Prediction API AI Platform untuk resource versi.
Tetapkan variabel lingkungan untuk menyimpan jalur ke direktori Cloud Storage tempat SavedModel 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. Setelah 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
Pastikan statusnya adalah
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 Penjelasan AI, 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 | vCPU | 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 AI Platform Prediction lainnya.
Pelajari harga untuk setiap jenis mesin. Baca selengkapnya tentang spesifikasi mendetail dari jenis mesin Compute Engine (N1) di dokumentasi Compute Engine.
Memformat data input
Format dasar untuk prediksi online adalah daftar instance data. Ini dapat berupa daftar nilai biasa atau anggota objek JSON, bergantung pada cara Anda mengonfigurasi input dalam aplikasi pelatihan Anda. Pelajari cara memformat input kompleks dan data biner 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 mengirimkan permintaan dengan
gcloud
, pastikan file input Anda adalah file JSON yang dipisahkan 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
Minta 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 tabular, 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 dalam referensi API.
Pelajari cara mengurai respons penjelasan dengan melihat contoh notebook:
TensorFlow 2:
TensorFlow 1.15:
Memeriksa penjelasan
Contoh kode berikut membantu Anda memeriksa sekumpulan penjelasan dan melihat apakah Anda perlu menyesuaikan dasar pengukuran.
Dalam kode, Anda hanya perlu memperbarui nilai kunci input sesuai dengan yang
ditentukan 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 Anda terima:
for i in attributions_resp['explanations']:
check_explanations(i)
Menggunakan error perkiraan untuk meningkatkan hasil
Metode atribusi fitur AI Explanations (sampel Shapley, gradien terpadu, dan XRAI) semuanya didasarkan pada varian nilai Shapley. Karena nilai Shapley sangat mahal secara komputasi, Penjelasan AI hanya memberikan perkiraan, bukan nilai tepatnya. Bersama dengan hasil atribusi fitur, Penjelasan AI juga menampilkan error perkiraan. Jika error perkiraan Anda melebihi 0,05, sebaiknya sesuaikan input untuk mengurangi error.
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 sampel Shapley
- jumlah langkah integral untuk gradien terintegrasi atau XRAI
Anda menetapkan parameter ini saat membuat resource versi selama deployment model.
Menyesuaikan dasar pengukuran
Anda dapat menetapkan input_baselines
di file explanation_metadata.json
. Bagian ini
memberikan contoh untuk data tabel dan gambar. Dasar pengukuran input dapat
mewakili nilai median, minimum, maksimum, atau acak yang terkait 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 sampel atau gradien terintegrasi untuk mendapatkan atribusi fitur untuk data tabel. Kode ini adalah bagian dari contoh notebook untuk data tabular.
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 Alat What-If. Lihat contoh notebook untuk mempelajari lebih lanjut.
- Lihat AI Explanations SDK.