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 dalam AI Platform Training. Jika Anda mengalami masalah dengan framework machine learning yang Anda gunakan, baca dokumentasi untuk framework machine learning.
Alat command line
ERROR: (gcloud) Invalid choice: 'ai-platform'.
Pesan kesalahan ini berarti Anda perlu memperbarui gcloud. Untuk mengupdate gcloud, jalankan perintah berikut:
gcloud components update
ERROR: (gcloud) unrecognized arguments: --framework=SCIKIT_LEARN.
Pesan kesalahan ini berarti Anda perlu memperbarui gcloud. Untuk mengupdate gcloud, jalankan perintah berikut:
gcloud components update
ERROR: (gcloud) unrecognized arguments: --framework=XGBOOST.
Pesan kesalahan ini berarti Anda perlu memperbarui gcloud. Untuk mengupdate gcloud, jalankan perintah berikut:
gcloud components update
ERROR: (gcloud) Failed to load model: Could not load the model: /tmp/model/0001/model.pkl. '\\x03'. (Error code: 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 librarypickle
dan model berformatmodel.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: Bad model detected with error: "Failed to load model: Could not load the
model: /tmp/model/0001/model.pkl. unsupported pickle protocol: 3. Please make
sure the model was exported using python 2. Otherwise, please specify the
correct 'python_version' parameter when deploying the model. Currently,
'python_version' accepts 2.7 and 3.5. (Error code: 0)"
Error ini berarti file model yang diekspor dengan Python 3 telah di-deploy ke resource versi model Pelatihan AI Platform 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 pelatihan
Semua tugas pelatihan Anda dicatat. Log ini mencakup peristiwa dari layanan pelatihan dan dari aplikasi pelatihan Anda. Anda dapat menempatkan peristiwa logging di aplikasi dengan library Python standar (misalnya, logging). AI Platform Training mencatat semua pesan logging dari aplikasi Anda. Semua pesan yang dikirim ke stderr akan otomatis dicatat di entri tugas Anda di Cloud Logging.
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 mewakili kasus pemfilteran paling umum untuk log dari tugas pelatihan Pelatihan 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
Buka halaman Tugas Pelatihan AI Platform di Konsol Google Cloud.
Pilih tugas yang gagal dari daftar pada halaman Lowongan untuk melihat detailnya.
- Klik Lihat log untuk membuka Cloud Logging.
Anda juga dapat langsung membuka Cloud Logging, tetapi Anda memiliki langkah tambahan untuk menemukan pekerjaan:
- Luaskan pemilih resource.
- Luaskan Tugas Cloud ML dalam daftar resource.
- 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).
- 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. 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:
- 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:
- 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 AI Platform Training 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.
Pelatihan pemecahan masalah
Bagian ini menjelaskan konsep dan kondisi error yang berlaku untuk tugas pelatihan.
Memahami kode pengembalian aplikasi pelatihan
Tugas pelatihan Anda di cloud dikontrol oleh program utama yang berjalan pada proses pekerja master cluster pelatihan Anda:
- Jika Anda melakukan pelatihan dalam proses tunggal (tidak terdistribusi), Anda hanya memiliki satu pekerja, yaitu master.
- Program utama Anda adalah fungsi
__main__
dari aplikasi pelatihan TensorFlow. - Layanan pelatihan Pelatihan AI Platform menjalankan aplikasi pelatih Anda hingga berhasil diselesaikan atau mengalami error yang tidak dapat dipulihkan. Artinya, proses mungkin akan dimulai ulang jika muncul error yang dapat dicoba lagi.
Layanan pelatihan mengelola proses Anda. Kode ini menangani keluar dari program sesuai dengan kode pengembalian proses pekerja master Anda:
Kode status | Arti | Respons Pelatihan AI Platform |
---|---|---|
0 | Berhasil diselesaikan | Mematikan dan melepaskan resource tugas. |
1 - 128 | Error yang tidak dapat dipulihkan | Mengakhiri tugas dan mencatat error ke dalam log. |
Anda tidak perlu melakukan apa pun secara khusus terkait kode pengembalian fungsi
__main__
. Python secara otomatis mengembalikan nol saat penyelesaian berhasil,
dan menampilkan kode positif jika menemukan pengecualian yang tidak tertangani. Jika Anda
sudah terbiasa menetapkan kode pengembalian tertentu untuk objek pengecualian (praktik
yang valid tetapi tidak umum), hal tersebut tidak akan mengganggu
tugas Pelatihan AI Platform, selama Anda mengikuti pola dalam tabel
di atas. Meskipun demikian, kode klien biasanya tidak menunjukkan error yang dapat dicoba lagi secara langsung—kode tersebut berasal dari lingkungan operasi.
Menangani kondisi error tertentu
Bagian ini memberikan panduan tentang beberapa kondisi error yang diketahui memengaruhi sebagian pengguna.
Resource sudah terlampaui
Permintaan tinggi untuk GPU dan resource komputasi di region us-central1
.
Anda mungkin mendapatkan pesan error di log tugas yang bertuliskan: Resources are
insufficient in region: <region>. Please try a different region.
.
Untuk mengatasi hal ini, coba gunakan wilayah lain atau coba lagi nanti.
Pelatih berlari selamanya tanpa membuat kemajuan apa pun
Beberapa situasi dapat menyebabkan aplikasi pelatih Anda berjalan terus-menerus tanpa membuat progres pada tugas pelatihan. Hal ini mungkin disebabkan oleh panggilan pemblokiran yang menunggu resource yang tidak pernah tersedia. Anda dapat mengurangi masalah ini dengan mengonfigurasi interval waktu tunggu di pelatih.
Konfigurasikan interval waktu tunggu untuk pelatih Anda
Anda dapat menetapkan waktu tunggu, dalam milidetik, baik saat membuat sesi maupun saat menjalankan langkah grafik Anda:
Tetapkan interval waktu tunggu yang diinginkan menggunakan parameter config saat Anda membuat objek Sesi:
sess = tf.Session(config=tf.ConfigProto(operation_timeout_in_ms=500))
Tetapkan interval waktu tunggu yang diinginkan untuk satu panggilan ke Session.run menggunakan parameter options:
v = session.run(fetches, options=tf.RunOptions(timeout_in_ms=500))
Lihat dokumentasi Sesi TensorFlow untuk mengetahui informasi selengkapnya.
Keluar dari program dengan kode -9
Jika Anda mendapatkan kode keluar -9 secara konsisten, aplikasi pelatih Anda mungkin menggunakan lebih banyak memori daripada yang dialokasikan untuk prosesnya. Perbaiki error ini dengan mengurangi penggunaan memori, menggunakan jenis mesin dengan lebih banyak memori, atau keduanya.
- Periksa aplikasi grafik dan pelatih Anda untuk menemukan operasi yang menggunakan lebih banyak memori daripada yang diperkirakan. Penggunaan memori dipengaruhi oleh kompleksitas data Anda, dan kompleksitas operasi dalam grafik komputasi Anda.
- Anda mungkin perlu meningkatkan kualitas memori yang dialokasikan ke tugas Anda:
- Jika menggunakan tingkat skala yang ditentukan, Anda tidak dapat meningkatkan alokasi memori per mesin tanpa menambahkan lebih banyak mesin ke campuran. Anda harus beralih ke tingkat KUSTOM dan menentukan sendiri jenis mesin di cluster tersebut.
- Konfigurasi yang tepat dari setiap jenis mesin yang ditentukan dapat berubah, tetapi Anda dapat membuat beberapa perbandingan kasar. Anda akan menemukan tabel perbandingan jenis mesin di halaman konsep pelatihan.
- Saat menguji jenis mesin untuk alokasi memori yang sesuai, Anda dapat menggunakan satu mesin, atau cluster dengan ukuran yang lebih kecil, untuk meminimalkan biaya yang ditimbulkan.
Keluar dari program dengan kode -15
Biasanya, kode keluar -15 menunjukkan pemeliharaan oleh sistem. Ini adalah error yang dapat dicoba ulang, jadi proses Anda harus dimulai ulang secara otomatis.
Pekerjaan dalam antrean lama
Jika State tugas pelatihan adalah QUEUED
untuk jangka waktu yang lama, Anda mungkin telah melebihi
kuota permintaan tugas.
AI Platform Training memulai tugas pelatihan berdasarkan waktu pembuatan tugas, dengan menggunakan aturan pertama masuk, keluar pertama. Jika tugas Anda dimasukkan ke antrean, biasanya berarti bahwa semua kuota project dipakai oleh tugas lain yang dikirimkan sebelum tugas Anda atau tugas pertama dalam antrean meminta lebih banyak unit ML/GPU daripada kuota yang tersedia.
Alasan tugas telah dimasukkan ke dalam antrean dicatat dalam log pelatihan. Menelusuri log untuk menemukan pesan yang serupa dengan:
This job is number 2 in the queue and requires
4.000000 ML units and 0 GPUs. The project is using 4.000000 ML units out of 4
allowed and 0 GPUs out of 10 allowed.
Pesan ini menjelaskan posisi tugas Anda saat ini dalam antrean, serta penggunaan dan kuota project saat ini.
Perhatikan bahwa alasan tersebut hanya akan dicatat ke dalam log untuk sepuluh tugas pertama dalam antrean yang diurutkan berdasarkan waktu pembuatan tugas.
Jika secara rutin memerlukan permintaan lebih dari jumlah yang dialokasikan, Anda dapat meminta penambahan kuota. Hubungi dukungan jika Anda memiliki paket dukungan premium. Atau, Anda dapat mengirimkan permintaan melalui email ke masukan AI Platform Training .
Kuota melampaui batas
Jika mendapatkan error dengan pesan seperti "Kegagalan kuota untuk project_number:...", Anda mungkin telah melampaui salah satu kuota resource. Anda dapat memantau konsumsi resource dan meminta peningkatan di halaman kuota Pelatihan AI Platform di Pengelola API konsol Anda.
Jalur penyimpanan tidak valid
Jika tugas Anda ditutup dan muncul pesan error yang bertuliskan "Restore called with invalid store path gs://...", Anda mungkin menggunakan bucket Google Cloud Storage yang tidak dikonfigurasi dengan benar.
Buka halaman Browser Google Cloud Storage di Konsol Google Cloud.
Periksa Default storage class untuk bucket yang Anda gunakan:
- Atribut tersebut harus Regional. Jika ya, berarti ada masalah lainnya. Coba jalankan lagi tugas Anda.
- Jika berupa Multi-Regional, Anda perlu mengubahnya ke Regional, atau memindahkan materi pelatihan ke bucket lain. Untuk yang pertama, temukan petunjuk untuk mengubah kelas penyimpanan bucket dalam dokumentasi Cloud Storage.
Pelatih keluar dengan AbortedError
Error ini dapat terjadi jika Anda menjalankan pelatih yang menggunakan TensorFlow Supervisor untuk mengelola tugas terdistribusi. TensorFlow terkadang memunculkan pengecualian AbortedError dalam situasi ketika Anda tidak seharusnya menghentikan seluruh tugas. Anda dapat menangkap pengecualian tersebut di pelatih dan merespons dengan semestinya. Perlu diperhatikan bahwa TensorFlow Supervisor tidak didukung di pelatih yang Anda jalankan dengan AI Platform Training.
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.
- Kurangi ukuran model Anda dengan:
- 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 peningkatan skala yang dapat dilakukan sistem.
Dengan penskalaan otomatis, Anda dapat mencoba mengirim ulang permintaan dengan backoff eksponensial. Tindakan tersebut dapat memberi waktu bagi sistem untuk menyesuaikan.
- 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
- Dapatkan dukungan.
- Pelajari model error Google API lebih lanjut,
khususnya kode error kanonis yang didefinisikan dalam
google.rpc.Code
dan detail error standar yang ditentukan di google/rpc/error_details.proto. - Pelajari cara memantau tugas pelatihan Anda.
- Lihat FAQ dan pemecahan masalah Cloud TPU untuk mendapatkan bantuan dalam mendiagnosis dan menyelesaikan masalah saat menjalankan Pelatihan AI Platform dengan Cloud TPU.