Pemecahan masalah

Menemukan penyebab error yang muncul saat melatih model Anda atau mendapatkan prediksi di cloud bisa menjadi hal yang menantang. Halaman ini menjelaskan cara menemukan dan men-debug masalah yang Anda temukan di AI Platform Prediction. Jika Anda mengalami masalah dengan framework machine learning yang Anda gunakan, baca dokumentasi untuk framework machine learning.

Alat command line

ERROR: (gcloud) Pilihan tidak valid: 'ai-platform'.

Pesan kesalahan ini berarti Anda perlu memperbarui gcloud. Untuk mengupdate gcloud, jalankan perintah berikut:

gcloud components update
GALAT: (gcloud) argumen tidak dikenal: --framework=SCIKIT_LEARN.

Pesan kesalahan ini berarti Anda perlu memperbarui gcloud. Untuk mengupdate gcloud, jalankan perintah berikut:

gcloud components update
GALAT: (gcloud) argumen tidak dikenal: --framework=XGBOOST.

Pesan kesalahan ini berarti Anda perlu memperbarui 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 digunakan untuk mengekspor model salah. Untuk memperbaikinya, ekspor ulang model menggunakan library yang benar. Misalnya, ekspor model formulir model.pkl dengan library pickle dan model berformat model.joblib dengan library joblib.

ERROR: (gcloud.ai-platform.jobs.submit.gsutil) argumen --data-format: Pilihan tidak valid: 'json'.

Error ini berarti Anda menentukan json sebagai nilai tanda --data-format saat mengirimkan tugas prediksi batch. Untuk menggunakan format data JSON, Anda harus memberikan text sebagai nilai flag --data-format.

Versi Python

ERROR: Model buruk terdeteksi dengan pesan error: "Gagal memuat model: Tidak dapat memuat
3.Model: /tmp/model/0001/model. pkl. Harap buat
memastikan model itu diekspor menggunakan python 2. Jika tidak, harap sebutkan
parameter 'python_version' yang benar 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 mengalami error ini saat mencoba mengaktifkan virtualenv, salah satu solusi yang memungkinkan adalah menambahkan direktori yang berisi virtualenv ke variabel lingkungan $PATH Anda. 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 mengubah variabel lingkungan $PATH, dan menyediakan jalur ke skrip virtualenv. Di macOS, konfigurasi ini terlihat mirip dengan /Users/[YOUR-USERNAME]/Library/Python/[YOUR-PYTHON-VERSION]/bin.

Buka file tempat shell Anda memuat variabel lingkungan. Biasanya, kode ini adalah ~/.bashrc atau ~/.bash_profile di macOS.

Tambahkan baris berikut, dengan mengganti [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 diupdate:

source ~/.bashrc

Menggunakan log tugas

Tempat pertama yang baik untuk memulai pemecahan masalah adalah log tugas yang direkam 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 akan dicatat.

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 berisi semua peristiwa untuk operasi Anda, termasuk peristiwa dari semua proses dalam cluster saat Anda menggunakan pelatihan terdistribusi. Jika Anda menjalankan tugas pelatihan terdistribusi, log tingkat tugas Anda akan dilaporkan untuk proses pekerja master. Langkah pertama untuk memecahkan masalah error biasanya adalah memeriksa log untuk proses tersebut, dengan memfilter peristiwa yang dicatat ke dalam log untuk proses lain dalam cluster Anda. Contoh di bagian ini menunjukkan pemfilteran tersebut.

Anda dapat memfilter log dari command line atau di bagian Cloud Logging di Google Cloud Console. Dalam kedua kasus tersebut, gunakan nilai metadata ini di filter sesuai kebutuhan:

Item metadata Filter untuk menampilkan item di tempatnya...
resource.type Setara dengan "cloud_ml_job".
resource.labels.job_id Sama dengan nama pekerjaan Anda.
resource.labels.task_name Sama dengan "master-replica-0" untuk hanya membaca entri log bagi pekerja master Anda.
tingkat keseriusan Lebih 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 berikut:

PROJECT="my-project-name"
JOB="my_job_name"

Anda dapat memasukkan literal string di tempat jika Anda mau.

Untuk mencetak log tugas ke layar:
gcloud ai-platform jobs stream-logs $JOB

Lihat semua opsi untuk gcloud ai-platform jobs-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 mencetak hanya kesalahan yang dicatat 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\" and severity>=ERROR"

Contoh sebelumnya menunjukkan kasus pemfilteran paling umum untuk log dari tugas pelatihan Prediction AI Platform Anda. Cloud Logging menyediakan banyak opsi canggih untuk pemfilteran yang dapat Anda gunakan jika Anda perlu menyaring penelusuran. Dokumentasi pemfilteran lanjutan menjelaskan opsi tersebut secara mendetail.

Konsol

  1. Buka halaman Tugas Prediksi AI Platform di Konsol Google Cloud.

    Membuka lowongan di konsol Google Cloud

  2. Pilih tugas yang gagal dari daftar pada halaman Lowongan untuk melihat detailnya.

Daftar tugas Prediction AI Platform yang menampilkan tugas yang gagal.

  1. Klik Lihat log untuk membuka Cloud Logging.

Halaman detail tugas untuk tugas yang gagal.

Anda juga dapat langsung membuka Cloud Logging, tetapi Anda memiliki langkah tambahan untuk menemukan pekerjaan:

  1. Luaskan pemilih resource.
  2. Perluas Tugas Prediksi AI Platform dalam daftar resource.
  3. Temukan nama pekerjaan Anda di daftar job_id (Anda dapat memasukkan beberapa huruf pertama dari nama pekerjaan di kotak penelusuran untuk mempersempit tugas yang ditampilkan).
  4. Luaskan entri tugas dan pilih master-replica-0 dari daftar tugas.

Semua pemilih filter log diperluas.

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. Ini melibatkan prosedur proses debug standar Python, tetapi hal ini perlu diingat:

  • Peristiwa memiliki beberapa tingkat keparahan. Anda dapat memfilter untuk hanya melihat peristiwa pada level tertentu, seperti error, atau error dan peringatan.
  • Masalah yang menyebabkan pelatih Anda keluar dengan kondisi error yang tidak dapat dipulihkan (kode yang ditampilkan > 0) dicatat ke dalam log sebagai pengecualian yang didahului oleh pelacakan tumpukan:

Entri log tanpa bagian yang diperluas

  • Anda bisa mendapatkan informasi lebih lanjut dengan memperluas objek dalam pesan JSON yang dicatat (ditunjukkan dengan panah ke kanan dan konten yang tercantum sebagai {...}). Misalnya, Anda dapat memperluas jsonPayload untuk melihat pelacakan tumpukan dalam bentuk yang lebih mudah dibaca daripada yang diberikan dalam deskripsi error utama:

Entri log dengan bagian payload JSON diluaskan

  • Beberapa error menampilkan instance error yang dapat dicoba lagi. Masalah ini biasanya tidak menyertakan pelacakan tumpukan dan dapat lebih sulit untuk didiagnosis.

Mendapatkan hasil maksimal dari logging

Layanan pelatihan Prediction AI Platform akan otomatis mencatat peristiwa berikut:

  • Informasi status internal untuk layanan.
  • Pesan yang dikirim aplikasi pelatih Anda ke stderr.
  • Teks output yang dikirim aplikasi pelatih Anda ke stdout.

Anda dapat mempermudah pemecahan error dalam aplikasi pelatih dengan mengikuti praktik pemrograman yang baik:

  • Kirim pesan yang bermakna ke stderr (misalnya, dengan logging).
  • Tingkatkan pengecualian yang paling logis dan deskriptif saat terjadi masalah.
  • Tambahkan string deskriptif ke objek pengecualian Anda.

Dokumentasi Python memberikan informasi selengkapnya tentang pengecualian.

Prediksi pemecahan masalah

Bagian ini mengumpulkan beberapa masalah umum yang dialami saat mendapatkan prediksi.

Menangani kondisi tertentu untuk prediksi online

Bagian ini memberikan panduan tentang beberapa kondisi error prediksi online yang diketahui memengaruhi sebagian pengguna.

Prediksi memerlukan waktu terlalu lama untuk diselesaikan (30-180 detik)

Penyebab paling umum dari prediksi online yang lambat adalah menskalakan node pemrosesan dari nol. Jika model Anda memiliki permintaan prediksi reguler yang dibuat untuk model tersebut, sistem akan menyimpan satu atau beberapa node yang siap untuk menampilkan prediksi. Jika model Anda belum menampilkan prediksi dalam waktu yang lama, layanan akan "diperkecil" ke nol node siap. Permintaan prediksi berikutnya setelah penurunan skala semacam itu akan memerlukan waktu lebih banyak untuk ditampilkan dari biasanya karena layanan harus menyediakan node untuk menanganinya.

Kode status HTTP

Saat terjadi error pada permintaan prediksi online, Anda biasanya akan mendapatkan kembali kode status HTTP dari layanan. Berikut adalah beberapa kode yang umum ditemui dan artinya dalam konteks prediksi online:

429 - Kehabisan Memori

Node pemrosesan kehabisan memori saat menjalankan model Anda. Tidak ada cara untuk meningkatkan memori yang dialokasikan ke node prediksi saat ini. Anda dapat mencoba hal-hal berikut untuk menjalankan model:

  • Kurangi ukuran model Anda dengan:
    • Menggunakan variabel yang kurang akurat.
    • Mengkuantifikasi data berkelanjutan.
    • Mengurangi ukuran fitur input lainnya (misalnya, menggunakan ukuran kosakata yang lebih kecil).
    • Kirim lagi permintaan dengan batch instance yang lebih kecil.
429 - Terlalu banyak permintaan yang menunggu keputusan

Model Anda mendapatkan lebih banyak permintaan daripada yang dapat ditangani. Jika Anda menggunakan penskalaan otomatis, permintaan akan diterima lebih cepat daripada yang dapat diskalakan sistem. Lebih lanjut, jika nilai node minimum adalah 0, konfigurasi ini dapat menyebabkan skenario "cold start", dengan tingkat error 100% akan diamati hingga node pertama memungkinkan.

Dengan penskalaan otomatis, Anda dapat mencoba mengirim ulang permintaan dengan backoff eksponensial. Mengirim ulang permintaan dengan backoff eksponensial dapat memberikan waktu bagi sistem 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 mendapatkan error ini dalam lonjakan sementara, Anda dapat mencoba lagi dengan backoff eksponensial untuk memproses semua permintaan secara tepat waktu. Jika terus mendapatkan kode ini, Anda dapat meminta peningkatan kuota. Lihat halaman kuota untuk mengetahui detail selengkapnya.

503 - Sistem kami mendeteksi lalu lintas yang tidak biasa dari jaringan komputer Anda

Tingkat permintaan yang diterima model Anda dari satu IP sangat tinggi sehingga sistem mencurigai adanya serangan denial of service. Berhenti mengirim permintaan selama satu menit, lalu lanjutkan pengirimannya dengan frekuensi yang lebih rendah.

500 - Tidak dapat memuat model

Sistem mengalami masalah saat memuat model Anda. Coba langkah-langkah berikut:

  • Pastikan pelatih Anda mengekspor model yang tepat.
  • Coba prediksi pengujian dengan perintah gcloud ai-platform local predict.
  • Ekspor model Anda lagi, lalu coba lagi.

Error format 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. Objek ini harus berupa objek JSON dengan satu kunci bernama "instances" yang berisi daftar dengan semua instance input Anda.
Terjadi error encoding JSON saat membuat permintaan

Permintaan Anda mencakup data berenkode base64, tetapi tidak dalam format JSON yang tepat. Setiap string berenkode base64 harus diwakili oleh objek dengan satu kunci bernama "b64". Contoh:

  {"b64": "an_encoded_string"}

Error base64 lainnya terjadi jika Anda memiliki data biner yang tidak dienkode base64. Enkode data Anda dan formatnya 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 melayani permintaan prediksi dengan tingkat tinggi. Layanan dioptimalkan untuk performa gabungan di semua permintaan penayangan. Penekanan pada skalabilitas mengarah pada karakteristik performa yang berbeda dengan menghasilkan sejumlah kecil prediksi pada mesin lokal Anda.

Langkah selanjutnya