Menemukan penyebab error yang muncul saat melatih model atau mendapatkan prediksi di cloud bisa jadi sulit. Halaman ini menjelaskan cara menemukan dan men-debug masalah yang Anda alami di AI Platform Prediction. Jika Anda mengalami masalah dengan framework machine learning yang digunakan, baca dokumentasi untuk framework machine learning.
Alat command line
- ERROR: (gcloud) Pilihan tidak valid: 'ai-platform'.
Error ini berarti Anda perlu mengupdate gcloud. Untuk mengupdate gcloud, jalankan perintah berikut:
gcloud components update
- ERROR: (gcloud) unrecognized arguments: --framework=SCIKIT_LEARN.
Error ini berarti Anda perlu mengupdate gcloud. Untuk mengupdate gcloud, jalankan perintah berikut:
gcloud components update
- ERROR: (gcloud) unrecognized arguments: --framework=XGBOOST.
Error ini berarti Anda perlu mengupdate gcloud. Untuk mengupdate gcloud, jalankan perintah berikut:
gcloud components update
- ERROR: (gcloud) Gagal memuat model: Tidak dapat memuat model: /tmp/model/0001/model.pkl. '\x03'. (Kode error: 0)
Error ini berarti library yang salah digunakan untuk mengekspor model. Untuk memperbaikinya, ekspor ulang model menggunakan library yang benar. Misalnya, ekspor model dalam bentuk
model.pkl
dengan librarypickle
dan model dalam bentukmodel.joblib
dengan libraryjoblib
.- ERROR: (gcloud.ai-platform.jobs.submit.prediction) argument --data-format: Invalid choice: 'json'.
Error ini berarti Anda menentukan
json
sebagai nilai tanda--data-format
saat mengirimkan tugas prediksi batch. Untuk menggunakan format dataJSON
, Anda harus memberikantext
sebagai nilai flag--data-format
.
Versi Python
- ERROR: Model yang buruk terdeteksi dengan error: "Gagal memuat model: Tidak dapat memuat
- model: /tmp/model/0001/model.pkl. unsupported pickle protocol: 3. Harap buat
- pastikan model diekspor menggunakan python 2. Jika tidak, harap tentukan
- memperbaiki parameter 'python_version' saat men-deploy model. Saat ini,
- 'python_version' menerima 2.7 dan 3.5. (Kode error: 0)"
- Error ini berarti file model yang diekspor dengan Python 3 di-deploy ke resource versi model AI Platform Prediction dengan setelan Python 2.7.
Untuk mengatasi hal ini:
- Buat resource versi model baru dan tetapkan 'python_version' ke 3.5.
- Deploy file model yang sama ke resource versi model baru.
Perintah virtualenv
tidak ditemukan
Jika Anda mendapatkan error ini saat mencoba mengaktifkan virtualenv
, salah satu kemungkinan
solusi adalah menambahkan direktori yang berisi virtualenv
ke variabel lingkungan
$PATH
. Dengan mengubah variabel ini, Anda dapat menggunakan perintah virtualenv
tanpa mengetik jalur file lengkapnya.
Pertama, instal virtualenv
dengan menjalankan perintah berikut:
pip install --user --upgrade virtualenv
Penginstal akan meminta Anda untuk mengubah variabel lingkungan
$PATH
, dan memberikan jalur ke skrip virtualenv
. Di macOS, ini
terlihat mirip dengan
/Users/[YOUR-USERNAME]/Library/Python/[YOUR-PYTHON-VERSION]/bin
.
Buka file tempat shell memuat variabel lingkungan. Biasanya, ini adalah
~/.bashrc
atau ~/.bash_profile
di macOS.
Tambahkan baris berikut, ganti [VALUES-IN-BRACKETS]
dengan nilai yang sesuai:
export PATH=$PATH:/Users/[YOUR-USERNAME]/Library/Python/[YOUR-PYTHON-VERSION]/bin
Terakhir, jalankan perintah berikut untuk memuat file .bashrc
(atau .bash_profile
) yang telah diperbarui:
source ~/.bashrc
Menggunakan log tugas
Tempat pertama yang baik untuk memulai pemecahan masalah adalah log tugas yang diambil oleh Cloud Logging.
Logging untuk berbagai jenis operasi
Pengalaman logging Anda bervariasi menurut jenis operasi seperti yang ditunjukkan di bagian berikut.
Log prediksi batch
Semua tugas prediksi batch Anda dicatat ke dalam log.
Log prediksi online
Permintaan prediksi online Anda tidak menghasilkan log secara default. Anda dapat mengaktifkan Cloud Logging saat membuat resource model:
gcloud
Sertakan flag --enable-logging
saat Anda menjalankan
gcloud ai-platform models create
.
Python
Tetapkan onlinePredictionLogging
ke True
di
resource Model
yang Anda gunakan
untuk panggilan ke
projects.models.create
.
Menemukan log
Log tugas Anda berisi semua peristiwa untuk operasi Anda, termasuk peristiwa dari semua proses di cluster saat Anda menggunakan pelatihan terdistribusi. Jika Anda menjalankan tugas pelatihan terdistribusi, log tingkat tugas akan dilaporkan untuk proses pekerja master. Langkah pertama pemecahan masalah error biasanya adalah memeriksa log untuk proses tersebut, memfilter peristiwa yang dicatat ke dalam log untuk proses lain di cluster Anda. Contoh di bagian ini menunjukkan pemfilteran tersebut.
Anda dapat memfilter log dari command line atau di bagian Cloud Logging di Konsol Google Cloud. Dalam kedua kasus tersebut, gunakan nilai metadata ini dalam filter Anda sesuai kebutuhan:
Item metadata | Filter untuk menampilkan item yang... |
---|---|
resource.type | Sama dengan "cloud_ml_job". |
resource.labels.job_id | Sama dengan nama tugas Anda. |
resource.labels.task_name | Sama dengan "master-replica-0" untuk hanya membaca entri log untuk pekerja master Anda. |
tingkat keseriusan, | Lebih besar dari atau sama dengan ERROR untuk hanya membaca entri log yang sesuai dengan kondisi error. |
Command Line
Gunakan gcloud beta logging read untuk membuat kueri yang memenuhi kebutuhan Anda. Berikut beberapa contohnya:
Setiap contoh bergantung pada variabel lingkungan ini:
PROJECT="my-project-name"
JOB="my_job_name"
Anda dapat memasukkan literal string sebagai gantinya jika mau.
Untuk mencetak log tugas ke layar:
gcloud ai-platform jobs stream-logs $JOB
Lihat semua opsi untuk gcloud ai-platform jobs stream-logs.
Untuk mencetak log bagi pekerja master ke layar:
gcloud beta logging read --project=${PROJECT} "resource.type=\"ml_job\" and resource.labels.job_id=${JOB} and resource.labels.task_name=\"master-replica-0\""
Untuk hanya mencetak error yang dicatat ke dalam log untuk pekerja master ke layar:
gcloud beta logging read --project=${PROJECT} "resource.type=\"ml_job\" and resource.labels.job_id=${JOB} and resource.labels.task_name=\"master-replica-0\" and severity>=ERROR"
Contoh sebelumnya mewakili kasus pemfilteran yang paling umum untuk log dari tugas pelatihan AI Platform Prediction Anda. Cloud Logging menyediakan banyak opsi pemfilteran yang canggih dan dapat Anda gunakan jika perlu menyaring penelusuran. Dokumentasi pemfilteran lanjutan menjelaskan opsi tersebut secara mendetail.
Konsol
Buka halaman Jobs AI Platform Prediction di konsol Google Cloud.
Pilih tugas yang gagal dari daftar di halaman Tugas untuk melihat detailnya.
- Klik Lihat log untuk membuka Cloud Logging.
Anda juga dapat langsung membuka Cloud Logging, tetapi Anda memiliki langkah tambahan untuk menemukan tugas:
- Luaskan pemilih aset.
- Luaskan Tugas AI Platform Prediction dalam daftar resource.
- Temukan nama tugas Anda dalam daftar job_id (Anda dapat memasukkan beberapa huruf pertama nama tugas di kotak penelusuran untuk mempersempit tugas yang ditampilkan).
- Luaskan entri tugas dan pilih
master-replica-0
dari daftar tugas.
Mendapatkan informasi dari log
Setelah menemukan log yang tepat untuk tugas Anda dan memfilternya ke master-replica-0
, Anda dapat memeriksa peristiwa yang dicatat ke dalam log untuk menemukan sumber masalah. Hal ini melibatkan prosedur proses debug Python standar, tetapi hal-hal berikut
perlu diingat:
- Peristiwa memiliki beberapa tingkat keparahan. Anda dapat memfilter untuk hanya melihat peristiwa dari tingkat tertentu, seperti error, atau error dan peringatan.
- Masalah yang menyebabkan pelatih Anda keluar dengan kondisi error yang tidak dapat dipulihkan (kode return > 0) dicatat ke dalam log sebagai pengecualian yang didahului oleh pelacakan stack:
- Anda bisa mendapatkan informasi selengkapnya dengan meluaskan objek dalam pesan JSON yang dicatat ke dalam log (ditunjukkan dengan panah yang menghadap ke kanan dan konten yang tercantum sebagai {...}). Misalnya, Anda dapat meluaskan jsonPayload untuk melihat pelacakan tumpukan dalam bentuk yang lebih mudah dibaca daripada yang diberikan dalam deskripsi error utama:
- Beberapa error menampilkan instance error yang dapat dicoba ulang. Error ini biasanya tidak menyertakan pelacakan tumpukan dan dapat lebih sulit didiagnosis.
Mengoptimalkan logging
Layanan pelatihan AI Platform Prediction secara otomatis mencatat peristiwa berikut di log:
- Informasi status internal untuk layanan.
- Pesan yang dikirim aplikasi pelatih Anda ke
stderr
. - Output teks yang dikirim aplikasi pelatih Anda ke
stdout
.
Anda dapat mempermudah pemecahan masalah error di aplikasi pelatih dengan mengikuti praktik pemrograman yang baik:
- Kirim pesan yang bermakna ke stderr (misalnya, dengan logging).
- Tampilkan pengecualian yang paling logis dan deskriptif saat terjadi masalah.
- Tambahkan string deskriptif ke objek pengecualian Anda.
Dokumentasi Python memberikan informasi selengkapnya tentang pengecualian.
Memecahkan masalah prediksi
Bagian ini mengumpulkan beberapa masalah umum yang terjadi saat mendapatkan prediksi.
Menangani kondisi tertentu untuk prediksi online
Bagian ini memberikan panduan tentang beberapa kondisi error prediksi online yang diketahui memengaruhi beberapa pengguna.
Prediksi memerlukan waktu terlalu lama untuk diselesaikan (30-180 detik)
Penyebab paling umum dari prediksi online yang lambat adalah penskalaan node pemrosesan dari nol. Jika model Anda memiliki permintaan prediksi reguler yang dibuat terhadapnya, sistem akan mempertahankan satu atau beberapa node agar siap menayangkan prediksi. Jika model Anda belum menayangkan prediksi dalam waktu lama, layanan akan "memperkecil skala" menjadi nol node yang siap. Permintaan prediksi berikutnya setelah penskalaan ke bawah tersebut akan memerlukan waktu jauh lebih lama untuk ditampilkan daripada biasanya karena layanan harus menyediakan node untuk menanganinya.
Kode status HTTP
Saat terjadi error dengan permintaan prediksi online, Anda biasanya akan mendapatkan kode status HTTP dari layanan. Berikut adalah beberapa kode yang biasa ditemui dan maknanya dalam konteks prediksi online:
- 429 - Kehabisan Memori
Node pemrosesan kehabisan memori saat menjalankan model Anda. Saat ini, tidak ada cara untuk meningkatkan memori yang dialokasikan ke node prediksi. Anda dapat mencoba hal-hal berikut untuk menjalankan model:
- Kurangi ukuran model dengan:
- Menggunakan variabel yang kurang akurat.
- Mengkuantitatifkan data kontinu Anda.
- Mengurangi ukuran fitur input lainnya (misalnya, menggunakan ukuran kosakata yang lebih kecil).
- Kirim permintaan lagi dengan batch instance yang lebih kecil.
- Kurangi ukuran model dengan:
- 429 - Terlalu banyak permintaan yang tertunda
Model Anda mendapatkan lebih banyak permintaan daripada yang dapat ditanganinya. Jika Anda menggunakan penskalaan otomatis, permintaan akan diterima lebih cepat daripada kemampuan penskalaan sistem. Selain itu, jika nilai node minimum adalah 0, konfigurasi ini dapat menyebabkan skenario "cold start" dengan rasio error 100% yang akan diamati hingga node pertama dapat digunakan.
Dengan penskalaan otomatis, Anda dapat mencoba mengirim ulang permintaan dengan backoff eksponensial. Mengirim ulang permintaan dengan backoff eksponensial dapat memberi sistem waktu untuk menyesuaikan.
Secara default, penskalaan otomatis dipicu oleh pemakaian CPU yang melebihi 60% dan dapat dikonfigurasi.
- 429 - Kuota
Project Google Cloud Platform Anda dibatasi hingga 10.000 permintaan setiap 100 detik (sekitar 100 per detik). Jika Anda mendapatkan error ini dalam lonjakan sementara, Anda sering dapat mencoba lagi dengan backoff eksponensial untuk memproses semua permintaan tepat waktu. Jika Anda terus mendapatkan kode ini, Anda dapat meminta peningkatan kuota. Lihat halaman kuota untuk mengetahui detail selengkapnya.
- 503 - Sistem kami mendeteksi adanya traffic yang tidak biasa dari jaringan komputer Anda
Rasio permintaan yang diterima model Anda dari satu IP sangat tinggi sehingga sistem mencurigai serangan denial of service. Hentikan pengiriman permintaan selama satu menit, lalu lanjutkan pengiriman dengan kecepatan yang lebih rendah.
- 500 - Tidak dapat memuat model
Sistem mengalami masalah saat memuat model Anda. Coba langkah-langkah berikut:
- Pastikan bahwa pelatih Anda mengekspor model yang tepat.
- Coba prediksi pengujian dengan perintah
gcloud ai-platform local predict
. - Ekspor model Anda lagi dan coba lagi.
Error pemformatan untuk permintaan prediksi
Semua pesan ini berkaitan dengan input prediksi Anda.
- "JSON kosong atau salah format/tidak valid dalam isi permintaan"
- Layanan tidak dapat mengurai JSON dalam permintaan Anda atau permintaan Anda kosong. Periksa pesan Anda untuk menemukan error atau kelalaian yang membatalkan JSON.
- "Kolom 'instance' tidak ada dalam isi permintaan"
- Isi permintaan Anda tidak mengikuti format yang benar. Ini harus berupa objek JSON dengan satu kunci bernama
"instances"
yang berisi daftar dengan semua instance input Anda. - Error encoding JSON saat membuat permintaan
Permintaan Anda menyertakan data yang dienkode base64, tetapi tidak dalam format JSON yang tepat. Setiap string yang dienkode base64 harus direpresentasikan oleh objek dengan satu kunci bernama
"b64"
. Contoh:{"b64": "an_encoded_string"}
Error base64 lainnya terjadi saat Anda memiliki data biner yang tidak dienkode base64. Enkode data Anda dan format sebagai berikut:
{"b64": base64.b64encode(binary_data)}
Lihat informasi selengkapnya tentang memformat dan mengenkode data biner.
Prediksi di cloud memerlukan waktu lebih lama daripada di desktop
Prediksi online dirancang untuk menjadi layanan skalabel yang dengan cepat menayangkan permintaan prediksi dengan rasio tinggi. Layanan dioptimalkan untuk performa gabungan di semua permintaan penayangan. Penekanan pada skalabilitas mengarah pada karakteristik performa yang berbeda dibandingkan dengan menghasilkan sejumlah kecil prediksi di mesin lokal Anda.
Langkah selanjutnya
- Dapatkan dukungan.
- Pelajari lebih lanjut model error Google API,
terutama kode error kanonis yang ditentukan dalam
google.rpc.Code
dan detail error standar yang ditentukan dalam google/rpc/error_details.proto. - Pelajari cara memantau tugas pelatihan.
- Lihat FAQ dan pemecahan masalah Cloud TPU untuk mendapatkan bantuan dalam mendiagnosis dan memecahkan masalah saat menjalankan AI Platform Prediction dengan Cloud TPU.