Saya mencoba menggunakan Google Cloud ML untuk menghosting model Tensorflow dan mendapatkan prediksi. Saya memiliki model terlatih yang telah saya unggah ke cloud dan saya telah membuat model dan versi di konsol Cloud ML saya.

Saya mengikuti petunjuk dari sini untuk menyiapkan data saya untuk meminta prediksi online. Untuk metode Python dan metode glcoud saya mendapatkan kesalahan yang sama. Untuk mempermudah, saya akan memposting metode gcloud:

Saya menjalankan gcloud ml-engine predict --model spell_correction --json-instances test.json di mana test.json adalah file data input saya (array JSON bernama instances). Saya mendapatkan hasil berikut:

ERROR: (gcloud.ml-engine.predict) HTTP request failed. Response: {
  "error": {
  "code": 400,
  "message": "Precondition check failed.",
  "status": "FAILED_PRECONDITION"
  }
}

Bagaimana saya bisa mendapatkan detail lebih lanjut tentang ini? Kesalahan persis yang sama terjadi ketika saya mencoba melalui Python dan di sana saya memiliki objek googleapiclient.http.HttpRequest yang berisi kesalahan. Saya hanya ingin tahu mengapa kesalahan ini terjadi selain kesalahan umum ini. Adakah yang tahu cara mendapatkan detail lebih lanjut melalui metode Python atau metode gcloud? Saya berasumsi bahwa karena itu adalah kesalahan yang sama, itu adalah akar penyebab yang sama.

Keluaran gcloud ml-engine models list:

NAME              DEFAULT_VERSION_NAME
spell_correction  testing

Keluaran gcloud ml-engine versions list --model spell_correction

NAME     DEPLOYMENT_URI
testing  gs://<my-bucket>/output/1/

test.json: {"instances": [{"tokens": [[9], [4], [11], [9]], "mask": [[18], [7], [12], [30]], "keep_prob": 1.0, "beam": 64}]}

Masukan saya untuk model:

tokens: tf.placeholder(tf.int32, shape=[None, None])

mask: tf.placeholder(tf.int32, shape=[None, None])

keep_prob: tf.placeholder(tf.float32)

beam: tf.placeholder(tf.int32)

Saat menelepon melalui python, request_body hanya test.json sebagai string.

4
jbird 13 Maret 2017, 17:22

2 jawaban

Jawaban Terbaik

Setelah berbicara dengan dukungan Google Cloud ML, saya berhasil.

Masalah utama yang saya perhatikan adalah bahwa semua data di test.json terbungkus dalam daftar saat dikirim ke model Anda. Saya memecahkan ini dengan menghapus daftar luar dari tokens dan mask di file saya di atas. Saya juga mengubah keep_prob dan beam menjadi konstanta karena saya tidak ingin mereka dapat berubah untuk setiap prediksi yang saya buat.

Sebagai saran umum, pesan kesalahan yang diberikan melalui panggilan Python jauh lebih berguna bagi saya daripada pesan kesalahan dari gcloud ml-engine predict. Pastikan juga untuk selalu memperbarui gcloud pemasangan Anda, mereka mengerjakan perbaikan hampir terus-menerus.

1
jbird 20 Maret 2017, 14:01

Catatan tambahan: apakah Anda mencoba "prediksi lokal" (https: //cloud.google.com/sdk/gcloud/reference/ml-engine/local/predict) dengan model Anda terlebih dahulu? Anda mungkin bisa mendapatkan informasi lebih lanjut di sana terlebih dahulu.

1
roger 14 Maret 2017, 01:43