Memecahkan masalah penyebaran dan penilaian titik akhir online

BERLAKU UNTUK:Ekstensi ml Azure CLI v2 (saat ini)Python SDK azure-ai-ml v2 (saat ini)

Pelajari cara mengatasi masalah umum dalam penyebaran dan penilaian titik akhir online Azure Machine Learning.

Dokumen ini disusun dengan cara yang harus Anda dekati pemecahan masalah:

  1. Gunakan penyebaran lokal untuk menguji dan men-debug model Anda secara lokal sebelum menyebarkan di cloud.
  2. Gunakan log kontainer untuk membantu masalah debug.
  3. Pahami kesalahan penyebaran umum yang mungkin timbul dan cara memperbaikinya.

Bagian Kode status HTTP menjelaskan bagaimana kesalahan pemanggilan dan prediksi di petakan ke kode status HTTP saat menilai titik akhir dengan permintaan REST.

Prasyarat

Sebarkan secara lokal

Penyebaran lokal adalah menyebarkan model ke lingkungan Docker lokal. Penyebaran lokal berguna untuk pengujian dan debugging sebelum penyebaran ke cloud.

Tip

Anda juga dapat menggunakan paket Python server HTTP inferensi Azure Pembelajaran Mesin untuk men-debug skrip penilaian Anda secara lokal. Penelusuran kesalahan dengan server inferensi membantu Anda men-debug skrip penilaian sebelum menyebarkan ke titik akhir lokal sehingga Anda dapat men-debug tanpa terpengaruh oleh konfigurasi kontainer penyebaran.

Penyebaran lokal mendukung pembuatan, pembaruan, dan penghapusan titik akhir lokal. Ini juga memungkinkan Anda untuk memanggil dan mendapatkan log dari titik akhir.

Untuk menggunakan penyebaran lokal, tambahkan --local ke perintah CLI yang sesuai:

az ml online-deployment create --endpoint-name <endpoint-name> -n <deployment-name> -f <spec_file.yaml> --local

Sebagai bagian dari penyebaran lokal, langkah-langkah berikut terjadi:

  • Docker akan membuat gambar kontainer baru atau menarik gambar yang ada dari cache Docker lokal. Gambar yang ada digunakan jika ada gambar yang cocok dengan bagian lingkungan dari file spesifikasi.
  • Docker memulai kontainer baru dengan artefak lokal yang dipasang seperti file model dan kode.

Untuk informasi selengkapnya, lihat Menyebarkan secara lokal di Menyebarkan dan menilai model pembelajaran mesin.

Tip

Gunakan Visual Studio Code untuk menguji dan mendebug titik akhir Anda secara lokal. Untuk informasi selengkapnya, lihat mendebug titik akhir online secara lokal di Visual Studio Code.

Penginstalan Conda

Umumnya, masalah dengan penyebaran MLflow berasal dari masalah dengan penginstalan lingkungan pengguna yang ditentukan dalam conda.yaml file.

Untuk men-debug masalah penginstalan conda, coba langkah-langkah berikut:

  1. Periksa log untuk penginstalan conda. Jika kontainer mengalami crash atau terlalu lama untuk memulai, kemungkinan pembaruan lingkungan conda gagal diselesaikan dengan benar.

  2. Instal file conda mlflow secara lokal dengan perintah conda env create -n userenv -f <CONDA_ENV_FILENAME>.

  3. Jika ada kesalahan secara lokal, coba selesaikan lingkungan conda dan buat yang lingkungan yang berfungsi sebelum menyebarkan ulang.

  4. Jika kontainer mengalami crash bahkan jika diselesaikan secara lokal, ukuran SKU yang digunakan untuk penyebaran mungkin terlalu kecil.

    1. Penginstalan paket Conda terjadi pada runtime, jadi jika ukuran SKU terlalu kecil untuk mengakomodasi semua paket yang dirinci dalam conda.yaml file lingkungan, maka kontainer mungkin crash.
    2. VM Standard_F4s_v2 adalah ukuran SKU awal yang baik, tetapi yang lebih besar mungkin diperlukan tergantung pada dependensi mana yang ditentukan dalam file conda.
    3. Untuk titik akhir online Kubernetes, kluster Kubernetes harus memiliki minimal 4 core vCPU dan memori 8 GB.

Mendapatkan log kontainer

Anda tidak bisa mendapatkan akses langsung ke VM tempat model disebarkan. Namun, Anda bisa mendapatkan log dari beberapa kontainer yang berjalan di VM. Jumlah informasi yang Anda dapatkan tergantung pada status provisi penyebaran. Jika kontainer yang ditentukan aktif dan berjalan, Anda akan melihat output konsolnya; jika tidak, Anda mendapatkan pesan untuk mencoba lagi nanti.

Ada dua jenis kontainer yang bisa Anda dapatkan lognya:

  • Server inferensi: Log menyertakan log konsol (dari server inferensi) yang berisi output fungsi cetak/pengelogan dari skrip penilaian Anda (score.py kode).
  • Penginisialisasi penyimpanan: Log berisi informasi tentang apakah data kode dan model berhasil diunduh ke kontainer. Kontainer berjalan sebelum kontainer server inferensi mulai berjalan.

Untuk melihat output log dari kontainer, gunakan perintah CLI berikut:

az ml online-deployment get-logs -e <endpoint-name> -n <deployment-name> -l 100

or

az ml online-deployment get-logs --endpoint-name <endpoint-name> --name <deployment-name> --lines 100

Tambahkan --resource-group dan --workspace-name ke perintah ini jika Anda belum mengatur parameter ini melalui az configure.

Untuk melihat informasi tentang cara mengatur parameter ini, dan jika saat ini Anda telah menetapkan nilai, jalankan:

az ml online-deployment get-logs -h

Secara default log ditarik dari server inferensi.

Catatan

Jika Anda menggunakan pencatatan Python, pastikan Anda menggunakan urutan tingkat pembuatan log yang benar agar pesan diterbitkan ke log. Misalnya, INFO.

Anda juga bisa mendapatkan log dari penyimpanan kontainer penginisial dengan melewati –-container storage-initializer.

Tambahkan --help dan/atau --debug ke perintah untuk melihat informasi selengkapnya.

Untuk titik akhir online Kubernetes, administrator dapat langsung mengakses kluster tempat Anda menyebarkan model, yang lebih fleksibel bagi mereka untuk memeriksa log di Kubernetes. Contohnya:

kubectl -n <compute-namespace> logs <container-name>

Pelacakan permintaan

Ada dua header pelacakan yang didukung:

  • x-request-id disediakan untuk pelacakan server. Kami mengambil alih header ini untuk memastikan bahwa header tersebut merupakan GUID yang valid.

    Catatan

    Saat Anda membuat tiket dukungan untuk permintaan yang gagal, lampirkan ID permintaan yang gagal untuk mempercepat penyelidikan.

  • x-ms-client-request-id tersedia untuk skenario pelacakan klien. Header ini disanitasi untuk hanya menerima karakter alfanumerik, tanda hubung dan garis bawah, dan dipotong hingga maksimum 40 karakter.

Kesalahan penyebaran umum

Daftar berikut adalah kesalahan penyebaran umum yang dilaporkan sebagai bagian dari status operasi penyebaran:

Jika Anda membuat atau memperbarui penyebaran online Kubernetes, Anda dapat melihat Kesalahan umum khusus untuk penyebaran Kubernetes.

KESALAHAN: ImageBuildFailure

Kesalahan ini dikembalikan ketika lingkungan (gambar docker) sedang dibangun. Anda dapat memeriksa log build untuk informasi selengkapnya tentang kegagalan tersebut. Log build terletak di penyimpanan default untuk ruang kerja Azure Machine Learning Anda. Lokasi yang tepat mungkin dikembalikan sebagai bagian dari kesalahan. Contohnya,"the build log under the storage account '[storage-account-name]' in the container '[container-name]' at the path '[path-to-the-log]'".

Daftar berikut berisi skenario kegagalan build gambar umum:

Sebaiknya tinjau pengaturan pemeriksaan default jika Anda memiliki batas waktu ImageBuild.

Kegagalan otorisasi registri kontainer

Jika pesan kesalahan menyebutkan itu berarti Anda tidak dapat mengakses registri "container registry authorization failure" kontainer dengan kredensial saat ini. Desinkronisasi kunci sumber daya ruang kerja dapat menyebabkan kesalahan ini dan perlu waktu untuk menyinkronkan secara otomatis. Namun, Anda dapat secara manual memanggil sinkronisasi kunci, yang mungkin mengatasi kegagalan otorisasi.

Registri kontainer yang berada di belakang jaringan virtual mungkin juga mengalami kesalahan ini jika salah disiapkan. Anda harus memverifikasi bahwa jaringan virtual disiapkan dengan benar.

Komputasi build gambar tidak diatur di ruang kerja privat dengan VNet

Jika pesan kesalahan menyebutkan "failed to communicate with the workspace's container registry" dan Anda menggunakan jaringan virtual dan Azure Container Registry ruang kerja bersifat privat dan dikonfigurasi dengan titik akhir privat, Anda perlu mengaktifkan Azure Container Registry untuk memungkinkan membangun gambar di jaringan virtual.

Kegagalan build gambar generik

Seperti yang dinyatakan sebelumnya, Anda dapat memeriksa log build untuk informasi selengkapnya tentang kegagalan tersebut. Jika tidak ada kesalahan yang jelas ditemukan di log build dan baris terakhir adalah Installing pip dependencies: ...working..., maka dependensi dapat menyebabkan kesalahan. Menyematkan dependensi versi dalam file conda Anda dapat memperbaiki masalah ini.

Sebaiknya sebarkan secara lokal untuk menguji dan men-debug model Anda secara lokal sebelum menyebarkan ke cloud.

KESALAHAN: OutOfQuota

Daftar berikut ini adalah sumber daya umum yang mungkin kehabisan kuota saat menggunakan layanan Azure:

Selain itu, daftar berikut adalah sumber daya umum yang mungkin kehabisan kuota hanya untuk titik akhir online Kubernetes:

Kuota CPU

Sebelum menyebarkan model, Anda harus memiliki kuota komputasi yang cukup. Kuota ini menentukan berapa banyak inti virtual yang tersedia per langganan, per ruang kerja, per SKU, dan per wilayah. Setiap penyebaran mengurangi kuota yang tersedia dan menambahkannya kembali setelah penghapusan, berdasarkan jenis SKU.

Mitigasi yang mungkin adalah memeriksa apakah ada penyebaran yang tidak digunakan yang dapat Anda hapus. Atau Anda dapat mengirimkan permintaan untuk kenaikan kuota.

Kuota kluster

Masalah ini terjadi ketika Anda tidak memiliki cukup kuota kluster Azure Pembelajaran Mesin Compute. Kuota ini menentukan jumlah total kluster yang mungkin digunakan pada satu waktu per langganan untuk menyebarkan node CPU atau GPU di Azure Cloud.

Mitigasi yang mungkin adalah memeriksa apakah ada penyebaran yang tidak digunakan yang dapat Anda hapus. Atau Anda dapat mengirimkan permintaan untuk kenaikan kuota. Pastikan untuk memilih Machine Learning Service: Cluster Quota sebagai jenis kuota untuk permintaan penambahan kuota ini.

Kuota disk

Masalah ini terjadi ketika ukuran model lebih besar dari ruang disk yang tersedia dan model tidak dapat diunduh. Coba SKU dengan lebih banyak ruang disk atau kurangi ukuran gambar dan model.

Kuota memori

Masalah ini terjadi ketika footprint memori model lebih besar dari memori yang tersedia. Coba SKU dengan lebih banyak memori.

Kuota penetapan peran

Saat Anda membuat titik akhir online terkelola, penetapan peran diperlukan agar identitas terkelola mengakses sumber daya ruang kerja. Jika batas penetapan peran tercapai, coba hapus beberapa penetapan peran yang tidak digunakan dalam langganan ini. Anda dapat memeriksa semua penetapan peran di portal Azure dengan menavigasi ke menu Kontrol Akses.

Kuota titik akhir

Coba hapus beberapa titik akhir yang tidak digunakan dalam langganan ini. Jika semua titik akhir Anda aktif digunakan, Anda dapat mencoba meminta peningkatan batas titik akhir. Untuk mempelajari selengkapnya tentang batas titik akhir, lihat Kuota titik akhir dengan titik akhir online Azure Pembelajaran Mesin dan titik akhir batch.

Kuota Kubernetes

Masalah ini terjadi ketika CPU atau memori yang diminta tidak dapat disediakan karena node tidak dapat dischedulable untuk penyebaran ini. Misalnya, simpul mungkin berkode atau tidak tersedia.

Pesan kesalahan biasanya menunjukkan sumber daya tidak cukup dalam kluster, misalnya, OutOfQuota: Kubernetes unschedulable. Details:0/1 nodes are available: 1 Too many pods..., yang berarti bahwa ada terlalu banyak pod dalam kluster dan tidak cukup sumber daya untuk menyebarkan model baru berdasarkan permintaan Anda.

Anda dapat mencoba mitigasi berikut untuk mengatasi masalah ini:

  • Untuk ops IT yang memelihara kluster Kubernetes, Anda dapat mencoba menambahkan lebih banyak node atau menghapus beberapa pod yang tidak digunakan dalam kluster untuk merilis beberapa sumber daya.
  • Untuk teknisi pembelajaran mesin yang menyebarkan model, Anda dapat mencoba mengurangi permintaan sumber daya penyebaran Anda:
    • Jika Anda secara langsung menentukan permintaan sumber daya di bagian konfigurasi penyebaran melalui sumber daya, Anda dapat mencoba mengurangi permintaan sumber daya.
    • Jika Anda menggunakan instance type untuk menentukan sumber daya untuk penyebaran model, Anda dapat menghubungi ops IT untuk menyesuaikan konfigurasi sumber daya jenis instans, detail lebih lanjut, Anda dapat merujuk ke Cara mengelola jenis instans Kubernetes.

Kapasitas VM di seluruh wilayah

Karena kurangnya kapasitas Azure Pembelajaran Mesin di wilayah tersebut, layanan gagal menyediakan ukuran VM yang ditentukan. Coba kembali nanti atau coba gunakan ke wilayah yang berbeda.

Kuota lainnya

Untuk menjalankan score.py yang disediakan sebagai bagian dari penyebaran, Azure membuat kontainer yang mencakup semua sumber daya yang dibutuhkan score.py, dan menjalankan skrip penilaian pada kontainer tersebut.

Jika kontainer Anda tidak dapat dimulai, itu berarti penilaian tidak dapat terjadi. Bisa jadi kontainer meminta lebih banyak sumber daya daripada apa yang bisa didukung instance_type. Jika demikian, pertimbangkan untuk memperbarui instance_type dari penyebaran online.

Untuk mendapatkan alasan pasti kesalahan, jalankan:

az ml online-deployment get-logs -e <endpoint-name> -n <deployment-name> -l 100

KESALAHAN: BadArgument

Daftar berikut adalah alasan Anda mungkin mengalami kesalahan ini saat menggunakan titik akhir online terkelola atau titik akhir online Kubernetes:

Daftar berikut ini adalah alasan Anda mungkin mengalami kesalahan ini hanya saat menggunakan titik akhir online Kubernetes:

Langganan tidak ada

Langganan Azure yang dimasukkan harus sudah ada. Kesalahan ini terjadi ketika kami tidak dapat menemukan langganan Azure yang dirujuk. Kesalahan ini kemungkinan disebabkan oleh kesalahan ketik dalam ID langganan. Periksa kembali apakah ID langganan dititik dengan benar dan saat ini aktif.

Untuk informasi selengkapnya tentang langganan Azure, Anda dapat melihat bagian prasyarat.

Otorisasi gagal

Setelah Anda menyediakan sumber daya komputasi (saat membuat penyebaran), Azure mencoba menarik gambar kontainer pengguna dari ruang kerja Azure Container Registry (ACR). Ini mencoba memasang model pengguna dan artefak kode ke dalam kontainer pengguna dari akun penyimpanan ruang kerja.

Untuk melakukan tindakan ini, Azure menggunakan identitas terkelola untuk mengakses akun penyimpanan dan registri kontainer.

  • Jika Anda membuat titik akhir terkait dengan Identitas yang Ditetapkan Sistem, izin kontrol akses berbasis peran Azure (RBAC) secara otomatis diberikan, dan tidak ada izin lebih lanjut yang diperlukan.

  • Jika Anda membuat titik akhir terkait dengan Identitas yang Ditetapkan Pengguna, identitas terkelola pengguna harus memiliki izin pembaca data blob Penyimpanan di akun penyimpanan untuk ruang kerja, dan izin AcrPull pada Azure Container Registry (ACR) untuk ruang kerja. Pastikan Identitas yang Ditetapkan Pengguna Anda memiliki izin yang tepat.

Untuk informasi selengkapnya, silakan lihat Kesalahan Otorisasi Container Registry.

Spesifikasi fungsi templat tidak valid

Kesalahan ini terjadi ketika fungsi templat salah ditentukan. Perbaiki kebijakan atau hapus penetapan kebijakan untuk membuka blokir. Pesan kesalahan dapat mencakup nama penetapan kebijakan dan definisi kebijakan untuk membantu Anda men-debug kesalahan ini, dan artikel struktur definisi kebijakan Azure, yang membahas tips untuk menghindari kegagalan templat.

Tidak dapat mengunduh citra kontainer pengguna

Ada kemungkinan bahwa kontainer pengguna tidak dapat ditemukan. Periksa log kontainer untuk mendapatkan detail selengkapnya.

Pastikan gambar kontainer tersedia di ACR ruang kerja.

Misalnya, jika gambar adalah testacr.azurecr.io/azureml/azureml_92a029f831ce58d2ed011c3c42d35acb:latest periksa repositori dengan az acr repository show-tags -n testacr --repository azureml/azureml_92a029f831ce58d2ed011c3c42d35acb --orderby time_desc --output table.

Tidak dapat mengunduh model pengguna

Ada kemungkinan bahwa model pengguna tidak dapat ditemukan. Periksa log kontainer untuk mendapatkan detail selengkapnya.

Pastikan apakah Anda telah mendaftarkan model ke ruang kerja yang sama dengan penyebaran. Untuk menampilkan detail model di ruang kerja:

az ml model show --name <model-name> --version <version>

Peringatan

Anda harus menentukan versi atau label untuk mendapatkan informasi model.

Anda juga dapat memeriksa jika blob ada di akun penyimpanan ruang kerja.

  • Misalnya, jika blob-nya adalah https://foobar.blob.core.windows.net/210212154504-1517266419/WebUpload/210212154504-1517266419/GaussianNB.pkl Anda dapat menggunakan perintah ini untuk memeriksa apakah blob ada:

    az storage blob exists --account-name foobar --container-name 210212154504-1517266419 --name WebUpload/210212154504-1517266419/GaussianNB.pkl --subscription <sub-name>`
    
  • Jika blob ada, Anda dapat menggunakan perintah ini untuk mendapatkan log dari penginisialisasi penyimpanan:

    az ml online-deployment get-logs --endpoint-name <endpoint-name> --name <deployment-name> –-container storage-initializer`
    

Format model MLFlow dengan jaringan privat tidak didukung

Kesalahan ini terjadi ketika Anda mencoba menyebarkan model MLflow dengan pendekatan penyebaran tanpa kode bersama dengan metode isolasi jaringan warisan untuk titik akhir online terkelola. Fitur jaringan privat ini tidak dapat digunakan bersama dengan format model MLFlow jika Anda menggunakan metode isolasi jaringan lama . Jika Anda perlu menyebarkan model MLflow dengan pendekatan penyebaran tanpa kode, coba gunakan VNet terkelola ruang kerja.

Permintaan sumber daya lebih besar dibandingkan batas

Permintaan sumber daya harus kurang dari atau sama dengan batas. Jika tidak mengatur batas, kami mengatur nilai default saat Anda melampirkan komputasi ke ruang kerja Azure Machine Learning. Anda dapat memeriksa batas di portal Microsoft Azure atau dengan menggunakan perintah az ml compute show.

azureml-fe belum siap

Komponen front-end (azureml-fe) yang merutekan permintaan inferensi masuk ke layanan yang digunakan secara otomatis menskalakan sesuai kebutuhan. Komponen diinstal selama penginstalan ekstensi k8s Anda.

Komponen ini harus sehat pada kluster, setidaknya satu replika sehat. Anda menerima pesan kesalahan ini jika tidak tersedia saat memicu titik akhir online kubernetes dan permintaan pembuatan/pembaruan penyebaran.

Periksa status pod dan log untuk memperbaiki masalah ini, Anda juga dapat mencoba memperbarui ekstensi k8s yang diinstal pada kluster.

KESALAHAN: ResourceNotReady

Untuk menjalankan score.py yang disediakan sebagai bagian dari penyebaran, Azure membuat kontainer yang mencakup semua sumber daya yang dibutuhkan score.py, dan menjalankan skrip penilaian pada kontainer tersebut. Kesalahan dalam skenario ini adalah bahwa kontainer ini mengalami crash saat berjalan, yang berarti skoring tidak bisa terjadi. Kesalahan ini terjadi ketika:

  • Ada kesalahan dalam score.py. Gunakan get-logs untuk mendiagnosis masalah umum:
    • Paket yang score.py mencoba mengimpor tidak disertakan dalam lingkungan conda.
    • Kesalahan sintaksis.
    • Kegagalan dalam metode init().
  • Jika get-logs tidak menghasilkan log, biasanya berarti kontainer telah gagal untuk memulai. Untuk medebug masalah ini, coba sebarkan secara lokal sebagai gantinya.
  • Pemeriksaan kesiapan atau keaktifan tidak diatur dengan benar.
  • Inisialisasi kontainer memakan waktu terlalu lama sehingga kesiapan atau pemeriksaan keaktifan gagal melampaui ambang kegagalan. Dalam hal ini, sesuaikan pengaturan pemeriksaan untuk memungkinkan waktu yang lebih lama untuk menginisialisasi kontainer. Atau coba SKU VM yang lebih besar di antara SKU VM yang didukung, yang mempercepat inisialisasi.
  • Ada kesalahan dalam pengaturan lingkungan kontainer, seperti dependensi yang hilang.
  • Saat Anda menerima TypeError: register() takes 3 positional arguments but 4 were given kesalahan, periksa dependensi antara flask v2 dan azureml-inference-server-http. Untuk informasi selengkapnya, lihat FAQ untuk server HTTP inferensi.

KESALAHAN: ResourceNotFound

Daftar berikut ini adalah alasan Anda mungkin mengalami kesalahan ini hanya saat menggunakan titik akhir online terkelola atau titik akhir online Kubernetes:

Resource Manager tidak dapat menemukan sumber daya

Kesalahan ini terjadi ketika Azure Resource Manager tidak dapat menemukan sumber daya yang diperlukan. Misalnya, Anda dapat menerima kesalahan ini jika akun penyimpanan dirujuk tetapi tidak dapat ditemukan di jalur tempat akun tersebut ditentukan. Pastikan untuk memeriksa kembali sumber daya yang mungkin telah disediakan oleh jalur yang tepat atau ejaan namanya.

Untuk informasi selengkapnya, lihat Mengatasi Kesalahan Sumber Daya Tidak Ditemukan.

Kesalahan otorisasi registri kontainer

Kesalahan ini terjadi saat citra milik registri kontainer yang privat atau tidak dapat diakses terlanjur disediakan untuk penyebaran. Saat ini, API kami tidak dapat menerima kredensial registri privat.

Untuk memitigasi kesalahan ini, pastikan bahwa registri kontainer bersifat tidak privat atau ikuti langkah-langkah berikut:

  1. Berikan peran registri acrPull privat Anda ke identitas sistem titik akhir online Anda.
  2. Dalam definisi lingkungan Anda, tentukan alamat gambar privat Anda dan instruksi untuk tidak memodifikasi (membangun) gambar.

Jika mitigasi berhasil, gambar tidak memerlukan pembangunan, dan alamat gambar akhir adalah alamat gambar yang diberikan. Pada waktu penyebaran, identitas sistem titik akhir online Anda menarik gambar dari registri privat.

Untuk informasi diagnostik lebih lanjut, lihat Cara Menggunakan API Diagnostik Ruang Kerja.

KESALAHAN: OperationCanceled

Daftar berikut adalah alasan Anda mungkin mengalami kesalahan ini saat menggunakan titik akhir online terkelola atau titik akhir online Kubernetes:

Operasi dibatalkan oleh operasi berprioritas yang lebih tinggi lainnya

Operasi Azure memiliki tingkat prioritas tertentu dan dieksekusi dari tertinggi hingga terendah. Kesalahan ini terjadi ketika operasi Anda ditimpa oleh operasi lain yang memiliki prioritas lebih tinggi.

Mencoba kembali operasi mungkin mengizinkan operasi dilakukan tanpa pembatalan.

Operasi dibatalkan menunggu konfirmasi penguncian

Operasi Azure memiliki periode tunggu singkat setelah dikirimkan selama operasi tersebut mengambil kunci untuk memastikan bahwa kami tidak mengalami kondisi lomba. Kesalahan ini terjadi ketika operasi yang Anda kirimkan sama dengan operasi lain. Operasi lain saat ini menunggu konfirmasi bahwa ia telah menerima kunci untuk melanjutkan. Ini mungkin menunjukkan bahwa Anda telah mengirimkan permintaan serupa terlalu cepat setelah permintaan awal.

Mencoba kembali operasi setelah menunggu beberapa detik hingga satu menit mungkin memungkinkannya dilakukan tanpa pembatalan.

KESALAHAN: SecretsInjectionError

Pengambilan dan injeksi rahasia selama pembuatan penyebaran online menggunakan identitas yang terkait dengan titik akhir online untuk mengambil rahasia dari koneksi ruang kerja dan/atau brankas kunci. Kesalahan ini terjadi ketika:

  • Identitas titik akhir tidak memiliki izin Azure RBAC untuk membaca rahasia dari koneksi ruang kerja dan/atau brankas kunci, meskipun rahasia ditentukan oleh definisi penyebaran sebagai referensi (dipetakan ke variabel lingkungan). Ingatlah bahwa penetapan peran mungkin membutuhkan waktu agar perubahan diterapkan.
  • Format referensi rahasia tidak valid, atau rahasia yang ditentukan tidak ada di koneksi ruang kerja dan/atau brankas kunci.

Untuk informasi selengkapnya, lihat Injeksi rahasia di titik akhir online (pratinjau) dan Mengakses rahasia dari penyebaran online menggunakan injeksi rahasia (pratinjau).

KESALAHAN: InternalServerError

Meski kami melakukan yang terbaik untuk memberikan layanan yang stabil dan dapat diandalkan, terkadang hal-hal tidak berjalan sesuai rencana. Jika Anda mendapatkan kesalahan ini, artinya ada sesuatu yang tidak tepat di pihak kami dan kami perlu memperbaikinya. Kirimkan tiket dukungan pelanggan dengan semua informasi terkait dan kami dapat mengatasi masalah tersebut.

Kesalahan umum khusus untuk penyebaran Kubernetes

Kesalahan mengenai identitas dan autentikasi:

Kesalahan mengenai crashloopbackoff:

Kesalahan mengenai skrip penilaian:

Lainnya:

KESALAHAN: ACRSecretError

Daftar berikut adalah alasan Anda mungkin mengalami kesalahan ini saat membuat/memperbarui penyebaran online Kubernetes:

  • Penetapan peran belum selesai. Dalam hal ini, tunggu beberapa detik dan coba lagi nanti.
  • Azure ARC (Untuk kluster Azure Arc Kubernetes) atau ekstensi Azure Pembelajaran Mesin (Untuk AKS) tidak diinstal atau dikonfigurasi dengan benar. Cobalah untuk memeriksa konfigurasi dan status ekstensi Azure ARC atau Azure Pembelajaran Mesin.
  • Kluster Kubernetes memiliki konfigurasi jaringan yang tidak tepat, periksa proksi, kebijakan jaringan, atau sertifikat.
    • Jika Anda menggunakan kluster AKS privat, Anda perlu menyiapkan titik akhir privat untuk ACR, akun penyimpanan, ruang kerja di vnet AKS.
  • Pastikan versi ekstensi Azure Pembelajaran Mesin Anda lebih besar dari v1.1.25.

KESALAHAN: TokenRefreshFailed

Kesalahan ini karena ekstensi tidak bisa mendapatkan kredensial utama dari Azure karena identitas kluster Kubernetes tidak diatur dengan benar. Instal ulang ekstensi Azure Pembelajaran Mesin dan coba lagi.

KESALAHAN: GetAADTokenFailed

Kesalahan ini karena permintaan kluster Kubernetes token Azure AD gagal atau kehabisan waktu, periksa aksesibilitas jaringan Anda lalu coba lagi.

  • Anda dapat mengikuti konfigurasi lalu lintas jaringan yang diperlukan untuk memeriksa proksi keluar, pastikan kluster dapat tersambung ke ruang kerja.
  • Url titik akhir ruang kerja dapat ditemukan di CRD titik akhir online dalam kluster.

Jika ruang kerja Anda adalah ruang kerja privat, yang menonaktifkan akses jaringan publik, kluster Kubernetes hanya boleh berkomunikasi dengan ruang kerja privat tersebut melalui tautan privat.

  • Anda dapat memeriksa apakah akses ruang kerja memungkinkan akses publik, tidak peduli apakah kluster AKS itu sendiri bersifat publik atau privat, kluster tersebut tidak dapat mengakses ruang kerja privat.
  • Informasi lebih lanjut yang dapat Anda lihat lingkungan inferensi Secure Azure Kubernetes Service

KESALAHAN: ACRAuthenticationChallengeFailed

Kesalahan ini karena kluster Kubernetes tidak dapat menjangkau layanan ACR ruang kerja untuk melakukan tantangan autentikasi. Periksa jaringan Anda, terutama akses jaringan publik ACR, lalu coba lagi.

Anda dapat mengikuti langkah-langkah pemecahan masalah di GetAADTokenFailed untuk memeriksa jaringan.

KESALAHAN: ACRTokenExchangeFailed

Kesalahan ini karena token ACR pertukaran kluster Kubernetes gagal karena token Azure AD belum diotorisasi. Karena penetapan peran membutuhkan waktu, sehingga Anda dapat menunggu sejenak lalu coba lagi.

Kegagalan ini mungkin juga disebabkan oleh terlalu banyak permintaan ke layanan ACR pada saat itu, itu harus menjadi kesalahan sementara, Anda dapat mencoba lagi nanti.

KESALAHAN: KubernetesUnaccessible

Anda mungkin mendapatkan kesalahan berikut selama penyebaran model Kubernetes:

{"code":"BadRequest","statusCode":400,"message":"The request is invalid.","details":[{"code":"KubernetesUnaccessible","message":"Kubernetes error: AuthenticationException. Reason: InvalidCertificate"}],...}

Untuk mengurangi kesalahan ini, Anda dapat:

KESALAHAN: ImagePullLoopBackOff

Alasan Anda mungkin mengalami kesalahan ini saat membuat/memperbarui penyebaran online Kubernetes adalah karena Anda tidak dapat mengunduh gambar dari registri kontainer, yang mengakibatkan kegagalan penarikan gambar.

Dalam hal ini, Anda dapat memeriksa kebijakan jaringan kluster dan registri kontainer ruang kerja jika kluster dapat menarik gambar dari registri kontainer.

KESALAHAN: DeploymentCrashLoopBackOff

Alasan Anda mungkin mengalami kesalahan ini saat membuat/memperbarui penyebaran online Kubernetes adalah kontainer pengguna yang mengalami crash inisialisasi. Ada dua kemungkinan alasan untuk kesalahan ini:

  • Skrip score.py pengguna memiliki kesalahan sintaks atau kesalahan impor lalu menimbulkan pengecualian dalam menginisialisasi.
  • Atau pod penyebaran membutuhkan lebih banyak memori daripada batasnya.

Untuk mengurangi kesalahan ini, pertama-tama Anda dapat memeriksa log penyebaran untuk pengecualian apa pun dalam skrip pengguna. Jika kesalahan berlanjut, coba perluas batas memori jenis sumber daya/instans.

KESALAHAN: KubernetesCrashLoopBackOff

Daftar berikut adalah alasan Anda mungkin mengalami kesalahan ini saat membuat/memperbarui titik akhir/penyebaran online Kubernetes:

  • Satu atau beberapa pod terjebak dalam status CrashLoopBackoff, Anda dapat memeriksa apakah log penyebaran ada, dan memeriksa apakah ada pesan kesalahan dalam log.
  • Ada kesalahan di score.py dan kontainer mengalami crash saat memulai kode skor Anda, Anda dapat mengikuti ERROR: bagian ResourceNotReady .
  • Proses penilaian Anda membutuhkan lebih banyak memori bahwa batas konfigurasi penyebaran Anda tidak cukup, Anda dapat mencoba memperbarui penyebaran dengan batas memori yang lebih besar.

KESALAHAN: NamespaceNotFound

Alasan Anda mungkin mengalami kesalahan ini saat membuat/memperbarui titik akhir online Kubernetes adalah karena namespace komputasi Kubernetes yang digunakan tidak tersedia di kluster Anda.

Anda dapat memeriksa komputasi Kubernetes di portal ruang kerja dan memeriksa namespace di kluster Kubernetes. Jika namespace tidak tersedia, Anda dapat melepaskan komputasi warisan dan memasang kembali untuk membuat yang baru, menentukan namespace yang sudah ada di kluster Anda.

KESALAHAN: UserScriptInitFailed

Alasan Anda mungkin mengalami kesalahan ini saat membuat/memperbarui penyebaran online Kubernetes adalah karena fungsi init dalam file yang diunggah score.py memunculkan pengecualian.

Anda dapat memeriksa log penyebaran untuk melihat pesan pengecualian secara rinci dan memperbaiki pengecualian.

KESALAHAN: UserScriptImportError

Alasan Anda mungkin mengalami kesalahan ini saat membuat/memperbarui penyebaran online Kubernetes adalah karena file yang score.py Anda unggah telah mengimpor paket yang tidak tersedia.

Anda dapat memeriksa log penyebaran untuk melihat pesan pengecualian secara rinci dan memperbaiki pengecualian.

KESALAHAN: UserScriptFunctionNotFound

Alasan Anda mungkin mengalami kesalahan ini saat membuat/memperbarui penyebaran online Kubernetes adalah karena file yang score.py Anda unggah tidak memiliki fungsi bernama init() atau run(). Anda dapat memeriksa kode Anda dan menambahkan fungsi .

KESALAHAN: EndpointNotFound

Alasan Anda mungkin mengalami kesalahan ini saat membuat/memperbarui penyebaran online Kubernetes adalah karena sistem tidak dapat menemukan sumber daya titik akhir untuk penyebaran di kluster. Anda harus membuat penyebaran di titik akhir yang ada atau membuat titik akhir ini terlebih dahulu di kluster Anda.

KESALAHAN: EndpointAlreadyExists

Alasan Anda mungkin mengalami kesalahan ini saat membuat titik akhir online Kubernetes adalah karena titik akhir pembuatan sudah ada di kluster Anda.

Nama titik akhir harus unik per ruang kerja dan per kluster, jadi dalam hal ini, Anda harus membuat titik akhir dengan nama lain.

KESALAHAN: ScoringFeUnhealthy

Alasan Anda mungkin mengalami kesalahan ini saat membuat/memperbarui titik akhir/penyebaran online Kubernetes adalah karena Azureml-fe yang merupakan layanan sistem yang berjalan di kluster tidak ditemukan atau tidak sehat.

Untuk memecahkan masalah ini, Anda dapat menginstal ulang atau memperbarui ekstensi Azure Pembelajaran Mesin di kluster Anda.

KESALAHAN: ValidateScoringFailed

Alasan Anda mungkin mengalami kesalahan ini saat membuat/memperbarui penyebaran online Kubernetes adalah karena validasi URL permintaan penilaian gagal saat memproses penyebaran model.

Dalam hal ini, Anda dapat terlebih dahulu memeriksa URL titik akhir lalu mencoba menyebarkan ulang penyebaran.

KESALAHAN: InvalidDeploymentSpec

Alasan Anda mungkin mengalami kesalahan ini saat membuat/memperbarui penyebaran online Kubernetes adalah karena spesifikasi penyebaran tidak valid.

Dalam hal ini, Anda dapat memeriksa pesan kesalahan.

  • Pastikan valid instance count .
  • Jika Anda mengaktifkan penskalakan otomatis, pastikan minimum instance count dan maximum instance count keduanya valid.

KESALAHAN: PodUnschedulable

Daftar berikut adalah alasan Anda mungkin mengalami kesalahan ini saat membuat/memperbarui titik akhir/penyebaran online Kubernetes:

  • Tidak dapat menjadwalkan pod ke simpul, karena sumber daya yang tidak mencukup di kluster Anda.
  • Tidak ada simpul yang cocok dengan afinitas/pemilih simpul.

Untuk mengurangi kesalahan ini, Anda dapat mengikuti langkah-langkah berikut:

  • node selector Periksa definisi yang instance type Anda gunakan, dan node label konfigurasi node kluster Anda.
  • Periksa instance type dan ukuran SKU simpul untuk kluster AKS atau sumber daya node untuk kluster Arc-Kubernetes.
    • Jika kluster kurang sumber daya, Anda dapat mengurangi persyaratan sumber daya jenis instans atau menggunakan jenis instans lain dengan sumber daya yang lebih kecil yang diperlukan.
  • Jika kluster tidak memiliki lebih banyak sumber daya untuk memenuhi persyaratan penyebaran, hapus beberapa penyebaran untuk merilis sumber daya.

KESALAHAN: PodOutOfMemory

Alasan Anda mungkin mengalami kesalahan ini saat membuat/memperbarui penyebaran online adalah batas memori yang Anda berikan untuk penyebaran tidak cukup. Anda dapat mengatur batas memori ke nilai yang lebih besar atau menggunakan jenis instans yang lebih besar untuk mengurangi kesalahan ini.

KESALAHAN: InferensiClientCallFailed

Alasan Anda mungkin mengalami kesalahan ini saat membuat/memperbarui titik akhir/penyebaran online Kubernetes adalah karena ekstensi k8s kluster Kubernetes tidak dapat dihubungkan.

Dalam hal ini, Anda dapat melepaskan dan kemudian melampirkan kembali komputasi Anda.

Catatan

Untuk memecahkan masalah kesalahan dengan memasang kembali, harap jamin untuk memasang kembali dengan konfigurasi yang sama persis seperti komputasi yang dilepaskan sebelumnya, seperti nama komputasi dan namespace yang sama, jika tidak, Anda mungkin mengalami kesalahan lain.

Jika masih tidak berfungsi, Anda dapat meminta administrator yang dapat mengakses kluster untuk digunakan kubectl get po -n azureml untuk memeriksa apakah pod server relai berjalan.

Masalah penskalaan otomatis

Jika Anda mengalami masalah dengan penskalaan otomatis, lihat Memecahkan masalah penskalaan otomatis Azure.

Untuk titik akhir online Kubernetes, ada router inferensi Azure Pembelajaran Mesin yang merupakan komponen front-end untuk menangani penskalaan otomatis untuk semua penyebaran model pada kluster Kubernetes, Anda dapat menemukan informasi lebih lanjut dalam Penskalaan otomatis perutean inferensi Kubernetes

Kesalahan konsumsi model umum

Daftar berikut adalah kesalahan konsumsi model umum yang dihasilkan dari status operasi titik invoke akhir.

Masalah batas bandwidth

Titik akhir online terkelola memiliki batas bandwidth untuk setiap titik akhir. Anda menemukan konfigurasi batas dalam batas untuk titik akhir online. Jika penggunaan bandwidth Anda melebihi batas, permintaan Anda akan tertunda. Cara memantau penundaan bandwidth:

  • Gunakan metrik "Byte jaringan" untuk memahami penggunaan bandwidth saat ini. Untuk informasi lebih lanjut, lihat Memantau titik akhir online terkelola.
  • Ada dua trailer respons yang dikembalikan jika batas bandwidth diberlakukan:
    • ms-azureml-bandwidth-request-delay-ms: waktu penundaan (dalam milidetik) yang diperlukan untuk transfer aliran permintaan.
    • ms-azureml-bandwidth-response-delay-ms: waktu penundaan (dalam milidetik) yang diperlukan untuk transfer aliran respons.

Kode status HTTP

Ketika Anda mengakses titik akhir online dengan permintaan REST, kode status yang dikembalikan mematuhi standar untuk kode status HTTP. Ini adalah detail tentang bagaimana pemanggilan titik akhir dan kesalahan prediksi dipetakan ke kode status HTTP.

Kode kesalahan umum untuk titik akhir online terkelola

Tabel berikut berisi kode kesalahan umum saat menggunakan titik akhir online terkelola dengan permintaan REST:

Kode status Frasa alasan Mengapa kode ini mungkin dikembalikan
200 OK Model Anda berhasil dieksekusi, dalam latensi terikat Anda.
401 Tidak diizinkan Anda tidak memiliki izin untuk melakukan tindakan yang diminta, seperti skor, atau token Anda kedaluwarsa atau dalam format yang salah. Untuk informasi selengkapnya, lihat konsep autentikasi titik akhir dan cara mengautentikasi untuk titik akhir.
404 Tidak ditemukan Titik akhir tidak memiliki penyebaran yang valid dengan bobot positif.
408 Waktu permintaan habis Eksekusi model membutuhkan waktu lebih lama dari waktu habis yang disediakan di request_timeout_ms bawah request_settings konfigurasi penyebaran model Anda.
424 Kesalahan Model Jika kontainer model Anda mengembalikan respons non-200, Azure mengembalikan 424. Periksa dimensi Model Status Code di bagian metrik Requests Per Minute di Azure Monitor Metric Explorer titik akhir Anda. Atau periksa header respons ms-azureml-model-error-statuscode dan ms-azureml-model-error-reason untuk informasi selengkapnya. Jika 424 dilengkapi dengan pemeriksaan keaktifan atau kesiapan gagal, pertimbangkan untuk menyesuaikan pengaturan pemeriksaan untuk memungkinkan waktu yang lebih lama untuk memeriksa keaktifan atau kesiapan kontainer.
429 Terlalu banyak permintaan tertunda Model Anda saat ini mendapatkan lebih banyak permintaan daripada yang dapat ditangani. Azure Pembelajaran Mesin telah menerapkan sistem yang memungkinkan maksimum 2 * max_concurrent_requests_per_instance * instance_count requests untuk diproses secara paralel pada saat tertentu untuk menjamin kelancaran operasi. Permintaan lain yang melebihi maksimum ini ditolak. Anda dapat meninjau konfigurasi penyebaran model di bawah bagian request_settings dan scale_settings untuk memverifikasi dan menyesuaikan pengaturan ini. Selain itu, seperti yang diuraikan dalam definisi YAML untuk Permintaan Pengaturan, penting untuk memastikan bahwa variabel WORKER_COUNT lingkungan diteruskan dengan benar.

Jika Anda menggunakan autoscaling dan mendapatkan kesalahan ini, itu berarti model Anda mendapatkan permintaan lebih cepat daripada yang dapat ditingkatkan oleh sistem. Dalam situasi ini, pertimbangkan untuk mengirim ulang permintaan dengan backoff eksponensial untuk memberi sistem waktu yang perlu disesuaikan. Anda juga dapat meningkatkan jumlah instans dengan menggunakan kode untuk menghitung jumlah instans. Langkah-langkah ini, dikombinasikan dengan pengaturan penskalaan otomatis, membantu memastikan bahwa model Anda siap untuk menangani masuknya permintaan.
429 Laju terbatas Jumlah permintaan per detik mencapai batas titik akhir online terkelola.
500 Kesalahan server internal Infrastruktur yang disediakan Azure Pembelajaran Mesin gagal.

Kode kesalahan umum untuk titik akhir online kube

Tabel berikut berisi kode kesalahan umum saat menggunakan titik akhir online Kubernetes dengan permintaan REST:

Kode status Frasa alasan Mengapa kode ini mungkin dikembalikan
409 Kesalahan konflik Ketika operasi sudah berlangsung, setiap operasi baru pada titik akhir online yang sama merespons dengan kesalahan konflik 409. Misalnya, Jika operasi buat atau perbarui titik akhir online sedang berlangsung dan jika Anda memicu operasi Hapus baru, operasi tersebut akan menimbulkan kesalahan.
502 Telah melemparkan pengecualian atau crash dalam run() metode file score.py Ketika ada kesalahan dalam , misalnya paket yang diimpor score.pytidak ada di lingkungan conda, kesalahan sintaks, atau kegagalan dalam init() metode . Anda dapat mengikuti di sini untuk men-debug file.
503 Menerima lonjakan besar dalam permintaan per detik Autoscaler dirancang untuk menangani perubahan bebansecara bertahap. Jika Anda menerima lonjakan besar dalam permintaan per detik, klien mungkin menerima kode status HTTP 503. Meskipun penskala otomatis bereaksi dengan cepat, AKS membutuhkan waktu yang signifikan untuk membuat kontainer tambahan. Anda dapat mengikuti di sini untuk mencegah 503 kode status.
504 Permintaan telah kehabisan waktu Kode status 504 menunjukkan bahwa permintaan telah kehabisan waktu. Pengaturan batas waktu default adalah 5 detik. Anda dapat meningkatkan batas waktu atau mencoba mempercepat titik akhir dengan memodifikasi score.py untuk menghapus panggilan yang tidak perlu. Jika tindakan ini tidak memperbaiki masalah, Anda dapat mengikuti di sini untuk men-debug file score.py. Kode mungkin dalam keadaan tidak responsif atau perulangan tak terbatas.
500 Kesalahan server internal Infrastruktur yang disediakan Azure Pembelajaran Mesin gagal.

Cara mencegah kode status 503

Penyebaran online Kubernetes mendukung penskalaan otomatis, yang memungkinkan replika ditambahkan untuk mendukung beban tambahan, informasi lebih lanjut yang dapat Anda temukan di router inferensi Azure Pembelajaran Mesin. Keputusan untuk meningkatkan/menurunkan skala didasarkan pada pemanfaatan replika kontainer saat ini.

Ada dua hal yang dapat membantu mencegah 503 kode status:

Tip

Kedua pendekatan ini dapat digunakan secara individual atau dalam kombinasi.

  • Ubah tingkat pemanfaatan tempat autoscaling membuat replika baru. Anda dapat menyesuaikan target pemanfaatan dengan menetapkan autoscale_target_utilization ke nilai yang lebih rendah.

    Penting

    Perubahan ini tidak menyebabkan replika menjadi lebih cepat. Sebaliknya, mereka dibuat pada ambang pemanfaatan yang lebih rendah. Alih-alih menunggu sampai layanan ini digunakan 70%, mengubah nilai menjadi 30% menyebabkan replika dibuat ketika terjadi pemanfaatan sebanyak 30%.

    Jika titik akhir online Kubernetes sudah menggunakan replika maks saat ini dan Anda masih melihat 503 kode status, tingkatkan autoscale_max_replicas nilai untuk meningkatkan jumlah maksimum replika.

  • Mengubah jumlah minimum replika. Meningkatkan replika minimum menyediakan kumpulan yang lebih besar untuk menangani lonjakan yang masuk.

    Untuk meningkatkan jumlah instans, Anda dapat menghitung replika yang diperlukan mengikuti kode-kode ini.

    from math import ceil
    # target requests per second
    target_rps = 20
    # time to process the request (in seconds, choose appropriate percentile)
    request_process_time = 10
    # Maximum concurrent requests per instance
    max_concurrent_requests_per_instance = 1
    # The target CPU usage of the model container. 70% in this example
    target_utilization = .7
    
    concurrent_requests = target_rps * request_process_time / target_utilization
    
    # Number of instance count
    instance_count = ceil(concurrent_requests / max_concurrent_requests_per_instance)
    

    Catatan

    Jika Anda menerima lonjakan permintaan yang lebih besar dari yang dapat ditangani replika minimum baru, Anda mungkin menerima 503 lagi. Misalnya, saat lalu lintas ke titik akhir Anda meningkat, Anda mungkin perlu meningkatkan replika minimum.

Cara menghitung jumlah instans

Untuk meningkatkan jumlah instans, Anda dapat menghitung replika yang diperlukan dengan menggunakan kode berikut:

from math import ceil
# target requests per second
target_rps = 20
# time to process the request (in seconds, choose appropriate percentile)
request_process_time = 10
# Maximum concurrent requests per instance
max_concurrent_requests_per_instance = 1
# The target CPU usage of the model container. 70% in this example
target_utilization = .7

concurrent_requests = target_rps * request_process_time / target_utilization

# Number of instance count
instance_count = ceil(concurrent_requests / max_concurrent_requests_per_instance)

Diblokir oleh kebijakan CORS

Titik akhir online (v2) saat ini tidak mendukung Berbagi Sumber Daya Lintas Asal (CORS) secara asli. Jika aplikasi web Anda mencoba memanggil titik akhir tanpa penanganan permintaan preflight CORS yang tepat, Anda dapat melihat pesan kesalahan berikut:

Access to fetch at 'https://{your-endpoint-name}.{your-region}.inference.ml.azure.com/score' from origin http://{your-url} has been blocked by CORS policy: Response to preflight request doesn't pass access control check. No 'Access-control-allow-origin' header is present on the request resource. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with the CORS disabled.

Kami menyarankan agar Anda menggunakan Azure Functions, Azure Application Gateway, atau layanan apa pun sebagai lapisan sementara untuk menangani permintaan preflight CORS.

Masalah isolasi jaringan umum

Pembuatan titik akhir online gagal dengan V1LegacyMode == pesan benar

Ruang kerja Azure Machine Learning bisa dikonfigurasi untuk v1_legacy_mode, yang akan menonaktifkan API v2. Titik akhir online terkelola merupakan fitur platform API v2, dan tidak akan berfungsi jika v1_legacy_mode diaktifkan untuk ruang kerja.

Penting

Tanyakan pada tim keamanan jaringan Anda sebelum menonaktifkan v1_legacy_mode. Hal ini mungkin telah diaktifkan oleh tim keamanan jaringan Anda karena suatu alasan.

Untuk informasi tentang cara menonaktifkan v1_legacy_mode, harap lihat Isolasi jaringan dengan v2.

Pembuatan titik akhir online dengan autentikasi berbasis kunci gagal

Gunakan perintah berikut untuk membuat daftar aturan jaringan Azure Key Vault untuk ruang kerja Anda. Ganti <keyvault-name> dengan nama brankas kunci Anda:

az keyvault network-rule list -n <keyvault-name>

Respons untuk perintah ini mirip dengan dokumen JSON berikut:

{
    "bypass": "AzureServices",
    "defaultAction": "Deny",
    "ipRules": [],
    "virtualNetworkRules": []
}

Jika nilai bypass bukan AzureServices, gunakan panduan di Konfigurasikan setelan jaringan brankas kunci untuk mengaturnya ke AzureServices.

Penyebaran online gagal dengan kesalahan pengunduhan gambar

Catatan

Masalah ini berlaku saat Anda menggunakan metode isolasi jaringan lama untuk titik akhir online terkelola, di mana Azure Pembelajaran Mesin membuat jaringan virtual terkelola untuk setiap penyebaran di bawah titik akhir.

  1. Periksa apakah bendera egress-public-network-accessdinonaktifkan untuk penyebaran. Jika bendera ini diaktifkan, dan visibilitas registri penampung bersifat pribadi, maka kegagalan ini diharapkan.

  2. Gunakan perintah berikut untuk memeriksa status koneksi titik akhir privat. Ganti <registry-name> dengan nama Azure Container Registry untuk ruang kerja Anda:

    az acr private-endpoint-connection list -r <registry-name> --query "[?privateLinkServiceConnectionState.description=='Egress for Microsoft.MachineLearningServices/workspaces/onlineEndpoints'].{Name:name, status:privateLinkServiceConnectionState.status}"
    

    Pada dokumen respons, verifikasi bahwa status bidang diatur ke Approved. Jika tidak disetujui, gunakan perintah berikut untuk menyetujuinya. Ganti <private-endpoint-name> dengan nama yang dikembalikan dari perintah sebelumnya:

    az network private-endpoint-connection approve -n <private-endpoint-name>
    

Titik akhir skor tidak dapat diselesaikan

  1. Verifikasi bahwa klien yang mengeluarkan permintaan penilaian adalah jaringan virtual yang dapat mengakses ruang kerja Azure Machine Learning.

  2. Gunakan perintah nslookup pada nama host titik akhir untuk mengambil informasi alamat IP:

    nslookup endpointname.westcentralus.inference.ml.azure.com
    

    Respons berisi alamat. Alamat ini harus dalam rentang yang disediakan oleh jaringan virtual

    Catatan

    Untuk titik akhir online Kubernetes, nama host titik akhir harus menjadi CName (nama domain) yang telah ditentukan di kluster Kubernetes Anda. Jika ini adalah titik akhir HTTP, alamat IP akan terkandung dalam URI titik akhir yang bisa Anda dapatkan langsung di Antarmuka Pengguna Studio. Lebih banyak cara untuk mendapatkan alamat IP titik akhir dapat ditemukan di titik akhir online Kubernetes Aman.

  3. Jika nama host tidak diselesaikan oleh nslookup perintah:

    Untuk Titik akhir online terkelola,

    1. Periksa apakah catatan A ada di zona DNS privat untuk jaringan virtual.

      Untuk memeriksa catatan, gunakan perintah berikut:

      az network private-dns record-set list -z privatelink.api.azureml.ms -o tsv --query [].name
      

      Hasil harus berisi entri yang mirip dengan *.<GUID>.inference.<region>.

    2. Jika tidak ada nilai inferensi yang dikembalikan, hapus titik akhir privat untuk ruang kerja, lalu buat ulang. Untuk informasi selengkapnya, lihat Cara mengonfigurasi titik akhir privat.

    3. Jika ruang kerja dengan titik akhir privat disiapkan menggunakan DNS kustom Cara menggunakan ruang kerja Anda dengan server DNS kustom, gunakan perintah berikut untuk memverifikasi apakah resolusi berfungsi dengan benar dari DNS kustom.

      dig endpointname.westcentralus.inference.ml.azure.com
      

    Untuk titik akhir online Kubernetes,

    1. Periksa konfigurasi DNS di kluster Kubernetes.

    2. Selain itu, Anda dapat memeriksa apakah azureml-fe berfungsi seperti yang diharapkan, gunakan perintah berikut:

      kubectl exec -it deploy/azureml-fe -- /bin/bash
      (Run in azureml-fe pod)
      
      curl -vi -k https://localhost:<port>/api/v1/endpoint/<endpoint-name>/swagger.json
      "Swagger not found"
      

      Untuk HTTP, gunakan

      curl https://localhost:<port>/api/v1/endpoint/<endpoint-name>/swagger.json
      "Swagger not found"
      

    Jika HTTP curl gagal (misalnya batas waktu) tetapi HTTP berfungsi, periksa apakah sertifikat valid.

    Jika ini gagal diselesaikan ke rekaman A, verifikasi apakah resolusi berfungsi dari Azure DNS(168.63.129.16).

    dig @168.63.129.16 endpointname.westcentralus.inference.ml.azure.com
    

    Jika ini berhasil, Anda dapat memecahkan masalah penerus bersyarat untuk tautan privat di DNS kustom.

Penyebaran online tidak dapat dinilai

  1. Gunakan perintah berikut untuk melihat apakah penyebaran berhasil disebarkan:

    az ml online-deployment show -e <endpointname> -n <deploymentname> --query '{name:name,state:provisioning_state}' 
    

    Jika penyebaran berhasil diselesaikan, nilai state akan menjadi Succeeded.

  2. Jika penyebaran berhasil, gunakan perintah berikut untuk memeriksa lalu lintas yang ditetapkan untuk penyebaran. Ganti <endpointname> dengan nama titik akhir Anda:

    az ml online-endpoint show -n <endpointname>  --query traffic
    

    Tip

    Langkah ini tidak diperlukan jika Anda menggunakan header azureml-model-deployment dalam permintaan Anda untuk menargetkan penyebaran ini.

    Respons dari perintah ini harus mencantumkan persentase lalu lintas yang ditetapkan untuk penyebaran.

  3. Jika penetapan lalu lintas (atau header penyebaran) diatur dengan benar, gunakan perintah berikut untuk mendapatkan log untuk titik akhir. Ganti <endpointname> dengan nama titik akhir, dan <deploymentname> dengan penyebaran:

    az ml online-deployment get-logs  -e <endpointname> -n <deploymentname> 
    

    Lihat log untuk melihat apakah ada masalah saat menjalankan kode penilaian saat Anda mengirimkan permintaan ke penyebaran.

Memecahkan masalah server inferensi

Di bagian ini, kami menyediakan tips pemecahan masalah dasar untuk server HTTP inferensi Azure Pembelajaran Mesin.

Langkah-langkah dasar

Langkah-langkah dasar untuk pemecahan masalah adalah:

  1. Kumpulkan informasi versi untuk lingkungan Python Anda.
  2. Pastikan versi paket python azureml-inference-server-http yang ditentukan dalam file lingkungan cocok dengan versi server HTTP Inferensi AzureML yang ditampilkan di log startup. Terkadang pemecah masalah dependensi pip mengarah ke versi paket yang tidak terduga yang diinstal.
  3. Jika Anda menentukan Flask (dan atau dependensinya) di lingkungan Anda, hapus. Dependensi termasuk Flask, , Jinja2, itsdangerous, Werkzeug, MarkupSafe, dan click. Flask terdaftar sebagai dependensi dalam paket server dan yang terbaik adalah membiarkan server kami menginstalnya. Dengan cara ini ketika server mendukung versi flask baru, Anda akan mendapatkannya secara otomatis.

Versi server

Paket azureml-inference-server-http server diterbitkan ke PyPI. Anda dapat menemukan changelog kami dan semua versi sebelumnya di halaman PyPI kami. Perbarui ke versi terbaru jika Anda menggunakan versi yang lebih lama.

  • 0.4.x: Versi yang dibundel dalam gambar pelatihan ≤ 20220601 dan di azureml-defaults>=1.34,<=1.43. 0.4.13 adalah versi stabil terakhir. Jika Anda menggunakan server sebelum versi 0.4.11, Anda mungkin melihat masalah dependensi Flask seperti tidak dapat mengimpor nama Markup dari jinja2. Anda disarankan untuk meningkatkan ke 0.4.13 atau 0.8.x (versi terbaru), jika memungkinkan.
  • 0.6.x: Versi yang telah diinstal sebelumnya dalam menyimpulkan gambar ≤ 20220516. Versi stabil terbaru adalah 0.6.1.
  • 0.7.x: Versi pertama yang mendukung Flask 2. Versi stabil terbaru adalah 0.7.7.
  • 0.8.x: Format log telah berubah dan dukungan Python 3.6 telah turun.

Dependensi paket

Paket yang paling relevan untuk server azureml-inference-server-http adalah paket berikut:

  • Labu
  • opencensus-ext-azure
  • inferensi-skema

Jika Anda menentukan azureml-defaults di lingkungan Python, azureml-inference-server-http paket bergantung pada, dan akan diinstal secara otomatis.

Tip

Jika Anda menggunakan Python SDK v1 dan tidak secara eksplisit menentukan azureml-defaults di lingkungan Python Anda, SDK dapat menambahkan paket untuk Anda. Namun, SDK akan menguncinya ke versi yang diaktifkan SDK. Misalnya, jika versi SDK adalah 1.38.0, versi tersebut akan ditambahkan azureml-defaults==1.38.0 ke persyaratan pip lingkungan.

Tanya jawab umum

1.Saya mengalami kesalahan berikut selama startup server:


TypeError: register() takes 3 positional arguments but 4 were given

  File "/var/azureml-server/aml_blueprint.py", line 251, in register

    super(AMLBlueprint, self).register(app, options, first_registration)

TypeError: register() takes 3 positional arguments but 4 were given

Anda telah menginstal Flask 2 di lingkungan python tetapi menjalankan versi azureml-inference-server-http yang tidak mendukung Flask 2. Dukungan untuk Flask 2 ditambahkan di azureml-inference-server-http>=0.7.0, yang juga ada di azureml-defaults>=1.44.

  • Jika Anda tidak menggunakan paket ini dalam gambar docker AzureML, gunakan versi terbaru azureml-inference-server-http atau azureml-defaults.

  • Jika Anda menggunakan paket ini dengan gambar docker AzureML, pastikan Anda menggunakan gambar bawaan atau setelah Juli 2022. Versi gambar tersedia di log kontainer. Anda harus dapat menemukan log yang mirip dengan yang berikut ini:

    2022-08-22T17:05:02,147738763+00:00 | gunicorn/run | AzureML Container Runtime Information
    2022-08-22T17:05:02,161963207+00:00 | gunicorn/run | ###############################################
    2022-08-22T17:05:02,168970479+00:00 | gunicorn/run | 
    2022-08-22T17:05:02,174364834+00:00 | gunicorn/run | 
    2022-08-22T17:05:02,187280665+00:00 | gunicorn/run | AzureML image information: openmpi4.1.0-ubuntu20.04, Materializaton Build:20220708.v2
    2022-08-22T17:05:02,188930082+00:00 | gunicorn/run | 
    2022-08-22T17:05:02,190557998+00:00 | gunicorn/run | 
    

    Tanggal build gambar muncul setelah "Build Materialisasi", yang dalam contoh di atas adalah 20220708, atau 8 Juli 2022. Gambar ini kompatibel dengan Flask 2. Jika Anda tidak melihat banner seperti ini di log kontainer, gambar Anda sudah kedaluarsa, dan harus diperbarui. Jika Anda menggunakan gambar CUDA, dan tidak dapat menemukan gambar yang lebih baru, periksa apakah gambar Anda tidak digunakan lagi di AzureML-Containers. Jika ya, Anda harus dapat menemukan pengganti.

  • Jika Anda menggunakan server dengan titik akhir online, Anda juga dapat menemukan log di bawah "Log penyebaran" di halaman titik akhir online di studio Azure Pembelajaran Mesin. Jika Anda menyebarkan dengan SDK v1 dan tidak secara eksplisit menentukan gambar dalam konfigurasi penyebaran Anda, defaultnya akan menggunakan versi openmpi4.1.0-ubuntu20.04 yang cocok dengan perangkat SDK lokal Anda, yang mungkin bukan versi terbaru dari gambar tersebut. Misalnya, SDK 1,43 akan menggunakan openmpi4.1.0-ubuntu20.04:20220616 secara default, yang tidak kompatibel. Pastikan Anda menggunakan SDK terbaru untuk penyebaran Anda.

  • Jika karena alasan tertentu Anda tidak dapat memperbarui gambar, Anda dapat menghindari masalah untuk sementara dengan menyematkan azureml-defaults==1.43 atau azureml-inference-server-http~=0.4.13, yang akan menginstal server versi lama dengan Flask 1.0.x.

2. Saya menemukan ImportError atau ModuleNotFoundError pada modul opencensus, jinja2, MarkupSafe, atau click saat memulai seperti pesan berikut:

ImportError: cannot import name 'Markup' from 'jinja2'

Versi server yang lebih lama (<= 0.4.10) tidak menyematkan dependensi Flask ke versi yang kompatibel. Masalah ini diperbaiki di versi terbaru dari server.

Langkah berikutnya