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)
Artikel ini menjelaskan cara memecahkan masalah dan mengatasi masalah umum penyebaran dan penilaian titik akhir online Azure Pembelajaran Mesin.
Struktur dokumen mencerminkan cara Anda harus mendekati pemecahan masalah:
- Gunakan penyebaran lokal untuk menguji dan men-debug model Anda secara lokal sebelum menyebarkan di cloud.
- Gunakan log kontainer untuk membantu masalah debug.
- Pahami kesalahan penyebaran umum yang mungkin timbul dan cara memperbaikinya.
Bagian Kode status HTTP menjelaskan bagaimana kesalahan pemanggilan dan prediksi dipetakan ke kode status HTTP saat Anda menilai titik akhir dengan permintaan REST.
Prasyarat
- Langganan Azure aktif dengan versi gratis atau berbayar Azure Pembelajaran Mesin. Dapatkan langganan Azure uji coba gratis.
- Ruang kerja Azure Machine Learning.
- Azure CLI dan Azure Pembelajaran Mesin CLI v2. Instal, siapkan, dan gunakan CLI (v2).
Pelacakan permintaan
Ada dua header pelacakan yang didukung:
x-request-id
disediakan untuk pelacakan server. Azure Pembelajaran Mesin mengambil alih header ini untuk memastikannya adalah GUID yang valid. Saat Anda membuat tiket dukungan untuk permintaan yang gagal, lampirkan ID permintaan yang gagal untuk mempercepat penyelidikan. Atau, berikan nama wilayah dan nama titik akhir.x-ms-client-request-id
tersedia untuk skenario pelacakan klien. Header ini hanya menerima karakter alfanumerik, tanda hubung, dan garis bawah, dan dipotong hingga maksimum 40 karakter.
Sebarkan secara lokal
Penyebaran lokal berarti menyebarkan model ke lingkungan Docker lokal. Penyebaran lokal mendukung pembuatan, pembaruan, dan penghapusan titik akhir lokal, dan memungkinkan Anda untuk memanggil dan mendapatkan log dari titik akhir. 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.
Anda dapat menyebarkan secara lokal dengan Azure CLI atau Python SDK. Azure Pembelajaran Mesin studio tidak mendukung penyebaran lokal atau titik akhir lokal.
Untuk menggunakan penyebaran lokal, tambahkan --local
ke perintah yang sesuai.
az ml online-deployment create --endpoint-name <endpoint-name> -n <deployment-name> -f <spec_file.yaml> --local
Langkah-langkah berikut terjadi selama penyebaran lokal:
- Docker akan membuat gambar kontainer baru atau menarik gambar yang ada dari cache Docker lokal. Docker menggunakan gambar yang ada jika 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 dan men-debug secara lokal dengan menggunakan titik akhir lokal.
Tip
Anda dapat menggunakan Visual Studio Code untuk menguji dan men-debug titik akhir Anda secara lokal. Untuk informasi selengkapnya, lihat Men-debug titik akhir online secara lokal di Visual Studio Code.
Mendapatkan log kontainer
Anda tidak bisa mendapatkan akses langsung ke komputer virtual (VM) tempat model disebarkan, tetapi 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 akan mendapatkan pesan untuk mencoba lagi nanti.
Anda bisa mendapatkan log dari jenis kontainer berikut:
- Log konsol server inferensi berisi output fungsi cetak dan pengelogan dari skrip penilaian Anda score.py kode.
- Log penginisialisasi penyimpanan berisi informasi tentang apakah data kode dan model berhasil diunduh ke kontainer. Kontainer berjalan sebelum kontainer server inferensi mulai berjalan.
Untuk titik akhir online Kubernetes, administrator dapat langsung mengakses kluster tempat Anda menyebarkan model dan memeriksa log di Kubernetes. Contoh:
kubectl -n <compute-namespace> logs <container-name>
Catatan
Jika Anda menggunakan pengelogan Python, pastikan untuk menggunakan tingkat pengelogan yang benar, seperti INFO
, agar pesan diterbitkan ke log.
Lihat output log dari kontainer
Untuk melihat output log dari kontainer, gunakan perintah berikut:
az ml online-deployment get-logs -e <endpoint-name> -n <deployment-name> -l 100
Atau
az ml online-deployment get-logs --endpoint-name <endpoint-name> --name <deployment-name> --lines 100
Secara default, log ditarik dari server inferensi. Anda bisa mendapatkan log dari kontainer penginisialisasi penyimpanan dengan meneruskan –-container storage-initializer
.
Tambahkan --resource-group
dan --workspace-name
ke perintah jika Anda belum mengatur parameter ini melalui az configure
. Untuk melihat informasi tentang cara mengatur parameter ini, atau jika saat ini Anda telah menetapkan nilai, jalankan perintah berikut:
az ml online-deployment get-logs -h
Untuk melihat informasi selengkapnya, tambahkan --help
atau --debug
ke perintah.
Kesalahan penyebaran umum
Status operasi penyebaran dapat melaporkan kesalahan penyebaran umum berikut:
-
Umum untuk titik akhir online terkelola dan titik akhir online Kubernetes:
- Langganan tidak ada
- Tugas startup gagal karena kesalahan otorisasi
- Tugas startup gagal karena penetapan peran yang salah pada sumber daya
- Spesifikasi fungsi templat tidak valid
- Tidak dapat mengunduh citra kontainer pengguna
- Tidak dapat mengunduh model pengguna
Terbatas pada titik akhir online Kubernetes:
Jika Anda membuat atau memperbarui penyebaran online Kube, lihat juga 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, misalnya "the build log under the storage account '[storage-account-name]' in the container '[container-name]' at the path '[path-to-the-log]'"
.
Bagian berikut menjelaskan skenario kegagalan build gambar umum:
- Kegagalan otorisasi Azure Container Registry
- Komputasi build gambar tidak diatur di ruang kerja privat dengan jaringan virtual
- Waktu build gambar habis
- Kegagalan umum atau tidak diketahui
Kegagalan otorisasi Azure Container Registry
Pesan kesalahan menyebutkan kapan 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 dengan az ml workspace sync-keys, yang mungkin mengatasi kegagalan otorisasi.
Registri kontainer yang berada di belakang jaringan virtual mungkin juga mengalami kesalahan ini jika salah disiapkan. Verifikasi bahwa jaringan virtual disiapkan dengan benar.
Komputasi build gambar tidak diatur di ruang kerja privat dengan jaringan virtual
Jika pesan kesalahan menyebutkan , dan Anda menggunakan jaringan virtual, dan registri "failed to communicate with the workspace's container registry"
kontainer ruang kerja bersifat privat dan dikonfigurasi dengan titik akhir privat, Anda perlu mengizinkan Container Registry untuk membangun gambar di jaringan virtual.
Waktu build gambar habis
Batas waktu build gambar sering disebabkan oleh gambar yang terlalu besar untuk dapat menyelesaikan pembangunan dalam jangka waktu pembuatan penyebaran. Periksa log build gambar Anda di lokasi yang ditentukan kesalahan. Log dipotong pada saat build gambar kehabisan waktu.
Untuk mengatasi masalah ini, buat gambar Anda secara terpisah sehingga gambar hanya perlu ditarik selama pembuatan penyebaran. Tinjau juga pengaturan pemeriksaan default jika Anda memiliki batas waktu ImageBuild.
Kegagalan build gambar generik
Periksa 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...
, dependensi mungkin menyebabkan kesalahan. Menyematkan dependensi versi dalam file conda Anda dapat memperbaiki masalah ini.
Coba sebarkan secara lokal untuk menguji dan men-debug model Anda sebelum menyebarkan ke cloud.
KESALAHAN: OutOfQuota
Sumber daya berikut mungkin kehabisan kuota saat menggunakan layanan Azure:
Hanya untuk titik akhir online Kubernetes, sumber daya Kubernetes mungkin juga kehabisan kuota.
Kuota CPU
Anda harus memiliki kuota komputasi yang cukup untuk menyebarkan model. Kuota CPU 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.
Anda dapat memeriksa apakah ada penyebaran yang tidak digunakan yang dapat Anda hapus, atau Anda dapat mengirimkan permintaan untuk penambahan kuota.
Kuota kluster
Kesalahan OutOfQuota
terjadi ketika Anda tidak memiliki cukup kuota kluster komputasi Azure Pembelajaran Mesin. Kuota menentukan jumlah total kluster per langganan yang dapat Anda gunakan secara bersamaan untuk menyebarkan simpul CPU atau GPU di cloud Azure.
Kuota disk
Kesalahan OutOfQuota
terjadi ketika ukuran model lebih besar dari ruang disk yang tersedia dan model tidak dapat diunduh. Coba gunakan SKU dengan lebih banyak ruang disk atau kurangi ukuran gambar dan model.
Kuota memori
Kesalahan OutOfQuota
terjadi ketika jejak 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 Anda mencapai batas penetapan peran, coba hapus beberapa penetapan peran yang tidak digunakan dalam langganan ini. Anda dapat memeriksa semua penetapan peran dengan memilih Kontrol akses untuk langganan Azure Anda di portal Azure.
Kuota titik akhir
Coba hapus beberapa titik akhir yang tidak digunakan dalam langganan ini. Jika semua titik akhir Anda aktif digunakan, coba minta 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
Kesalahan OutOfQuota
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 ketidakcukupan sumber daya dalam kluster, misalnya OutOfQuota: Kubernetes unschedulable. Details:0/1 nodes are available: 1 Too many pods...
. Pesan ini berarti bahwa ada terlalu banyak pod dalam kluster dan tidak cukup sumber daya untuk menyebarkan model baru berdasarkan permintaan Anda.
Coba mitigasi berikut untuk mengatasi masalah ini:
Operator IT yang memelihara kluster Kubernetes dapat mencoba menambahkan lebih banyak simpul atau menghapus beberapa pod yang tidak digunakan dalam kluster untuk merilis beberapa sumber daya.
Teknisi pembelajaran mesin yang menyebarkan model dapat mencoba mengurangi permintaan sumber daya penyebaran.
- Jika Anda langsung menentukan permintaan sumber daya dalam konfigurasi penyebaran melalui bagian sumber daya, coba kurangi permintaan sumber daya.
- Jika Anda menggunakan
instance_type
untuk menentukan sumber daya untuk penyebaran model, hubungi operator TI untuk menyesuaikan konfigurasi sumber daya jenis instans. Untuk informasi selengkapnya, lihat Membuat dan mengelola jenis instans.
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 file score.py yang Anda berikan sebagai bagian dari penyebaran, Azure membuat kontainer yang menyertakan semua sumber daya yang score.py butuhkan. Azure Pembelajaran Mesin kemudian menjalankan skrip penilaian pada kontainer tersebut. Jika kontainer Anda tidak dapat dimulai, penilaian tidak dapat terjadi. Kontainer mungkin meminta lebih banyak sumber daya daripada yang instance_type
dapat didukung. Pertimbangkan untuk memperbarui instance_type
penyebaran online.
Untuk mendapatkan alasan yang tepat untuk kesalahan tersebut, lakukan tindakan berikut.
Jalankan perintah berikut:
az ml online-deployment get-logs -e <endpoint-name> -n <deployment-name> -l 100
KESALAHAN: BadArgument
Anda mungkin mendapatkan kesalahan ini saat menggunakan titik akhir online terkelola atau titik akhir online Kubernetes, karena alasan berikut:
- Langganan tidak ada
- Tugas startup gagal karena kesalahan otorisasi
- Tugas startup gagal karena penetapan peran yang salah pada sumber daya
- Spesifikasi fungsi templat tidak valid
- Tidak dapat mengunduh citra kontainer pengguna
- Tidak dapat mengunduh model pengguna
- Format model MLflow dengan jaringan privat tidak didukung
Anda mungkin juga mendapatkan kesalahan ini saat menggunakan titik akhir online Kubernetes saja, karena alasan berikut:
- Permintaan sumber daya lebih besar dibandingkan batas
- Azureml-fe untuk titik akhir online kubernetes belum siap
Langganan tidak ada
Langganan Azure yang dirujuk harus sudah ada dan aktif. Kesalahan ini terjadi ketika Azure tidak dapat menemukan ID langganan yang Anda masukkan. Kesalahan mungkin disebabkan oleh kesalahan ketik dalam ID langganan. Periksa kembali apakah ID langganan dimasukkan dengan benar dan saat ini aktif.
Otorisasi gagal
Setelah Anda memprovisikan sumber daya komputasi saat membuat penyebaran, Azure menarik gambar kontainer pengguna dari registri kontainer ruang kerja dan memasang model pengguna dan artefak kode ke dalam kontainer pengguna dari akun penyimpanan ruang kerja. Azure menggunakan identitas terkelola untuk mengakses akun penyimpanan dan registri kontainer.
Jika Anda membuat titik akhir terkait dengan identitas yang ditetapkan pengguna, identitas terkelola pengguna harus memiliki izin pembaca data blob Penyimpanan di akun penyimpanan ruang kerja dan izin AcrPull pada registri kontainer ruang kerja. Pastikan identitas yang ditetapkan pengguna Anda memiliki izin yang tepat.
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. Untuk informasi selengkapnya, lihat Kesalahan otorisasi registri kontainer.
Spesifikasi fungsi templat tidak valid
Kesalahan ini terjadi ketika fungsi templat salah ditentukan. Perbaiki kebijakan atau hapus penetapan kebijakan untuk membuka blokir. Pesan kesalahan mungkin menyertakan nama penetapan kebijakan dan definisi kebijakan untuk membantu Anda men-debug kesalahan ini. Lihat Struktur definisi kebijakan Azure untuk tips menghindari kegagalan templat.
Tidak dapat mengunduh citra kontainer pengguna
Kontainer pengguna mungkin tidak ditemukan. Periksa log kontainer untuk mendapatkan detail selengkapnya.
Pastikan gambar kontainer tersedia di registri kontainer ruang kerja. Misalnya, jika gambar adalah testacr.azurecr.io/azureml/azureml_92a029f831ce58d2ed011c3c42d35acb:latest
, Anda dapat menggunakan perintah berikut untuk memeriksa repositori:
az acr repository show-tags -n testacr --repository azureml/azureml_92a029f831ce58d2ed011c3c42d35acb --orderby time_desc --output table`
Tidak dapat mengunduh model pengguna
Model pengguna mungkin tidak ditemukan. Periksa log kontainer untuk mendapatkan detail selengkapnya. Pastikan Anda mendaftarkan model ke ruang kerja yang sama dengan penyebaran.
Untuk memperlihatkan detail model di ruang kerja, lakukan tindakan berikut. Anda harus menentukan versi atau label untuk mendapatkan informasi model.
Jalankan perintah berikut:
az ml model show --name <model-name> --version <version>
Periksa juga apakah blob ada di akun penyimpanan ruang kerja. Misalnya, jika blob adalah https://foobar.blob.core.windows.net/210212154504-1517266419/WebUpload/210212154504-1517266419/GaussianNB.pkl
, Anda dapat menggunakan perintah berikut untuk memeriksa apakah blob ada:
az storage blob exists --account-name <storage-account-name> --container-name <container-name> --name WebUpload/210212154504-1517266419/GaussianNB.pkl --subscription <sub-name>
Jika blob ada, Anda dapat menggunakan perintah berikut 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
Anda tidak dapat menggunakan fitur jaringan privat dengan format model MLflow jika Anda menggunakan metode isolasi jaringan lama untuk titik akhir online terkelola. Jika Anda perlu menyebarkan model MLflow dengan pendekatan penyebaran tanpa kode, coba gunakan jaringan virtual yang dikelola ruang kerja.
Permintaan sumber daya lebih besar dibandingkan batas
Permintaan sumber daya harus kurang dari atau sama dengan batas. Jika Anda tidak menetapkan batas, Azure Pembelajaran Mesin menetapkan nilai default saat Anda melampirkan komputasi ke ruang kerja. Anda dapat memeriksa batas dalam portal Azure atau dengan menggunakan az ml compute show
perintah .
Azureml-fe belum siap
Komponen front-end azureml-fe
yang merutekan permintaan inferensi masuk ke penginstalan layanan yang disebarkan selama penginstalan ekstensi k8s dan secara otomatis menskalakan sesuai kebutuhan. Komponen ini harus memiliki setidaknya satu replika sehat pada kluster.
Anda mendapatkan kesalahan ini jika komponen tidak tersedia saat anda memicu titik akhir online Kubernetes atau permintaan pembuatan atau 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 file score.py yang Anda berikan sebagai bagian dari penyebaran, Azure membuat kontainer yang menyertakan semua sumber daya yang score.py butuhkan, dan menjalankan skrip penilaian pada kontainer tersebut. Kesalahan dalam skenario ini adalah bahwa kontainer ini mengalami crash saat berjalan, sehingga penilaian tidak dapat terjadi. Kesalahan ini dapat terjadi di bawah salah satu kondisi berikut:
Ada kesalahan dalam score.py. Gunakan
get-logs
untuk mendiagnosis masalah umum, seperti:- Paket yang score.py mencoba mengimpor yang tidak disertakan dalam lingkungan conda
- Kesalahan sintaksis
- Kegagalan dalam metode
init()
Jika
get-logs
tidak menghasilkan log apa pun, biasanya berarti bahwa kontainer gagal dimulai. Untuk men-debug masalah ini, coba sebarkan secara lokal.Pemeriksaan kesiapan atau keaktifan tidak diatur dengan benar.
Inisialisasi kontainer membutuhkan waktu terlalu lama, sehingga kesiapan atau pemeriksaan keaktifan gagal di luar ambang kegagalan. Dalam hal ini, sesuaikan pengaturan pemeriksaan untuk memungkinkan waktu yang lebih lama untuk menginisialisasi kontainer. Atau coba SKU VM yang didukung lebih besar, yang mempercepat inisialisasi.
Ada kesalahan dalam penyiapan lingkungan kontainer, seperti dependensi yang hilang.
Jika Anda mendapatkan
TypeError: register() takes 3 positional arguments but 4 were given
kesalahan, periksa dependensi antara flask v2 danazureml-inference-server-http
. Untuk informasi selengkapnya, lihat Memecahkan masalah server HTTP.
KESALAHAN: ResourceNotFound
Anda mungkin mendapatkan kesalahan ini saat menggunakan titik akhir online terkelola atau titik akhir online Kubernetes, karena alasan berikut:
- Azure Resource Manager tidak dapat menemukan sumber daya yang diperlukan
- Registri kontainer bersifat privat atau tidak dapat diakses
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 tidak dapat ditemukan di jalur yang ditentukan. Periksa kembali jalur atau spesifikasi nama untuk akurasi dan ejaan. Untuk informasi selengkapnya, lihat Mengatasi kesalahan untuk Sumber Daya Tidak Ditemukan.
Kesalahan otorisasi registri kontainer
Kesalahan ini terjadi ketika gambar milik registri kontainer privat atau tidak dapat diakses disediakan untuk penyebaran. API Azure Pembelajaran Mesin tidak dapat menerima kredensial registri privat.
Untuk mengurangi kesalahan ini, pastikan bahwa registri kontainer tidak bersifat privat, atau lakukan langkah-langkah berikut:
- Berikan peran acrPull registri privat Anda ke identitas sistem titik akhir online Anda.
- Dalam definisi lingkungan Anda, tentukan alamat gambar privat Anda dan berikan instruksi untuk tidak memodifikasi atau membangun gambar.
Jika mitigasi ini 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 selengkapnya, lihat Cara menggunakan diagnostik ruang kerja.
KESALAHAN: WorkspaceManagedNetworkNotReady
Kesalahan ini terjadi jika Anda mencoba membuat penyebaran online yang memungkinkan jaringan virtual terkelola ruang kerja, tetapi jaringan virtual terkelola belum disediakan. Provisikan jaringan virtual terkelola ruang kerja sebelum Anda membuat penyebaran online.
Untuk memprovisikan jaringan virtual yang dikelola ruang kerja secara manual, ikuti instruksi di Menyediakan VNet terkelola secara manual. Anda kemudian dapat mulai membuat penyebaran online. Untuk informasi selengkapnya, lihat Isolasi jaringan dengan titik akhir online terkelola dan Mengamankan titik akhir online terkelola Anda dengan isolasi jaringan.
KESALAHAN: OperationCanceled
Anda mungkin mendapatkan kesalahan ini saat menggunakan titik akhir online terkelola atau titik akhir online Kubernetes, karena alasan berikut:
- Operasi dibatalkan oleh operasi lain yang memiliki prioritas lebih tinggi
- Operasi dibatalkan karena operasi sebelumnya menunggu konfirmasi penguncian
Operasi dibatalkan oleh operasi berprioritas yang lebih tinggi lainnya
Operasi Azure memiliki tingkat prioritas tertentu dan dijalankan dari tertinggi hingga terendah. Kesalahan ini terjadi ketika operasi lain yang memiliki prioritas lebih tinggi mengambil alih operasi Anda. Mencoba kembali operasi mungkin memungkinkannya untuk melakukan tanpa pembatalan.
Operasi dibatalkan menunggu konfirmasi penguncian
Operasi Azure memiliki periode tunggu singkat setelah dikirimkan, di mana mereka mengambil kunci untuk memastikan bahwa mereka tidak mengalami kondisi balapan. Kesalahan ini terjadi ketika operasi yang Anda kirimkan sama dengan operasi lain. Operasi lain saat ini menunggu konfirmasi bahwa ia menerima kunci sebelum dilanjutkan.
Anda mungkin telah mengirimkan permintaan serupa terlalu cepat setelah permintaan awal. Mencoba kembali operasi setelah menunggu hingga satu menit mungkin memungkinkannya untuk melakukan 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 atau brankas kunci. Kesalahan ini terjadi karena salah satu alasan berikut:
Identitas titik akhir tidak memiliki izin Azure RBAC untuk membaca rahasia dari koneksi ruang kerja atau brankas kunci, meskipun definisi penyebaran menentukan rahasia sebagai referensi yang dipetakan ke variabel lingkungan. Penetapan peran mungkin memerlukan waktu agar perubahan diterapkan.
Format referensi rahasia tidak valid, atau rahasia yang ditentukan tidak ada di koneksi ruang kerja 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
Kesalahan ini berarti ada yang salah dengan layanan Azure Pembelajaran Mesin yang perlu diperbaiki. Kirimkan tiket dukungan pelanggan dengan semua informasi yang diperlukan untuk mengatasi masalah tersebut.
Kesalahan umum khusus untuk penyebaran Kubernetes
Kesalahan identitas dan autentikasi:
- ACRSecretError
- TokenRefreshFailed
- GetAADTokenFailed
- ACRAuthenticationChallengeFailed
- ACRTokenExchangeFailed
- KubernetesUnaccessible
Kesalahan crashloopbackoff:
Kesalahan skrip penilaian:
Kesalahan Lainnya:
- NamespaceNotFound
- EndpointAlreadyExists
- ScoringFeUnhealthy
- ValidateScoringFailed
- InvalidDeploymentSpec
- PodUnschedulable
- PodOutOfMemory
- InferencingClientCallFailed
KESALAHAN: ACRSecretError
Saat membuat atau memperbarui penyebaran online Kubernetes, Anda mungkin mendapatkan kesalahan ini karena salah satu alasan berikut:
Penetapan peran tidak selesai. Tunggu beberapa saat dan coba lagi.
Kluster Kubernetes dengan dukungan Azure Arc atau ekstensi AKS Azure Pembelajaran Mesin tidak diinstal atau dikonfigurasi dengan benar. Periksa konfigurasi dan status ekstensi Kubernetes atau Azure Pembelajaran Mesin dengan dukungan Azure Arc.
Kluster Kubernetes memiliki konfigurasi jaringan yang tidak tepat. Periksa proksi, kebijakan jaringan, atau sertifikat.
Kluster AKS privat Anda tidak memiliki titik akhir yang tepat. Pastikan untuk menyiapkan titik akhir privat untuk Container Registry, akun penyimpanan, dan ruang kerja di jaringan virtual AKS.
Versi ekstensi Azure Pembelajaran Mesin Anda adalah v1.1.25 atau lebih rendah. Pastikan versi ekstensi Anda lebih besar dari v1.1.25.
KESALAHAN: TokenRefreshFailed
Kesalahan ini terjadi karena identitas kluster Kubernetes tidak diatur dengan benar, sehingga ekstensi tidak bisa mendapatkan kredensial utama dari Azure. Instal ulang ekstensi Azure Pembelajaran Mesin dan coba lagi.
KESALAHAN: GetAADTokenFailed
Kesalahan ini terjadi karena permintaan kluster Kubernetes token ID Microsoft Entra gagal atau kehabisan waktu. Periksa akses jaringan Anda lalu coba lagi.
Ikuti petunjuk di Menggunakan komputasi Kubernetes untuk memeriksa proksi keluar dan memastikan kluster dapat terhubung ke ruang kerja. Anda dapat menemukan URL titik akhir ruang kerja di Definisi Sumber Daya Kustom (CRD) titik akhir online di kluster.
Periksa apakah ruang kerja mengizinkan akses publik. Terlepas dari apakah kluster AKS itu sendiri bersifat publik atau privat, jika ruang kerja privat menonaktifkan akses jaringan publik, kluster Kubernetes hanya dapat berkomunikasi dengan ruang kerja tersebut melalui tautan privat. Untuk informasi selengkapnya, lihat Apa itu lingkungan inferensi AKS yang aman.
KESALAHAN: ACRAuthenticationChallengeFailed
Kesalahan ini terjadi karena kluster Kubernetes tidak dapat menjangkau layanan Container Registry ruang kerja untuk melakukan tantangan autentikasi. Periksa jaringan Anda, terutama akses jaringan publik Container Registry, lalu coba lagi. Anda dapat mengikuti langkah-langkah pemecahan masalah di GetAADTokenFailed untuk memeriksa jaringan.
KESALAHAN: ACRTokenExchangeFailed
Kesalahan ini terjadi karena token ID Microsoft Entra belum diotorisasi, sehingga token Container Registry pertukaran kluster Kubernetes gagal. Penetapan peran membutuhkan waktu, jadi tunggu sebentar lalu coba lagi.
Kegagalan ini mungkin juga disebabkan oleh terlalu banyak permintaan bersamaan ke layanan Container Registry. Kesalahan ini harus sementara, dan 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 memutar sertifikat AKS untuk kluster. Sertifikat baru harus diperbarui setelah 5 jam, sehingga Anda dapat menunggu selama 5 jam dan menyebarkannya kembali. Untuk informasi selengkapnya, lihat Rotasi sertifikat di Azure Kubernetes Service (AKS).
KESALAHAN: ImagePullLoopBackOff
Anda mungkin mendapatkan kesalahan ini saat membuat atau memperbarui penyebaran online Kubernetes karena Anda tidak dapat mengunduh gambar dari registri kontainer, yang mengakibatkan kegagalan penarikan gambar. Periksa kebijakan jaringan kluster dan registri kontainer ruang kerja untuk melihat apakah kluster dapat menarik gambar dari registri kontainer.
KESALAHAN: DeploymentCrashLoopBackOff
Anda mungkin mendapatkan kesalahan ini saat membuat atau memperbarui penyebaran online Kubernetes karena kontainer pengguna mengalami crash saat menginisialisasi. Ada dua kemungkinan alasan untuk kesalahan ini:
- Skrip pengguna score.py memiliki kesalahan sintaksis atau kesalahan impor yang menimbulkan pengecualian dalam menginisialisasi.
- Pod penyebaran membutuhkan lebih banyak memori daripada batasnya.
Untuk mengurangi kesalahan ini, pertama-tama periksa log penyebaran untuk pengecualian apa pun dalam skrip pengguna. Jika kesalahan berlanjut, coba perpanjang batas memori jenis sumber daya/instans.
KESALAHAN: KubernetesCrashLoopBackOff
Anda mungkin mendapatkan kesalahan ini saat membuat atau memperbarui titik akhir atau penyebaran online Kubernetes karena salah satu alasan berikut:
- Satu atau beberapa pod terjebak dalam status CrashLoopBackoff. Periksa apakah log penyebaran ada dan ada pesan kesalahan dalam log.
- Ada kesalahan dalam score.py dan kontainer mengalami crash saat menginisialisasi kode skor Anda. Ikuti instruksi di bawah KESALAHAN: ResourceNotReady.
- Proses penilaian Anda membutuhkan lebih banyak memori daripada batas konfigurasi penyebaran Anda. Anda dapat mencoba memperbarui penyebaran dengan batas memori yang lebih besar.
KESALAHAN: NamespaceNotFound
Anda mungkin mendapatkan kesalahan ini saat membuat atau memperbarui titik akhir online Kubernetes karena namespace komputasi Kubernetes yang digunakan tidak tersedia di kluster Anda. Periksa komputasi Kubernetes di portal ruang kerja anda dan periksa namespace di kluster Kubernetes. Jika namespace tidak tersedia, lepaskan komputasi warisan dan pasang ulang untuk membuat yang baru, menentukan namespace yang sudah ada di kluster Anda.
KESALAHAN: UserScriptInitFailed
Anda mungkin mendapatkan kesalahan ini saat membuat atau memperbarui penyebaran online Kubernetes karena init
fungsi dalam file score.py yang diunggah menimbulkan pengecualian. Periksa log penyebaran untuk melihat pesan pengecualian secara rinci, dan perbaiki pengecualian.
KESALAHAN: UserScriptImportError
Anda mungkin mendapatkan kesalahan ini saat membuat atau memperbarui penyebaran online Kubernetes karena file score.py yang Anda unggah mengimpor paket yang tidak tersedia. Periksa log penyebaran untuk melihat pesan pengecualian secara rinci, dan perbaiki pengecualian.
KESALAHAN: UserScriptFunctionNotFound
Anda mungkin mendapatkan kesalahan ini saat membuat atau memperbarui penyebaran online Kubernetes karena file score.py yang Anda unggah tidak memiliki fungsi bernama init()
atau run()
. Periksa kode Anda dan tambahkan fungsi .
KESALAHAN: EndpointNotFound
Anda mungkin mendapatkan kesalahan ini saat membuat atau memperbarui penyebaran online Kubernetes karena sistem tidak dapat menemukan sumber daya titik akhir untuk penyebaran di kluster. Buat penyebaran di titik akhir yang ada atau buat titik akhir terlebih dahulu di kluster Anda.
KESALAHAN: EndpointAlreadyExists
Anda mungkin mendapatkan kesalahan ini saat membuat titik akhir online Kubernetes karena titik akhir sudah ada di kluster Anda. Nama titik akhir harus unik per ruang kerja dan per kluster, jadi buat titik akhir dengan nama lain.
KESALAHAN: ScoringFeUnhealthy
Anda mungkin mendapatkan kesalahan ini saat membuat atau memperbarui titik akhir atau penyebaran online Kubernetes karena layanan sistem azureml-fe yang berjalan di kluster tidak ditemukan atau tidak sehat. Untuk mengurangi masalah ini, instal ulang atau perbarui ekstensi Azure Pembelajaran Mesin di kluster Anda.
KESALAHAN: ValidateScoringFailed
Anda mungkin mendapatkan kesalahan ini saat membuat atau memperbarui penyebaran online Kubernetes karena validasi URL permintaan penilaian gagal saat memproses model. Periksa URL titik akhir lalu coba sebarkan ulang.
KESALAHAN: InvalidDeploymentSpec
Anda mungkin mendapatkan kesalahan ini saat membuat atau memperbarui penyebaran online Kubernetes karena spesifikasi penyebaran tidak valid. Periksa pesan kesalahan untuk memastikan instance count
pesan tersebut valid. Jika Anda mengaktifkan autoscaling, pastikan minimum instance count
dan maximum instance count
keduanya valid.
KESALAHAN: PodUnschedulable
Anda mungkin mendapatkan kesalahan ini saat membuat atau memperbarui titik akhir atau penyebaran online Kubernetes karena salah satu alasan berikut:
- Sistem tidak dapat menjadwalkan pod ke simpul karena sumber daya yang tidak memadai di kluster Anda.
- Tidak ada simpul yang cocok dengan pemilih afinitas node.
Untuk mengurangi kesalahan ini, ikuti langkah-langkah berikut:
node selector
Periksa definisi yanginstance_type
Anda gunakan, dannode label
konfigurasi node kluster Anda.instance_type
Periksa dan ukuran SKU simpul untuk kluster AKS atau sumber daya simpul untuk kluster Kubernetes dengan dukungan Azure Arc.- Jika kluster kurang sumber daya, kurangi persyaratan sumber daya jenis instans atau gunakan jenis instans lain dengan persyaratan sumber daya yang lebih kecil.
- Jika kluster tidak memiliki lebih banyak sumber daya untuk memenuhi persyaratan penyebaran, hapus beberapa penyebaran untuk merilis sumber daya.
KESALAHAN: PodOutOfMemory
Anda mungkin mendapatkan kesalahan ini saat membuat atau memperbarui penyebaran online karena batas memori yang Anda berikan untuk penyebaran tidak cukup. Untuk mengurangi kesalahan ini, Anda dapat mengatur batas memori ke nilai yang lebih besar atau menggunakan jenis instans yang lebih besar.
KESALAHAN: InferensiClientCallFailed
Anda mungkin mendapatkan kesalahan ini saat membuat atau memperbarui titik akhir atau penyebaran online Kubernetes karena ekstensi k8s kluster Kubernetes tidak dapat dihubungkan. Dalam hal ini, lepaskan dan kemudian lampirkan kembali komputasi Anda.
Untuk memecahkan masalah kesalahan dengan memasang kembali, pastikan untuk memasang kembali dengan konfigurasi yang sama dengan komputasi yang dilepaskan, seperti nama komputasi dan namespace layanan, untuk menghindari kesalahan lain. Jika masih tidak berfungsi, tanyakan kepada administrator yang dapat mengakses kluster untuk digunakan kubectl get po -n azureml
untuk memeriksa apakah pod server relai berjalan.
Masalah konsumsi model
Kesalahan konsumsi model umum yang dihasilkan dari status operasi titik invoke
akhir termasuk masalah batas bandwidth, kebijakan CORS, dan berbagai kode status HTTP.
Masalah batas bandwidth
Titik akhir online terkelola memiliki batas bandwidth untuk setiap titik akhir. Anda dapat menemukan konfigurasi batas dalam batas untuk titik akhir online. Jika penggunaan bandwidth Anda melebihi batas, permintaan Anda akan tertunda.
Untuk memantau penundaan bandwidth, gunakan metrik Byte Jaringan untuk memahami penggunaan bandwidth saat ini. Untuk informasi lebih lanjut, lihat Memantau titik akhir online terkelola.
Dua trailer respons dikembalikan jika batas bandwidth diberlakukan:
ms-azureml-bandwidth-request-delay-ms
adalah waktu penundaan dalam milidetik yang diperlukan untuk transfer aliran permintaan.ms-azureml-bandwidth-response-delay-ms
adalah waktu penundaan dalam milidetik yang diperlukan untuk transfer aliran respons.
Diblokir oleh kebijakan CORS
Titik akhir online V2 tidak mendukung Berbagi Sumber Daya Lintas Asal (CORS) secara asli. Jika aplikasi web Anda mencoba memanggil titik akhir tanpa menangani permintaan preflight CORS dengan benar, Anda bisa mendapatkan 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.
Anda dapat menggunakan Azure Functions, Azure Application Gateway, atau layanan lain sebagai lapisan sementara untuk menangani permintaan preflight CORS.
Kode status HTTP
Ketika Anda mengakses titik akhir online dengan permintaan REST, kode status yang dikembalikan mematuhi standar untuk kode status HTTP. Bagian berikut menyajikan 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 permintaan REST menggunakan titik akhir online terkelola:
Kode status | Alasan | Deskripsi |
---|---|---|
200 | OK | Model Anda berhasil dijalankan dalam batas latensi 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 Autentikasi untuk titik akhir online terkelola dan Mengautentikasi klien untuk titik akhir online. |
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 ProbeSettings untuk memungkinkan lebih banyak waktu untuk memeriksa keaktifan atau kesiapan kontainer. |
429 | Terlalu banyak permintaan tertunda | Model Anda saat ini mendapatkan lebih banyak permintaan daripada yang dapat ditangani. Untuk menjamin kelancaran 2 * max_concurrent_requests_per_instance * instance_count requests operasi, Azure Pembelajaran Mesin mengizinkan maksimum untuk diproses secara paralel pada waktu tertentu. Permintaan 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. Pastikan juga bahwa variabel WORKER_COUNT lingkungan diteruskan dengan benar, seperti yang diuraikan dalam RequestSettings.Jika Anda mendapatkan kesalahan ini saat menggunakan autoscaling, model Anda mendapatkan permintaan lebih cepat daripada yang dapat ditingkatkan oleh sistem. Pertimbangkan untuk mengirim ulang permintaan dengan backoff eksponensial untuk memberikan waktu sistem untuk menyesuaikan. Anda juga dapat meningkatkan jumlah instans dengan menggunakan kode untuk menghitung jumlah instans. Gabungkan langkah-langkah ini dengan mengatur penskalaan otomatis untuk 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 Kubernetes
Tabel berikut berisi kode kesalahan umum ketika permintaan REST menggunakan titik akhir online Kubernetes:
Kode status | Kesalahan | Deskripsi |
---|---|---|
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, memicu operasi penghapusan baru akan menimbulkan kesalahan. |
502 | Pengecualian atau crash dalam run() metode file score.py |
Saat ada kesalahan dalam score.py, misalnya paket yang diimpor yang tidak ada di lingkungan conda, kesalahan sintaks, atau kegagalan dalam init() metode , lihat ERROR: ResourceNotReady untuk men-debug file. |
503 | 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. Lihat Cara mencegah kesalahan kode status 503. |
504 | Waktu permintaan habis | Kode status 504 menunjukkan bahwa waktu permintaan habis. 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, kode mungkin dalam keadaan tidak responsif atau perulangan tak terbatas. Ikuti ERROR: ResourceNotReady untuk men-debug file score.py . |
500 | Kesalahan server internal | Infrastruktur yang disediakan Azure Pembelajaran Mesin gagal. |
Cara mencegah kesalahan kode status 503
Penyebaran online Kubernetes mendukung penskalaan otomatis, yang memungkinkan replika ditambahkan untuk mendukung beban tambahan. Untuk informasi selengkapnya, lihat Router inferensi azure Pembelajaran Mesin. Keputusan untuk meningkatkan atau menurunkan skala didasarkan pada pemanfaatan replika kontainer saat ini.
Dua tindakan dapat membantu mencegah kesalahan kode status 503: Mengubah tingkat pemanfaatan untuk membuat replika baru, atau mengubah jumlah minimum replika. Anda dapat menggunakan pendekatan ini satu per satu atau dalam kombinasi.
Ubah target pemanfaatan di mana penskalaan otomatis membuat replika baru dengan mengatur ke
autoscale_target_utilization
nilai yang lebih rendah. Perubahan ini tidak menyebabkan replika dibuat lebih cepat, tetapi pada ambang pemanfaatan yang lebih rendah. Misalnya, mengubah nilai menjadi 30% menyebabkan replika dibuat ketika pemanfaatan 30% terjadi alih-alih menunggu sampai layanan 70% digunakan.Ubah jumlah minimum replika untuk menyediakan kumpulan yang lebih besar yang dapat menangani lonjakan masuk.
Cara menghitung jumlah instans
Untuk meningkatkan jumlah instans, Anda dapat menghitung replika yang diperlukan sebagai 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)
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.
Jika titik akhir online Kubernetes sudah menggunakan replika maks saat ini dan Anda masih mendapatkan 503 kode status, tingkatkan autoscale_max_replicas
nilai untuk meningkatkan jumlah maksimum replika.
Masalah isolasi jaringan
Bagian ini menyediakan informasi tentang masalah isolasi jaringan umum.
Pembuatan titik akhir online gagal dengan V1LegacyMode == pesan benar
Anda dapat mengonfigurasi ruang kerja Azure Pembelajaran Mesin untuk v1_legacy_mode
, yang menonaktifkan API v2. Titik akhir online terkelola adalah fitur platform API v2, dan tidak berfungsi jika v1_legacy_mode
diaktifkan untuk ruang kerja.
Untuk menonaktifkan v1_legacy_mode
, lihat Isolasi jaringan dengan v2.
Penting
Tanyakan kepada tim keamanan jaringan Anda sebelum Anda menonaktifkan v1_legacy_mode
, karena mereka mungkin telah mengaktifkannya karena suatu alasan.
Pembuatan titik akhir online dengan autentikasi berbasis kunci gagal
Gunakan perintah berikut untuk mencantumkan aturan jaringan brankas kunci Azure 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 kode 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.
Periksa apakah
egress-public-network-access
bendera adalahdisabled
untuk penyebaran. Jika bendera ini diaktifkan, dan visibilitas registri kontainer bersifat privat, kegagalan ini diharapkan.Gunakan perintah berikut untuk memeriksa status koneksi titik akhir privat. Ganti
<registry-name>
dengan nama registri kontainer Azure 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}"
Dalam kode respons, verifikasi bahwa
status
bidang diatur keApproved
. Jika tidak, 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
Verifikasi bahwa klien yang mengeluarkan permintaan penilaian adalah jaringan virtual yang dapat mengakses ruang kerja Azure Machine Learning.
nslookup
Gunakan perintah pada nama host titik akhir untuk mengambil informasi alamat IP, misalnya:nslookup endpointname.westcentralus.inference.ml.azure.com
Respons berisi alamat yang harus berada dalam rentang yang disediakan oleh jaringan virtual.
Catatan
- Untuk titik akhir online Kubernetes, nama host titik akhir harus menjadi CName (nama domain) yang ditentukan dalam kluster Kubernetes Anda.
- Jika titik akhir adalah HTTP, alamat IP terkandung dalam URI titik akhir, yang bisa Anda dapatkan dari antarmuka pengguna studio.
- Anda dapat menemukan lebih banyak cara untuk mendapatkan alamat IP titik akhir di titik akhir online Kubernetes Aman.
nslookup
Jika perintah tidak menyelesaikan nama host, lakukan tindakan berikut:
Titik akhir online terkelola
Gunakan perintah berikut untuk memeriksa apakah catatan A ada di zona Server Nama Domain (DNS) privat untuk jaringan virtual.
az network private-dns record-set list -z privatelink.api.azureml.ms -o tsv --query [].name
Hasilnya harus berisi entri yang mirip
*.<GUID>.inference.<region>
dengan .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.
Jika ruang kerja dengan titik akhir privat menggunakan server DNS kustom, jalankan perintah berikut untuk memverifikasi bahwa resolusi dari DNS kustom berfungsi dengan benar.
dig endpointname.westcentralus.inference.ml.azure.com
Titik akhir online Kube
Periksa konfigurasi DNS di kluster Kubernetes.
Periksa juga apakah azureml-fe berfungsi seperti yang diharapkan, dengan menggunakan 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 perintah berikut:
curl https://localhost:<port>/api/v1/endpoint/<endpoint-name>/swagger.json "Swagger not found"
Jika HTTP curl gagal atau kehabisan waktu tetapi HTTP berfungsi, periksa apakah sertifikat valid.
Jika proses sebelumnya gagal diselesaikan ke catatan A, verifikasi apakah resolusi berfungsi dari Azure DNS (168.63.129.16).
dig @168.63.129.16 endpointname.westcentralus.inference.ml.azure.com
Jika perintah sebelumnya berhasil, pecahkan masalah penerus bersyarat untuk tautan privat pada DNS kustom.
Penyebaran online tidak dapat dinilai
Jalankan perintah berikut untuk melihat apakah penyebaran berhasil:
az ml online-deployment show -e <endpointname> -n <deploymentname> --query '{name:name,state:provisioning_state}'
Jika penyebaran berhasil diselesaikan, nilainya
state
adalahSucceeded
.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
Respons dari perintah ini harus mencantumkan persentase lalu lintas yang ditetapkan untuk penyebaran.
Tip
Langkah ini tidak diperlukan jika Anda menggunakan
azureml-model-deployment
header dalam permintaan Anda untuk menargetkan penyebaran ini.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>
Tinjau log untuk melihat apakah ada masalah saat menjalankan kode penilaian saat Anda mengirimkan permintaan ke penyebaran.
Masalah server inferensi
Bagian ini menyediakan tips pemecahan masalah dasar untuk server HTTP inferensi Azure Pembelajaran Mesin.
Periksa paket yang terinstal
Ikuti langkah-langkah ini untuk mengatasi masalah dengan paket yang diinstal.
Kumpulkan informasi tentang paket dan versi yang diinstal untuk lingkungan Python Anda.
Konfirmasikan bahwa
azureml-inference-server-http
versi paket Python yang ditentukan dalam file lingkungan cocok dengan versi server HTTP inferensi Azure Pembelajaran Mesin yang ditampilkan di log startup.Dalam beberapa kasus, pemecah masalah dependensi pip menginstal versi paket yang tidak terduga. Anda mungkin perlu menjalankan
pip
untuk memperbaiki paket dan versi yang diinstal.Jika Anda menentukan Flask atau dependensinya di lingkungan Anda, hapus item ini.
- Paket dependen mencakup
flask
, ,jinja2
itsdangerous
,werkzeug
,markupsafe
, danclick
. flask
terdaftar sebagai dependensi dalam paket server. Pendekatan terbaik adalah mengizinkan server inferensi menginstalflask
paket.- Ketika server inferensi dikonfigurasi untuk mendukung versi flask baru, server secara otomatis menerima pembaruan paket saat tersedia.
- Paket dependen mencakup
Periksa versi server
Paket azureml-inference-server-http
server diterbitkan ke PyPI. Halaman PyPI mencantumkan changelog dan semua versi sebelumnya.
Jika Anda menggunakan versi paket yang lebih lama, perbarui konfigurasi Anda ke versi terbaru. Tabel berikut ini meringkas versi stabil, masalah umum, dan penyesuaian yang direkomendasikan:
Versi paket | Deskripsi | Masalah | Resolusi |
---|---|---|---|
0.4.x | Dibundel dalam gambar pelatihan tertanggal 20220601 atau lebih lama dan azureml-defaults versi .1.34 paket melalui 1.43 . Versi stabil terbaru adalah 0.4.13. |
Untuk versi server yang lebih lama dari 0.4.11, Anda mungkin mengalami masalah dependensi Flask, seperti "can't import name Markup from jinja2" . |
Tingkatkan ke versi 0.4.13 atau 0.8.x, versi terbaru, jika memungkinkan. |
0.6.x | Telah diinstal sebelumnya dalam gambar inferensi yang tertanggal 20220516 dan sebelumnya. Versi stabil terbaru adalah 0.6.1. |
T/A | T/A |
0.7.x | Mendukung Flask 2. Versi stabil terbaru adalah 0.7.7. | T/A | T/A |
0.8.x | Format log berubah. Dukungan Python 3.6 berakhir. | T/A | T/A |
Periksa dependensi paket
Paket dependen yang paling relevan untuk azureml-inference-server-http
paket server meliputi:
flask
opencensus-ext-azure
inference-schema
Jika Anda menentukan azureml-defaults
paket di lingkungan Python Anda, azureml-inference-server-http
paket tersebut adalah paket dependen. Dependensi diinstal secara otomatis.
Tip
Jika Anda menggunakan Python SDK v1 dan tidak secara eksplisit menentukan azureml-defaults
paket di lingkungan Python Anda, SDK mungkin secara otomatis menambahkan paket. Namun, versi packager dikunci relatif terhadap versi SDK. Misalnya, jika versi SDK adalah 1.38.0
, maka azureml-defaults==1.38.0
entri ditambahkan ke persyaratan pip lingkungan.
TypeError selama startup server
Anda mungkin mengalami hal berikut TypeError
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
Kesalahan ini terjadi ketika Anda menginstal Flask 2 di lingkungan Python Anda, tetapi versi paket Anda azureml-inference-server-http
tidak mendukung Flask 2. Dukungan untuk Flask 2 tersedia dalam azureml-inference-server-http
paket versi 0.7.0 dan yang lebih baru, dan azureml-defaults
paket versi 1.44 dan yang lebih baru.
Jika Anda tidak menggunakan paket Flask 2 dalam gambar Azure Pembelajaran Mesin Docker, gunakan versi
azureml-inference-server-http
terbaru paket atauazureml-defaults
.Jika Anda menggunakan paket Flask 2 dalam gambar Azure Pembelajaran Mesin Docker, konfirmasikan bahwa versi build gambar adalah Juli 2022 atau yang lebih baru.
Anda dapat menemukan versi gambar di log kontainer. Contohnya:
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, Materialization 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
Materialization Build
notasi. Dalam contoh sebelumnya, versi gambar adalah20220708
atau 8 Juli 2022. Gambar dalam contoh ini kompatibel dengan Flask 2.Jika Anda tidak melihat pesan serupa di log kontainer, gambar Anda sudah kedaluarsa dan harus diperbarui. Jika Anda menggunakan gambar Compute Unified Device Architecture (CUDA), dan Anda tidak dapat menemukan gambar yang lebih baru, periksa apakah gambar Anda tidak digunakan lagi di AzureML-Containers. Anda dapat menemukan pengganti yang ditunjuk untuk gambar yang tidak digunakan lagi.
Jika Anda menggunakan server dengan titik akhir online, Anda juga dapat menemukan log di halaman Log di Titik Akhir di studio Azure Pembelajaran Mesin.
Jika Anda menyebarkan dengan SDK v1, dan tidak secara eksplisit menentukan gambar dalam konfigurasi penyebaran Anda, server menerapkan openmpi4.1.0-ubuntu20.04
paket dengan versi yang cocok dengan toolset SDK lokal Anda. Namun, versi yang diinstal mungkin bukan versi gambar terbaru yang tersedia.
Untuk SDK versi 1.43, server menginstal openmpi4.1.0-ubuntu20.04:20220616
versi paket secara default, tetapi versi paket ini tidak kompatibel dengan SDK 1.43. Pastikan Anda menggunakan SDK terbaru untuk penyebaran Anda.
Jika Anda tidak dapat memperbarui gambar, Anda dapat menghindari masalah untuk sementara waktu dengan menyematkan azureml-defaults==1.43
entri atau azureml-inference-server-http~=0.4.13
dalam file lingkungan Anda. Entri ini mengarahkan server untuk menginstal versi lama dengan flask 1.0.x
.
ImportError atau ModuleNotFoundError selama startup server
Anda mungkin menemukan ImportError
atau ModuleNotFoundError
pada modul tertentu, seperti opencensus
, , jinja2
, markupsafe
atau click
, selama startup server. Contoh berikut menunjukkan pesan kesalahan:
ImportError: cannot import name 'Markup' from 'jinja2'
Kesalahan impor dan modul terjadi saat Anda menggunakan versi 0.4.10 atau versi server yang lebih lama yang tidak menyematkan dependensi Flask ke versi yang kompatibel. Untuk mencegah masalah, instal versi server yang lebih baru.
Masalah umum lainnya
Masalah titik akhir online umum lainnya terkait dengan penginstalan conda dan autoscaling.
Masalah penginstalan Conda
Masalah dengan penyebaran MLflow umumnya berasal dari masalah dengan penginstalan lingkungan pengguna yang ditentukan dalam file conda.yml .
Untuk men-debug masalah penginstalan conda, coba langkah-langkah berikut:
- Periksa log penginstalan conda. Jika kontainer mengalami crash atau terlalu lama untuk memulai, pembaruan lingkungan conda mungkin gagal diselesaikan dengan benar.
- Instal file conda mlflow secara lokal dengan perintah
conda env create -n userenv -f <CONDA_ENV_FILENAME>
. - Jika ada kesalahan secara lokal, coba selesaikan lingkungan conda dan buat yang lingkungan yang berfungsi sebelum menyebarkan ulang.
- Jika kontainer mengalami crash bahkan jika diselesaikan secara lokal, ukuran SKU yang digunakan untuk penyebaran mungkin terlalu kecil.
- Penginstalan paket Conda terjadi pada runtime, jadi jika ukuran SKU terlalu kecil untuk mengakomodasi semua paket dalam file lingkungan conda.yml , kontainer mungkin mengalami crash.
- VM Standard_F4s_v2 adalah ukuran SKU awal yang baik, tetapi Anda mungkin memerlukan VM yang lebih besar tergantung pada dependensi yang ditentukan file conda.
- Untuk titik akhir online Kubernetes, kluster Kubernetes harus memiliki minimal empat inti vCPU dan memori 8 GB.
Masalah penskalaan otomatis
Jika Anda mengalami masalah dengan autoscaling, lihat Memecahkan masalah skala otomatis Azure Monitor.
Untuk titik akhir online Kubernetes, router inferensi Azure Pembelajaran Mesin adalah komponen front-end yang menangani penskalaan otomatis untuk semua penyebaran model pada kluster Kubernetes. Untuk informasi selengkapnya, lihat Perutean inferensi Kubernetes Skala Otomatis.