Çevrimiçi uç noktaların dağıtım ve puanlama sorunlarını giderme
ŞUNLAR IÇIN GEÇERLIDIR: Azure CLI ml uzantısı v2 (geçerli)Python SDK azure-ai-ml v2 (geçerli)
Azure Machine Learning çevrimiçi uç noktalarının dağıtımı ve puanlaması ile ilgili yaygın sorunları çözmeyi öğrenin.
Bu belge, sorun gidermeye yaklaşmanız gereken şekilde yapılandırılmıştır:
- Modellerinizi buluta dağıtmadan önce test etmek ve hatalarını ayıklamak için yerel dağıtımı kullanın.
- Sorunları ayıklamaya yardımcı olması için kapsayıcı günlüklerini kullanın.
- Oluşabilecek yaygın dağıtım hatalarını ve bunları nasıl düzelteceğinizi öğrenin.
HTTP durum kodları bölümünde, REST istekleriyle uç noktaları puanlarken çağırma ve tahmin hatalarının HTTP durum kodlarıyla nasıl eşlenmesi açıklanmaktadır.
Önkoşullar
- Bir Azure aboneliği. Azure Machine Learning'in ücretsiz veya ücretli sürümünü deneyin.
- Azure CLI.
- Azure Machine Learning CLI v2 için bkz. CLI'yi yükleme, ayarlama ve kullanma (v2).
- Azure Machine Learning Python SDK v2 için bkz. Python için Azure Machine Learning SDK v2'yi yükleme.
Yerel olarak dağıtma
Yerel dağıtım, yerel bir Docker ortamına bir model dağıtıyor. Yerel dağıtım, buluta dağıtımdan önce test etmek ve hata ayıklamak için kullanışlıdır.
İpucu
Puanlama betiğinizde yerel olarak hata ayıklamak için Azure Machine Learning çıkarım HTTP sunucusu Python paketini de kullanabilirsiniz. Çıkarım sunucusuyla hata ayıklama, yerel uç noktalara dağıtmadan önce puanlama betiğinin hatalarını ayıklamanıza yardımcı olur, böylece dağıtım kapsayıcısı yapılandırmalarından etkilenmeden hata ayıklayabilirsiniz.
Yerel dağıtım, yerel bir uç noktanın oluşturulmasını, güncelleştirilmesini ve silinmesini destekler. Ayrıca uç noktadan günlükleri çağırmanızı ve almanızı sağlar.
Yerel dağıtımı kullanmak için uygun CLI komutuna ekleyin --local
:
az ml online-deployment create --endpoint-name <endpoint-name> -n <deployment-name> -f <spec_file.yaml> --local
Yerel dağıtımın bir parçası olarak aşağıdaki adımlar gerçekleşir:
- Docker yeni bir kapsayıcı görüntüsü oluşturur veya yerel Docker önbelleğinden mevcut bir görüntüyü çeker. Belirtim dosyasının ortam bölümüyle eşleşen bir görüntü varsa, mevcut bir görüntü kullanılır.
- Docker, model ve kod dosyaları gibi bağlı yerel yapıtlarla yeni bir kapsayıcı başlatır.
Daha fazla bilgi için bkz . Makine öğrenmesi modelini dağıtma ve puanlandırma bölümünde yerel olarak dağıtma.
İpucu
Uç noktalarınızı yerel olarak test etmek ve hatalarını ayıklamak için Visual Studio Code kullanın. Daha fazla bilgi için bkz . Visual Studio Code'da çevrimiçi uç noktalarda yerel olarak hata ayıklama.
Conda yüklemesi
Genellikle, MLflow dağıtımıyla ilgili sorunlar, dosyada conda.yaml
belirtilen kullanıcı ortamının yüklenmesiyle ilgili sorunlardan kaynakılır.
Conda yükleme sorunlarının hatalarını ayıklamak için aşağıdaki adımları deneyin:
Conda yüklemesi için günlükleri denetleyin. Kapsayıcı kilitlendiyse veya başlatılması çok uzun sürüyorsa conda ortam güncelleştirmesi doğru çözümlenememiş olabilir.
mlflow conda dosyasını komutuyla
conda env create -n userenv -f <CONDA_ENV_FILENAME>
yerel olarak yükleyin.Yerel olarak hatalar varsa, yeniden dağıtmadan önce conda ortamını çözmeyi ve işlevsel bir ortam oluşturmayı deneyin.
Kapsayıcı yerel olarak çözümlense bile kilitleniyorsa, dağıtım için kullanılan SKU boyutu çok küçük olabilir.
- Conda paketi yüklemesi çalışma zamanında gerçekleşir, bu nedenle SKU boyutu ortam dosyasında ayrıntılı olarak belirtilen
conda.yaml
tüm paketleri barındıramayacak kadar küçükse kapsayıcı kilitlenebilir. - Standard_F4s_v2 VM iyi bir başlangıç SKU boyutudur, ancak conda dosyasında hangi bağımlılıkların belirtildiğine bağlı olarak daha büyük olanlar gerekebilir.
- Kubernetes çevrimiçi uç noktası için Kubernetes kümesinde en az 4 vCPU çekirdeği ve 8 GB bellek olmalıdır.
- Conda paketi yüklemesi çalışma zamanında gerçekleşir, bu nedenle SKU boyutu ortam dosyasında ayrıntılı olarak belirtilen
Kapsayıcı günlüklerini alma
Modelin dağıtıldığı sanal makineye doğrudan erişemezsiniz. Bununla birlikte sanal makinede çalışan bazı kapsayıcılardan günlükler alabilirsiniz. Edindiğiniz bilgi miktarı, dağıtımın sağlama durumuna bağlıdır. Belirtilen kapsayıcı çalışır durumdaysa konsol çıkışını görürsünüz; aksi takdirde, daha sonra yeniden denemek için bir ileti alırsınız.
Günlükleri alabileceğiniz iki tür kapsayıcı vardır:
- Çıkarım sunucusu: Günlükler, puanlama betiğinizden (kod) yazdırma/günlüğe kaydetme işlevlerinin çıkışını içeren konsol günlüğünü (
score.py
çıkarım sunucusundan) içerir. - Depolama başlatıcı: Günlükler, kod ve model verilerinin kapsayıcıya başarıyla indirilip indirilmediğine ilişkin bilgiler içerir. Kapsayıcı, çıkarım sunucusu kapsayıcısı çalışmaya başlamadan önce çalışır.
Kapsayıcıdan günlük çıktısını görmek için aşağıdaki CLI komutunu kullanın:
az ml online-deployment get-logs -e <endpoint-name> -n <deployment-name> -l 100
veya
az ml online-deployment get-logs --endpoint-name <endpoint-name> --name <deployment-name> --lines 100
--workspace-name
Bu parametreleri aracılığıyla az configure
henüz ayarlamadıysanız ve komutlarına ekleyin--resource-group
.
Bu parametreleri ayarlama hakkında bilgi edinmek ve şu anda değer ayarladıysanız şunu çalıştırın:
az ml online-deployment get-logs -h
Varsayılan olarak günlükler çıkarım sunucusundan çekilir.
Not
Python günlüğü kullanıyorsanız, iletilerin günlüklerde yayımlanması için doğru günlük düzeyi sırasını kullandığınızdan emin olun. Örneğin, BİlGİ.
Ayrıca, geçirerek –-container storage-initializer
depolama başlatıcı kapsayıcısından günlükleri alabilirsiniz.
Daha fazla bilgi görmek için komutlara ve/veya --debug
ekleyin--help
.
Kubernetes çevrimiçi uç noktası için yöneticiler modeli dağıttığınız kümeye doğrudan erişebilir ve bu da Kubernetes'teki günlüğü denetlemeleri için daha esnektir. Örneğin:
kubectl -n <compute-namespace> logs <container-name>
İstek izleme
Desteklenen iki izleme üst bilgisi vardır:
x-request-id
sunucu izleme için ayrılmıştır. Geçerli bir GUID olduğundan emin olmak için bu üst bilgiyi geçersiz kılarız.Not
Başarısız bir istek için destek bileti oluşturduğunuzda, araştırmayı hızlandırmak için başarısız istek kimliğini ekleyin.
x-ms-client-request-id
istemci izleme senaryoları için kullanılabilir. Bu üst bilgi yalnızca alfasayısal karakterleri, kısa çizgileri ve alt çizgileri kabul etmek için temizlenmiş ve en fazla 40 karaktere kesilmiştir.
Sık karşılaşılan dağıtım hataları
Aşağıdaki liste, dağıtım işlemi durumunun bir parçası olarak bildirilen yaygın dağıtım hatalarının listesidir:
- ImageBuildFailure
- OutOfQuota
- BadArgument
- Hem yönetilen çevrimiçi uç nokta hem de Kubernetes çevrimiçi uç noktası için ortak
- Kubernetes çevrimiçi uç noktasıyla sınırlı hatalar
- ResourceNotReady
- ResourceNotFound
- OperationCanceled
- SecretsInjectionError
- InternalServerError
Bir Kubernetes çevrimiçi dağıtımı oluşturuyor veya güncelleştiriyorsanız Kubernetes dağıtımlarına özgü yaygın hataları görebilirsiniz.
HATA: ImageBuildFailure
Ortam (docker görüntüsü) oluşturulurken bu hata döndürülür. Hatalar hakkında daha fazla bilgi için derleme günlüğünü de kontrol edebilirsiniz. Derleme günlüğü, Azure Machine Learning çalışma alanınız için varsayılan depolama alanında bulunur. Tam konum hatanın bir parçası olarak döndürülebilir. Örneğin, "the build log under the storage account '[storage-account-name]' in the container '[container-name]' at the path '[path-to-the-log]'"
.
Aşağıdaki listede yaygın görüntü derleme hatası senaryoları yer alır:
- Azure Container Registry (ACR) yetkilendirme hatası
- Sanal ağ ile özel bir çalışma alanında ayarlanmayan görüntü derleme işlem
- Genel veya bilinmeyen hata
ImageBuild zaman aşımlarınız varsa varsayılan yoklama ayarlarını gözden geçirmenizi de öneririz.
Kapsayıcı kayıt defteri yetkilendirme hatası
Hata iletisinde bundan bahsediliyorsa "container registry authorization failure"
, kapsayıcı kayıt defterine geçerli kimlik bilgileriyle erişemezsiniz.
Çalışma alanı kaynağının anahtarlarının zaman uyumsuz hale getirilmesi bu hataya neden olabilir ve otomatik olarak eşitlenmesi biraz zaman alabilir.
Ancak, anahtarların eşitlenmesi için el ile çağrı yapabilir ve bu da yetkilendirme hatasını çözebilir.
Bir sanal ağın arkasındaki kapsayıcı kayıt defterleri de yanlış ayarlanırsa bu hatayla karşılaşabilir. Sanal ağın düzgün ayarlandığını doğrulamanız gerekir.
Sanal ağ ile özel bir çalışma alanında ayarlanmayan görüntü derleme işlem
Hata iletisinde bahsediliyorsa "failed to communicate with the workspace's container registry"
ve sanal ağları kullanıyorsanız ve çalışma alanının Azure Container Registry'si özelse ve özel bir uç noktayla yapılandırılmışsa, sanal ağda görüntü oluşturmaya izin vermek için Azure Container Registry'yi etkinleştirmeniz gerekir.
Genel görüntü derleme hatası
Daha önce belirtildiği gibi, hata hakkında daha fazla bilgi için derleme günlüğünü de kontrol edebilirsiniz.
Derleme günlüğünde belirgin bir hata bulunmazsa ve son satır ise Installing pip dependencies: ...working...
, bir bağımlılık hataya neden olabilir. Conda dosyanıza sürüm bağımlılıklarını sabitlemek bu sorunu çözebilir.
Ayrıca buluta dağıtmadan önce modellerinizi yerel olarak test etmek ve hatalarını ayıklamak için yerel olarak dağıtmanızı öneririz.
HATA: OutOfQuota
Aşağıdaki liste, Azure hizmetlerini kullanırken kotası tükenebilecek yaygın kaynakların listesidir:
Ayrıca, aşağıdaki liste yalnızca Kubernetes çevrimiçi uç noktası için kotası tükenebilecek yaygın kaynakların listesidir:
CPU Kotası
Modeli dağıtmadan önce yeterli işlem kotasına sahip olmanız gerekir. Bu kota abonelik başına, çalışma alanı başına, SKU başına ve bölge başına ne kadar sanal çekirdeğin kullanılabilir olduğunu tanımlar. Her dağıtım kullanılabilir kotayı çıkarır ve sildikten sonra SKU türüne göre geri ekler.
Olası bir azaltma, silebileceğiniz kullanılmayan dağıtımlar olup olmadığını denetlemektir. İsterseniz kota artışı isteği gönderebilirsiniz.
Küme kotası
Bu sorun, yeterli Azure Machine Learning İşlem kümesi kotanız olmadığında oluşur. Bu kota, Azure Bulut'ta CPU veya GPU düğümlerini dağıtmak için abonelik başına bir kerede kullanımda olabilecek toplam küme sayısını tanımlar.
Olası bir azaltma, silebileceğiniz kullanılmayan dağıtımlar olup olmadığını denetlemektir. İsterseniz kota artışı isteği gönderebilirsiniz. Bu kota artırma isteği için kota türü olarak seçtiğinizden Machine Learning Service: Cluster Quota
emin olun.
Disk kotası
Bu sorun, modelin boyutu kullanılabilir disk alanından daha büyük olduğunda ve model indirilemediğinde ortaya çıkar. Daha fazla disk alanı olan veya görüntü ve model boyutunu azaltan bir SKU deneyin.
Bellek kotası
Bu sorun, modelin bellek ayak izi kullanılabilir bellekten daha büyük olduğunda ortaya çıkar. Daha fazla belleğe sahip bir SKU deneyin.
Rol atama kotası
Yönetilen çevrimiçi uç nokta oluştururken, yönetilen kimliğin çalışma alanı kaynaklarına erişmesi için rol ataması gerekir. Rol atama sınırına ulaştıysanız, bu abonelikteki kullanılmayan bazı rol atamalarını silmeyi deneyin. Erişim Denetimi menüsüne giderek Azure portalındaki tüm rol atamalarını denetleyebilirsiniz.
Uç nokta kotası
Bu abonelikte kullanılmayan bazı uç noktaları silmeyi deneyin. Tüm uç noktalarınız etkin bir şekilde kullanılıyorsa, uç nokta sınırı artışı istemeyi deneyebilirsiniz. Uç nokta sınırı hakkında daha fazla bilgi edinmek için bkz . Azure Machine Learning çevrimiçi uç noktaları ve toplu iş uç noktaları ile uç nokta kotası.
Kubernetes kotası
Bu sorun, istenen CPU veya bellek bu dağıtım için zamanlanamayan düğümler nedeniyle sağlanamadığında ortaya çıkar. Örneğin, düğümler kordonlanmış veya başka bir şekilde kullanılamıyor olabilir.
Hata iletisi genellikle kümedeki kaynağın yetersiz olduğunu gösterir; örneğin, OutOfQuota: Kubernetes unschedulable. Details:0/1 nodes are available: 1 Too many pods...
kümede çok fazla pod olduğu ve isteğinize göre yeni modeli dağıtmak için yeterli kaynak olmadığı anlamına gelir.
Bu sorunu gidermek için aşağıdaki azaltmayı deneyebilirsiniz:
- Kubernetes kümesini koruyan BT işlemleri için daha fazla düğüm eklemeyi veya bazı kaynakları serbest bırakmak için kümedeki kullanılmayan bazı podları temizlemeyi deneyebilirsiniz.
- Modelleri dağıtan makine öğrenmesi mühendisleri için dağıtımınızın kaynak isteğini azaltmayı deneyebilirsiniz:
- Kaynak isteğini dağıtım yapılandırmasında kaynak bölümü aracılığıyla doğrudan tanımlarsanız, kaynak isteğini azaltmayı deneyebilirsiniz.
- Model dağıtımı için kaynak tanımlamak için kullanırsanız
instance type
, örnek türü kaynak yapılandırmasını ayarlamak için BT işlemlerine başvurabilirsiniz. Daha fazla ayrıntı için Bkz. Kubernetes örnek türünü yönetme.
Bölge genelinde VM kapasitesi
Bölgede Azure Machine Learning kapasitesinin olmaması nedeniyle hizmet belirtilen VM boyutunu sağlayamadı. Daha sonra yeniden deneyin veya farklı bir bölgeye dağıtmayı deneyin.
Diğer kota
Dağıtımın score.py
bir parçası olarak sağlanan öğesini çalıştırmak için Azure, ihtiyaç duyduğu tüm kaynakları score.py
içeren bir kapsayıcı oluşturur ve bu kapsayıcıda puanlama betiğini çalıştırır.
Kapsayıcınız başlatılamıyorsa puanlama yapılamaz. Kapsayıcının destekleyebileceklerden instance_type
daha fazla kaynak istemesi olabilir. Öyleyse, çevrimiçi dağıtımın instance_type
güncelleştirmesini göz önünde bulundurun.
Hatanın tam nedenini almak için şunu çalıştırın:
az ml online-deployment get-logs -e <endpoint-name> -n <deployment-name> -l 100
HATA: BadArgument
Aşağıdaki liste, yönetilen çevrimiçi uç nokta veya Kubernetes çevrimiçi uç noktasını kullanırken bu hatayla karşılaşabileceğiniz nedenlerden bazılarıdır:
- Abonelik yok
- Yetkilendirme hatası nedeniyle başlangıç görevi başarısız oldu
- Kaynakta yanlış rol atamaları nedeniyle başlangıç görevi başarısız oldu
- Geçersiz şablon işlevi belirtimi
- Kullanıcının kapsayıcı görüntüsü indirilemiyor
- Kullanıcı modeli indirilemiyor
- Özel ağ ile MLFlow model biçimi desteklenmiyor
Aşağıdaki liste, yalnızca Kubernetes çevrimiçi uç noktasını kullanırken bu hatayla karşılaşabileceğiniz nedenlerdendir:
Abonelik mevcut değil
Girilen Azure aboneliği mevcut olmalıdır. Bu hata, başvuruda bulunan Azure aboneliğini bulamadığımızda oluşur. Bu hatanın nedeni büyük olasılıkla abonelik kimliğindeki bir yazım hatasıdır. Abonelik kimliğinin doğru yazıldığını ve şu anda etkin olup olmadığını bir kez daha denetleyin.
Azure abonelikleri hakkında daha fazla bilgi için önkoşullar bölümünü görebilirsiniz.
Yetkilendirme hatası
İşlem kaynağını sağladıktan sonra (dağıtım oluştururken), Azure çalışma alanından kullanıcı kapsayıcı görüntüsünü çekmeye çalışır Azure Container Registry (ACR). Kullanıcı modelini ve kod yapıtlarını çalışma alanı depolama hesabından kullanıcı kapsayıcısına bağlamaya çalışır.
Azure, bu eylemleri gerçekleştirmek için depolama hesabına ve kapsayıcı kayıt defterine erişmek için yönetilen kimlikleri kullanır.
İlişkili uç noktayı Sistem Tarafından Atanan Kimlik ile oluşturduysanız, Azure rol tabanlı erişim denetimi (RBAC) izni otomatik olarak verilir ve başka izin gerekmez.
Kullanıcı Tarafından Atanan Kimlik ile ilişkili uç noktayı oluşturduysanız, kullanıcının yönetilen kimliğinin çalışma alanının depolama hesabında Depolama blob veri okuyucu iznine ve çalışma alanı için Azure Container Registry'de (ACR) AcrPull iznine sahip olması gerekir. Kullanıcı Tarafından Atanan Kimliğinizin doğru izne sahip olduğundan emin olun.
Daha fazla bilgi için bkz . Kapsayıcı Kayıt Defteri Yetkilendirme Hatası.
Geçersiz şablon işlevi belirtimi
Bu hata, bir şablon işlevi yanlış belirtildiğinde oluşur. İlkeyi düzeltin veya engeli kaldırmak için ilke atamasını kaldırın. Hata iletisi, bu hatada hata ayıklamanıza yardımcı olacak ilke atama adını ve ilke tanımını ve şablon hatalarını önlemeye yönelik ipuçlarının açıklandığı Azure ilke tanımı yapısı makalesini içerebilir.
Kullanıcının kapsayıcı görüntüsü indirilemiyor
Kullanıcı kapsayıcısı bulunamadı. Daha fazla ayrıntı almak için kapsayıcı günlüklerini denetleyin.
Kapsayıcı görüntüsünün ACR çalışma alanında kullanılabilir olduğundan emin olun.
Örneğin, görüntü testacr.azurecr.io/azureml/azureml_92a029f831ce58d2ed011c3c42d35acb:latest
ile depoyu az acr repository show-tags -n testacr --repository azureml/azureml_92a029f831ce58d2ed011c3c42d35acb --orderby time_desc --output table
denetleyin.
Kullanıcı modeli indirilemiyor
Kullanıcının modeli bulunamıyor olabilir. Daha fazla ayrıntı almak için kapsayıcı günlüklerini denetleyin.
Modeli dağıtımla aynı çalışma alanına kaydettiğinizden emin olun. Çalışma alanında bir modelin ayrıntılarını göstermek için:
az ml model show --name <model-name> --version <version>
Uyarı
Modelin bilgilerini almak için sürümü veya etiketi belirtmeniz gerekir.
Blobların çalışma alanı depolama hesabında mevcut olup olmadığını da de kontrol edebilirsiniz.
Örneğin, blob ise
https://foobar.blob.core.windows.net/210212154504-1517266419/WebUpload/210212154504-1517266419/GaussianNB.pkl
, var olup olmadığını denetlemek için bu komutu kullanabilirsiniz:az storage blob exists --account-name foobar --container-name 210212154504-1517266419 --name WebUpload/210212154504-1517266419/GaussianNB.pkl --subscription <sub-name>`
Blob varsa, depolama başlatıcısından günlükleri almak için şu komutu kullanabilirsiniz:
az ml online-deployment get-logs --endpoint-name <endpoint-name> --name <deployment-name> –-container storage-initializer`
Özel ağ ile MLFlow model biçimi desteklenmiyor
Yönetilen çevrimiçi uç noktalar için eski ağ yalıtım yöntemiyle birlikte kod içermeyen bir dağıtım yaklaşımıyla bir MLflow modeli dağıtmaya çalıştığınızda bu hata oluşur. Eski ağ yalıtım yöntemini kullanıyorsanız, bu özel ağ özelliği MLFlow modeli biçimiyle birlikte kullanılamaz. Kod içermeyen dağıtım yaklaşımıyla bir MLflow modeli dağıtmanız gerekiyorsa, çalışma alanıyla yönetilen sanal ağı kullanmayı deneyin.
Sınırlardan büyük kaynak istekleri
Kaynaklara yönelik istekler sınırlardan küçük veya buna eşit olmalıdır. Sınırları ayarlamazsanız, işlemlerinizi bir Azure Machine Learning çalışma alanına eklediğinizde varsayılan değerleri ayarlarız. Azure portalında veya komutunu kullanarak sınırları de kontrol az ml compute show
edebilirsiniz.
azureml-fe hazır değil
Gelen çıkarım isteklerini dağıtılan hizmetlere yönlendiren ön uç bileşeni (azureml-fe) gerektiğinde otomatik olarak ölçeklendirilir. Bu, k8s uzantısı yüklemeniz sırasında yüklenir.
Bu bileşenin kümede iyi durumda olması, en az bir iyi durumda çoğaltma olması gerekir. Kubernetes çevrimiçi uç noktasını ve dağıtım oluşturma/güncelleştirme isteğini tetiklediğinizde kullanılamazsa bu hata iletisini alırsınız.
Bu sorunu düzeltmek için pod durumunu ve günlüklerini denetleyin; kümede yüklü k8s uzantısını güncelleştirmeyi de deneyebilirsiniz.
HATA: ResourceNotReady
Dağıtımın score.py
bir parçası olarak sağlanan öğesini çalıştırmak için Azure, ihtiyaç duyduğu tüm kaynakları score.py
içeren bir kapsayıcı oluşturur ve bu kapsayıcıda puanlama betiğini çalıştırır. Bu senaryodaki hata, çalışırken bu kapsayıcının kilitlenmesi ve puanlamanın gerçekleşemeyecek olmasıdır. Bu hata şu durumlarda oluşur:
- içinde
score.py
bir hata var. Yaygın sorunları tanılamak için kullanınget-logs
:- İçeri aktarmaya çalışan bir paket
score.py
conda ortamına dahil değildir. - Söz dizimi hatası.
- yönteminde
init()
bir hata.
- İçeri aktarmaya çalışan bir paket
get-logs
Herhangi bir günlük üretmiyorsa, bu genellikle kapsayıcının başlatılamadığını gösterir. Bu sorunun hatalarını ayıklamak için bunun yerine yerel olarak dağıtmayı deneyin.- Hazır olma veya canlılık yoklamaları doğru ayarlanmamıştır.
- Kapsayıcı başlatma çok uzun sürüyor, böylece hazır olma veya canlılık araştırması hata eşiğinin ötesinde başarısız oluyor. Bu durumda, kapsayıcıyı başlatmak için daha uzun süre tanıyacak şekilde yoklama ayarlarını yapın. Ya da desteklenen VM SKU'ları arasında daha büyük bir VM SKU'su deneyerek başlatmayı hızlandırabilirsiniz.
- Kapsayıcının ortam kurulumunda eksik bağımlılık gibi bir hata var.
- Hatayı aldığınızda
TypeError: register() takes 3 positional arguments but 4 were given
, flask v2 ileazureml-inference-server-http
arasındaki bağımlılığı denetleyin. Daha fazla bilgi için bkz . ÇıKARıM HTTP sunucusu hakkında SSS.
HATA: ResourceNotFound
Aşağıdaki liste, yalnızca yönetilen çevrimiçi uç nokta veya Kubernetes çevrimiçi uç noktasını kullanırken bu hatayla karşılaşabileceğiniz nedenlerdendir:
- Azure Resource Manager gerekli kaynağı bulamıyor
- Azure Container Registry özel veya başka bir nedenle erişilemiyor
Resource Manager kaynak bulamıyor
Azure Resource Manager gerekli bir kaynağı bulamadıklarında bu hata oluşur. Örneğin, bir depolama hesabına başvurulduysa ancak belirtildiği yolda bulunamıyorsa bu hatayı alabilirsiniz. Tam yol veya adlarının yazım denetimiyle sağlanmış olabilecek kaynakları iki kez denetlediğinden emin olun.
Daha fazla bilgi için bkz . Kaynak Bulunamadı Hatalarını Çözme.
Kapsayıcı kayıt defteri yetkilendirme hatası
Dağıtım için özel veya başka bir şekilde erişilemeyen kapsayıcı kayıt defterine ait bir görüntü sağlandığında bu hata oluşur. Şu anda API'lerimiz özel kayıt defteri kimlik bilgilerini kabul edemiyor.
Bu hatayı azaltmak için kapsayıcı kayıt defterinin özel olmadığından emin olun veya aşağıdaki adımları izleyin:
- Özel kayıt defterinizin
acrPull
rolünü çevrimiçi uç noktanızın sistem kimliğine verin. - Ortam tanımınızda, özel görüntünüzün adresini ve görüntüyü değiştirmeme (derleme) yönergesini belirtin.
Azaltma başarılı olursa, görüntünün oluşturulması gerekmez ve son görüntü adresi verilen görüntü adresidir. Dağıtım zamanında, çevrimiçi uç noktanızın sistem kimliği görüntüyü özel kayıt defterinden çeker.
Daha fazla tanılama bilgisi için bkz . Çalışma Alanı Tanılama API'sini Kullanma.
HATA: operationCanceled
Aşağıdaki liste, yönetilen çevrimiçi uç nokta veya Kubernetes çevrimiçi uç noktasını kullanırken bu hatayla karşılaşabileceğiniz nedenlerden bazılarıdır:
- İşlem, daha yüksek önceliğe sahip başka bir işlem tarafından iptal edildi
- İşlem, kilit onayı bekleyen önceki bir işlemden dolayı iptal edildi
İşlem daha yüksek öncelikli başka bir işlem tarafından iptal edildi
Azure işlemleri belirli bir öncelik düzeyine sahiptir ve en yüksekten en düşüğe kadar yürütülür. Bu hata, işleminiz daha yüksek önceliğe sahip başka bir işlem tarafından geçersiz kılındığında oluşur.
İşlemi yeniden denemek iptal edilmeden gerçekleştirilmesine izin verebilir.
Kilit onayı beklenilirken işlem iptal edildi
Azure operasyonları, gönderildikten sonra kısa bir bekleme süresine sahiptir ve bu süre boyunca yarış koşullarına girmediğimizden emin olmak için bir kilit alır. Gönderdiğiniz işlem başka bir işlemle aynı olduğunda bu hata oluşur. Diğer işlem şu anda devam etmek için kilidi aldığına dair onay bekliyor. İlk istek sonrasında çok erken bir şekilde benzer bir istek gönderdiğinizi gösterebilir.
Bir dakikaya kadar birkaç saniye bekledikten sonra işlemi yeniden denemek, işlemin iptal edilmeden gerçekleştirilmesine izin verebilir.
HATA: SecretsInjectionError
Çevrimiçi dağıtım oluşturma sırasında gizli dizi alma ve ekleme, çalışma alanı bağlantılarından ve/veya anahtar kasalarından gizli dizileri almak için çevrimiçi uç noktayla ilişkili kimliği kullanır. Bu hata şu durumlarda oluşur:
- Gizli diziler dağıtım tanımı tarafından başvuru olarak belirtilse bile (ortam değişkenlerine eşlenmiş) uç nokta kimliğinin çalışma alanı bağlantılarından ve/veya anahtar kasalarından gizli dizileri okuması için Azure RBAC izni yoktur. Değişikliklerin etkili olması için rol atamanın zaman alabileceğini unutmayın.
- Gizli dizi başvurularının biçimi geçersiz veya belirtilen gizli diziler çalışma alanı bağlantılarında ve/veya anahtar kasalarında yok.
Daha fazla bilgi için bkz. Çevrimiçi uç noktalara gizli dizi ekleme (önizleme) ve Gizli dizi ekleme (önizleme) kullanarak çevrimiçi dağıtımdan gizli dizileri erişme.
HATA: InternalServerError
Kararlı ve güvenilir bir hizmet sağlamak için elimizden geleni yapmamıza rağmen, bazen işler plana uygun gitmez. Bu hatayı alırsanız, bu bir şeyin bizim tarafımızda doğru olmadığı anlamına gelir ve bunu düzeltmemiz gerekir. Tüm ilgili bilgileri içeren bir müşteri destek bileti gönderin ve sorunu çözebiliriz.
Kubernetes dağıtımlarına özgü yaygın hatalar
Kimlik ve kimlik doğrulamasıyla ilgili hatalar:
- ACRSecretError
- TokenRefreshFailed
- GetAADTokenFailed
- ACRAuthenticationChallengeFailed
- ACRTokenExchangeFailed
- KubernetesUnaccessible
Crashloopbackoff ile ilgili hatalar:
Puanlama betiğiyle ilgili hatalar:
Diğerleri:
- NamespaceNotFound
- EndpointAlreadyExists
- ScoringFeUnhealthy
- ValidateScoringFailed
- InvalidDeploymentSpec
- PodUnschedulable
- PodOutOfMemory
- InferencingClientCallFailed
HATA: ACRSecretError
Aşağıdaki liste, Kubernetes çevrimiçi dağıtımlarını oluştururken/güncelleştirirken bu hatayla karşılaşabileceğiniz nedenlerden bazılarıdır:
- Rol ataması tamamlanmadı. Bu durumda, birkaç saniye bekleyin ve daha sonra yeniden deneyin.
- Azure ARC (Azure Arc Kubernetes kümesi için) veya Azure Machine Learning uzantısı (AKS için) düzgün yüklenmemiş veya yapılandırılmamış. Azure ARC veya Azure Machine Learning uzantısı yapılandırmasını ve durumunu denetlemeyi deneyin.
- Kubernetes kümesi yanlış ağ yapılandırmasına sahip, ara sunucuyu, ağ ilkesini veya sertifikayı denetleyin.
- Özel aks kümesi kullanıyorsanız AKS sanal akında ACR, depolama hesabı, çalışma alanı için özel uç noktalar ayarlamanız gerekir.
- Azure Machine Learning uzantısı sürümünüzün v1.1.25'ten büyük olduğundan emin olun.
HATA: TokenRefreshFailed
Bu hatanın nedeni, Kubernetes küme kimliği düzgün ayarlanamadığından uzantının Azure'dan asıl kimlik bilgilerini alamıyor olmasıdır. Azure Machine Learning uzantısını yeniden yükleyin ve yeniden deneyin.
HATA: GetAADTokenFailed
Bu hatanın nedeni Kubernetes kümesinin Azure AD belirtecini istemesinin başarısız olması veya zaman aşımına uğradı olması, ağ erişilebilirliğinizi kontrol edip yeniden denemenizdir.
- Giden ara sunucuyu denetlemek, kümenin çalışma alanına bağlanadığından emin olmak için Gerekli ağ trafiğini yapılandır'ı izleyebilirsiniz.
- Çalışma alanı uç noktası URL'si, kümedeki çevrimiçi uç nokta CRD'sinde bulunabilir.
Çalışma alanınız genel ağ erişimini devre dışı bırakmış özel bir çalışma alanıysa Kubernetes kümesi yalnızca özel bağlantı üzerinden bu özel çalışma alanıyla iletişim kurmalıdır.
- Aks kümesinin kendisi genel veya özel olsa da özel çalışma alanına erişemiyorsa, çalışma alanı erişiminin genel erişime izin verilip verilmediğini de kontrol edebilirsiniz.
- Daha fazla bilgi için Bkz. Güvenli Azure Kubernetes Service çıkarım ortamı
HATA: ACRAuthenticationChallengeFailed
Bu hatanın nedeni Kubernetes kümesinin kimlik doğrulaması sınaması yapmak için çalışma alanının ACR hizmetine ulaşamamadır. Ağınızı, özellikle de ACR genel ağ erişimini denetleyin ve yeniden deneyin.
Ağı denetlemek için GetAADTokenFailed içindeki sorun giderme adımlarını izleyebilirsiniz.
HATA: ACRTokenExchangeFailed
Bu hatanın nedeni, Azure AD belirteci henüz yetkilendirilmediğinden Kubernetes kümesi exchange ACR belirtecinin başarısız olmasıdır. Rol ataması biraz zaman aldığından bir dakika bekleyip yeniden deneyebilirsiniz.
Bu hata aynı zamanda ACR hizmetine o anda çok fazla istek yapılmasından kaynaklanıyor olabilir, geçici bir hata olmalıdır, daha sonra yeniden deneyebilirsiniz.
HATA: KubernetesUnaccessible
Kubernetes modeli dağıtımları sırasında aşağıdaki hatayı alabilirsiniz:
{"code":"BadRequest","statusCode":400,"message":"The request is invalid.","details":[{"code":"KubernetesUnaccessible","message":"Kubernetes error: AuthenticationException. Reason: InvalidCertificate"}],...}
Bu hatayı azaltmak için şunları yapabilirsiniz:
- Küme için AKS sertifikasını döndürün. Daha fazla bilgi için bkz . Azure Kubernetes Service'te (AKS) Sertifika Döndürme.
- Yeni sertifika 5 saat sonra olarak güncelleştirilmelidir, böylece 5 saat bekleyip yeniden dağıtabilirsiniz.
HATA: ImagePullLoopBackOff
Kubernetes çevrimiçi dağıtımlarını oluştururken/güncelleştirirken bu hatayla karşılaşabilmenizin nedeni, görüntüleri kapsayıcı kayıt defterinden indirememeniz ve görüntülerin çekme hatasına neden olmasıdır.
Bu durumda, kümenin kapsayıcı kayıt defterinden görüntü çekip çekemediğini küme ağ ilkesini ve çalışma alanı kapsayıcı kayıt defterini de kontrol edebilirsiniz.
HATA: DeploymentCrashLoopBackOff
Kubernetes çevrimiçi dağıtımlarını oluştururken/güncelleştirirken bu hatayla karşılaşabilirsiniz. Kullanıcı kapsayıcısı başlatılırken kilitlendi. Bu hatanın iki olası nedeni vardır:
- Kullanıcı betiğinde
score.py
söz dizimi hatası veya içeri aktarma hatası var, ardından başlatma sırasında özel durumlar oluşuyor. - Veya dağıtım podunun sınırından daha fazla belleğe ihtiyacı vardır.
Bu hatayı azaltmak için, önce dağıtım günlüklerini kullanıcı betiklerindeki özel durumlar için de kontrol edebilirsiniz. Hata devam ederse kaynakları/örnek türü bellek sınırını genişletmeyi deneyin.
HATA: KubernetesCrashLoopBackOff
Aşağıdaki liste, Kubernetes çevrimiçi uç noktalarını/dağıtımlarını oluştururken/güncelleştirirken bu hatayla karşılaşabileceğiniz nedenlerden bazılarıdır:
- CrashLoopBackoff durumunda takılmış bir veya daha fazla pod, dağıtım günlüğünün var olup olmadığını denetleyebilir ve günlükte hata iletileri olup olmadığını kontrol edebilirsiniz.
- 'de
score.py
bir hata var ve puan kodunuzu açtığınızda kapsayıcı kilitlendi, HATA: ResourceNotReady bölümünü izleyebilirsiniz. - Puanlama işleminizin dağıtım yapılandırma sınırınızın yetersiz olduğu daha fazla belleğe ihtiyacı var. Dağıtımı daha büyük bir bellek sınırıyla güncelleştirmeyi deneyebilirsiniz.
HATA: NamespaceNotFound
Kubernetes çevrimiçi uç noktalarını oluştururken/güncelleştirirken bu hatayla karşılaşabilirsiniz çünkü kullandığınız Kubernetes işlem ad alanı kümenizde kullanılamaz.
Çalışma alanı portalınızda Kubernetes işlemini ve Kubernetes kümenizdeki ad alanını denetleyebilirsiniz. Ad alanı kullanılamıyorsa, eski işlemden ayrılabilir ve kümenizde zaten var olan bir ad alanı belirterek yeni bir tane oluşturmak için yeniden ekleyebilirsiniz.
HATA: UserScriptInitFailed
Kubernetes çevrimiçi dağıtımlarını oluştururken/güncelleştirirken bu hatayla karşılaşabilirsiniz çünkü karşıya yüklenen score.py
dosyanızdaki init işlevi özel durum oluşturdu.
Dağıtım günlüklerini denetledikten sonra özel durum iletisini ayrıntılı olarak görebilir ve özel durumu düzeltebilirsiniz.
HATA: UserScriptImportError
Kubernetes çevrimiçi dağıtımlarını oluştururken/güncelleştirirken bu hatayla karşılaşabilirsiniz. Bunun nedeni, karşıya yüklediğiniz dosyanın kullanılamayan paketleri içeri aktarmasıdır score.py
.
Dağıtım günlüklerini denetledikten sonra özel durum iletisini ayrıntılı olarak görebilir ve özel durumu düzeltebilirsiniz.
HATA: UserScriptFunctionNotFound
Kubernetes çevrimiçi dağıtımlarını oluştururken/güncelleştirirken bu hatayla karşılaşabilirsiniz çünkü score.py
karşıya yüklediğiniz dosyanın veya run()
adlı init()
bir işlevi yoktur. Kodunuzu denetleyebilir ve işlevi ekleyebilirsiniz.
HATA: EndpointNotFound
Kubernetes çevrimiçi dağıtımlarını oluştururken/güncelleştirirken bu hatayla karşılaşabilmenizin nedeni, sistemin kümedeki dağıtım için uç nokta kaynağını bulamıyor olmasıdır. Dağıtımı mevcut bir uç noktada veya kümenizde önce bu uç noktayı oluşturmanız gerekir.
HATA: EndpointAlreadyExists
Kubernetes çevrimiçi uç noktası oluştururken bu hatayla karşılaşabilirsiniz çünkü oluşturma uç noktası kümenizde zaten var.
Uç nokta adı çalışma alanı ve küme başına benzersiz olmalıdır, bu nedenle bu durumda başka bir adla uç nokta oluşturmanız gerekir.
HATA: ScoringFeUnhealthy
Kubernetes çevrimiçi uç noktasını/dağıtımını oluştururken/güncelleştirirken bu hatayla karşılaşabilirsiniz çünkü kümede çalışan sistem hizmeti olan Azureml-fe bulunamadı veya iyi durumda değil.
Bu sorunu gidermek için kümenizdeki Azure Machine Learning uzantısını yeniden yükleyebilir veya güncelleştirebilirsiniz.
HATA: ValidateScoringFailed
Kubernetes çevrimiçi dağıtımlarını oluştururken/güncelleştirirken bu hatayla karşılaşabilirsiniz çünkü model dağıtımı işlenirken puanlama isteği URL'si doğrulaması başarısız oldu.
Bu durumda, önce uç nokta URL'sini denetledikten sonra dağıtımı yeniden dağıtmayı deneyebilirsiniz.
HATA: InvalidDeploymentSpec
Kubernetes çevrimiçi dağıtımlarını oluştururken/güncelleştirirken bu hatayla karşılaşabilirsiniz çünkü dağıtım belirtimi geçersizdir.
Bu durumda, hata iletisini de kontrol edebilirsiniz.
- geçerli olduğundan emin
instance count
olun. - Otomatik ölçeklendirmeyi etkinleştirdiyseniz ve
maximum instance count
öğesininminimum instance count
her ikisinin de geçerli olduğundan emin olun.
HATA: PodUnschedulable
Aşağıdaki liste, Kubernetes çevrimiçi uç noktalarını/dağıtımlarını oluştururken/güncelleştirirken bu hatayla karşılaşabileceğiniz nedenlerden bazılarıdır:
- Kümenizdeki kaynakların yetersiz olması nedeniyle düğümlere pod zamanlanamıyor.
- Düğüm eşleştirme düğüm benzitesi/seçicisi yok.
Bu hatayı azaltmak için şu adımları izleyebilirsiniz:
node selector
Kullandığınız tanımıinstance type
venode label
küme düğümlerinizin yapılandırmasını denetleyin.- AKS kümesinin düğüm SKU boyutunu veya Arc-Kubernetes kümesinin düğüm kaynağını denetleyin
instance type
.- Kümenin kaynağı yetersizse, örnek türü kaynak gereksinimini azaltabilir veya daha küçük kaynak gerektiren başka bir örnek türü kullanabilirsiniz.
- Kümenin dağıtım gereksinimini karşılayacak başka kaynağı yoksa, kaynakları serbest bırakmak için bazı dağıtımı silin.
HATA: PodOutOfMemory
Çevrimiçi dağıtımı oluştururken/güncelleştirirken bu hatayla karşılaşabilirsiniz. Dağıtım için verdiğiniz bellek sınırı yetersizdir. Bu hatayı azaltmak için bellek sınırını daha büyük bir değere ayarlayabilir veya daha büyük bir örnek türü kullanabilirsiniz.
HATA: InferencingClientCallFailed
Kubernetes çevrimiçi uç noktalarını/dağıtımlarını oluştururken/güncelleştirirken bu hatayla karşılaşabilmenizin nedeni, Kubernetes kümesinin k8s uzantısının bağlanamaz olmasıdır.
Bu durumda, işlemlerinizi ayırıp yeniden ekleyebilirsiniz .
Not
Yeniden eklemeyle ilgili hataları gidermek için lütfen daha önce ayrılmış işlemle aynı yapılandırmayla (aynı işlem adı ve ad alanı gibi) yeniden bağlanmayı garanti edin, aksi takdirde başka hatalarla karşılaşabilirsiniz.
Hala çalışmıyorsa, kümeye erişebilen yöneticiden geçiş kubectl get po -n azureml
sunucusu podlarının çalışıp çalışmadığını denetlemesini isteyebilirsiniz.
Otomatik ölçeklendirme sorunları
Otomatik ölçeklendirmeyle ilgili sorun yaşıyorsanız bkz . Azure otomatik ölçeklendirme sorunlarını giderme.
Kubernetes çevrimiçi uç noktası için, Kubernetes kümesindeki tüm model dağıtımları için otomatik ölçeklendirmeyi işleyen bir ön uç bileşeni olan Azure Machine Learning çıkarım yönlendiricisi vardır. Kubernetes çıkarım yönlendirmesinin otomatik ölçeklendirmesi bölümünde daha fazla bilgi bulabilirsiniz
Yaygın model tüketimi hataları
Aşağıdaki liste, uç nokta invoke
işlem durumundan kaynaklanan yaygın model tüketimi hatalarının listesidir.
Bant genişliği sınırı sorunları
Yönetilen çevrimiçi uç noktaların her uç nokta için bant genişliği sınırları vardır. Sınır yapılandırmasını çevrimiçi uç noktaların sınırları içinde bulabilirsiniz. Bant genişliği kullanımınız sınırı aşarsa isteğiniz gecikir. Bant genişliği gecikmesini izlemek için:
- Geçerli bant genişliği kullanımını anlamak için "Ağ baytları" ölçümünü kullanın. Daha fazla bilgi için bkz . Yönetilen çevrimiçi uç noktaları izleme.
- Bant genişliği sınırı zorlanırsa döndürülen iki yanıt fragmanı vardır:
ms-azureml-bandwidth-request-delay-ms
: istek akışı aktarımı için geçen milisaniye cinsinden gecikme süresi.ms-azureml-bandwidth-response-delay-ms
: yanıt akışı aktarımı için geçen milisaniye cinsinden gecikme süresi.
HTTP durum kodu
REST istekleriyle çevrimiçi uç noktalara eriştiğiniz zaman, döndürülen durum kodları HTTP durum kodları standartlarına uyar. Bunlar, uç nokta çağırma ve tahmin hatalarının HTTP durum kodlarıyla eşlenme şekliyle ilgili ayrıntılardır.
Yönetilen çevrimiçi uç noktalar için yaygın hata kodları
Aşağıdaki tabloda REST istekleriyle yönetilen çevrimiçi uç noktalar kullanılırken sık karşılaşılan hata kodları yer alır:
Durum kodu | Neden tümceciği | Bu kod neden döndürülebilir? |
---|---|---|
200 | Tamam | Modeliniz, gecikme süreniz içinde başarıyla yürütüldü. |
Kategori 401 | Yetkisiz | puan gibi istenen eylemi gerçekleştirme izniniz yok veya belirtecinizin süresi dolmuş veya yanlış biçimde. Daha fazla bilgi için bkz . uç nokta kimlik doğrulaması kavramı ve uç nokta için kimlik doğrulaması yapma. |
404 | Bulunamadı | Uç noktanın pozitif ağırlıklı geçerli bir dağıtımı yoktur. |
408 | İstek zaman aşımı | Model yürütme, model dağıtım yapılandırmanızın altında request_settings sağlanan request_timeout_ms zaman aşımından daha uzun sürdü. |
424 | Model Hatası | Model kapsayıcınız 200 olmayan bir yanıt döndürürse Azure 424 döndürür. Model Status Code Uç noktanızın Azure İzleyici Ölçüm Gezgini'nin ölçüm altındaki Requests Per Minute boyutu denetleyin. Veya yanıt üst bilgilerini ms-azureml-model-error-statuscode ve ms-azureml-model-error-reason daha fazla bilgi için denetleyin. 424 canlılık veya hazır olma yoklaması başarısız olursa, yoklama ayarlarını kapsayıcının canlılığını veya hazır olma süresini daha uzun süre tanıyacak şekilde ayarlamayı göz önünde bulundurun. |
Kategori 429 | Çok fazla bekleyen istek var | Modeliniz şu anda işleyebileceğinden daha fazla istek alıyor. Azure Machine Learning, sorunsuz çalışma garantisi vermek için herhangi bir anda paralel olarak en fazla 2 * max_concurrent_requests_per_instance * instance_count requests işlemeye izin veren bir sistem uygulamıştır. Bu üst sınırı aşan diğer istekler reddedilir. Bu ayarları doğrulamak ve ayarlamak için request_settings ve scale_settings bölümlerinin altında model dağıtım yapılandırmanızı gözden geçirebilirsiniz. Ayrıca, request Ayarlar için YAML tanımında açıklandığı gibi ortam değişkeninin WORKER_COUNT doğru şekilde geçirildiğinden emin olmak önemlidir. Otomatik ölçeklendirme kullanıyorsanız ve bu hatayı alıyorsanız, modeliniz istekleri sistemin ölçeğini artıramaya kıyasla daha hızlı alıyor demektir. Bu durumda, sisteme ayarlanması gereken zamanı vermek için istekleri üstel geri alma ile yeniden göndermeyi göz önünde bulundurun. Örnek sayısını hesaplamak için kod kullanarak örnek sayısını da artırabilirsiniz. Otomatik ölçeklendirmeyi ayarlamayla birlikte bu adımlar, modelinizin istek akışını işlemeye hazır olduğundan emin olunmasını sağlar. |
Kategori 429 | Hız sınırlı | Saniye başına istek sayısı yönetilen çevrimiçi uç noktaların sınırlarına ulaştı. |
500 | İç sunucu hatası | Azure Machine Learning tarafından sağlanan altyapı başarısız oluyor. |
Kubernetes çevrimiçi uç noktaları için yaygın hata kodları
Aşağıdaki tabloda, REST istekleriyle Kubernetes çevrimiçi uç noktaları kullanılırken sık karşılaşılan hata kodları yer alır:
Durum kodu | Neden tümceciği | Bu kod neden döndürülebilir? |
---|---|---|
409 | Çakışma hatası | Bir işlem zaten devam ederken, aynı çevrimiçi uç noktadaki tüm yeni işlemler 409 çakışma hatasıyla yanıt verir. Örneğin, çevrimiçi uç nokta oluşturma veya güncelleştirme işlemi sürüyorsa ve yeni bir Delete işlemi tetiklerseniz hata oluşturur. |
502 | score.py dosyasının run() yönteminde bir özel durum oluşturdu veya kilitlendi |
içinde score.py bir hata olduğunda, örneğin conda ortamında içeri aktarılan paket yok, söz dizimi hatası veya yöntemde init() bir hata var. Dosyada hata ayıklamak için burayı izleyebilirsiniz. |
503 | Saniye başına isteklerde büyük ani artışlar alma | Otomatik ölçeklendirici, yükteki aşamalı değişiklikleri işlemek için tasarlanmıştır. saniye başına isteklerde büyük ani artışlar alırsanız, istemciler 503 HTTP durum kodu alabilir. Otomatik ölçeklendirici hızlı tepki vermesine rağmen, AKS'nin daha fazla kapsayıcı oluşturması önemli miktarda zaman alır. 503 durum kodunu önlemek için burayı takip edebilirsiniz. |
504 | İstek zaman aşımına uğradı | 504 durum kodu, isteğin zaman aşımına uğradı olduğunu gösterir. Varsayılan zaman aşımı ayarı 5 saniyedir. Gereksiz çağrıları kaldırmak için score.py değiştirerek zaman aşımını artırabilir veya uç noktayı hızlandırmayı deneyebilirsiniz. Bu eylemler sorunu çözmezse, score.py dosyasında hata ayıklamak için burayı izleyebilirsiniz. Kod yanıt vermeyen bir durumda veya sonsuz bir döngüde olabilir. |
500 | İç sunucu hatası | Azure Machine Learning tarafından sağlanan altyapı başarısız oluyor. |
503 durum kodlarını önleme
Kubernetes çevrimiçi dağıtımları, Azure Machine Learning çıkarım yönlendiricisinde bulabileceğiniz ek yükü desteklemek için çoğaltmaların eklenmesini sağlayan otomatik ölçeklendirmeyi destekler. Ölçeği artırma/azaltma kararları geçerli kapsayıcı çoğaltmalarının kullanımına bağlıdır.
503 durum kodunu önlemeye yardımcı olabilecek iki şey vardır:
İpucu
Bu iki yaklaşım tek tek veya birlikte kullanılabilir.
Otomatik ölçeklendirmenin yeni çoğaltmalar oluşturduğu kullanım düzeyini değiştirin. değerini daha düşük bir değere ayarlayarak kullanım hedefini
autoscale_target_utilization
ayarlayabilirsiniz.Önemli
Bu değişiklik çoğaltmaların daha hızlı oluşturulmasına neden olmaz. Bunun yerine, daha düşük bir kullanım eşiğinde oluşturulurlar. Hizmet %70 kullanılana kadar beklemek yerine değerin %30 olarak değiştirilmesi, %30 kullanım gerçekleştiğinde çoğaltmaların oluşturulmasına neden olur.
Kubernetes çevrimiçi uç noktası zaten geçerli maksimum çoğaltmaları kullanıyorsa ve hala 503 durum kodu görüyorsanız, maksimum çoğaltma sayısını artırmak için değeri artırın
autoscale_max_replicas
.En az çoğaltma sayısını değiştirin. En düşük çoğaltmaların artırılması, gelen ani artışları işlemek için daha büyük bir havuz sağlar.
Örnek sayısını artırmak için bu kodları izleyerek gerekli çoğaltmaları hesaplayabilirsiniz.
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)
Not
Yeni minimum çoğaltmaların işleyebileceğinden daha büyük istek artışları alırsanız yeniden 503 alabilirsiniz. Örneğin uç noktanıza gelen trafik arttıkça en düşük çoğaltmaları artırmanız gerekebilir.
Örnek sayısını hesaplama
Örnek sayısını artırmak için aşağıdaki kodu kullanarak gerekli çoğaltmaları hesaplayabilirsiniz:
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)
CORS ilkesi tarafından engellendi
Çevrimiçi uç noktalar (v2) şu anda Çıkış Noktaları Arası Kaynak Paylaşımı'nı (CORS) yerel olarak desteklememektedir. Web uygulamanız CORS denetim öncesi isteklerini düzgün işlemeden uç noktayı çağırmaya çalışırsa aşağıdaki hata iletisini görebilirsiniz:
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.
CORS denetim öncesi isteklerini işlemek için ara katman olarak Azure İşlevleri, Azure Uygulaması lication Gateway veya herhangi bir hizmeti kullanmanızı öneririz.
Yaygın ağ yalıtımı sorunları
Çevrimiçi uç nokta oluşturma işlemi V1LegacyMode == true iletisiyle başarısız oluyor
Azure Machine Learning çalışma alanı için v1_legacy_mode
yapılandırılabilir ve bu da v2 API'lerini devre dışı bırakır. Yönetilen çevrimiçi uç noktalar v2 API platformunun bir özelliğidir ve çalışma alanı için etkinleştirilirse v1_legacy_mode
çalışmaz.
Önemli
'yi devre dışı bırakmadan v1_legacy_mode
önce ağ güvenlik ekibinize danışın. Ağ güvenlik ekibiniz tarafından bir nedenle etkinleştirilmiş olabilir.
özelliğini devre dışı bırakma v1_legacy_mode
hakkında bilgi için bkz . v2 ile ağ yalıtımı.
Anahtar tabanlı kimlik doğrulamasıyla çevrimiçi uç nokta oluşturma işlemi başarısız oluyor
Çalışma alanınız için Azure Key Vault'un ağ kurallarını listelemek için aşağıdaki komutu kullanın. değerini anahtar kasanızın adıyla değiştirin <keyvault-name>
:
az keyvault network-rule list -n <keyvault-name>
Bu komutun yanıtı aşağıdaki JSON belgesine benzer:
{
"bypass": "AzureServices",
"defaultAction": "Deny",
"ipRules": [],
"virtualNetworkRules": []
}
değeri bypass
değilseAzureServices
, anahtarı olarak ayarlamak AzureServices
için Anahtar kasası ağ ayarlarını yapılandırma bölümünde yer alan yönergeleri kullanın.
Çevrimiçi dağıtımlar görüntü indirme hatasıyla başarısız oluyor
Not
Bu sorun, Azure Machine Learning'in bir uç nokta altında her dağıtım için yönetilen bir sanal ağ oluşturduğu yönetilen çevrimiçi uç noktalar için eski ağ yalıtım yöntemini kullandığınızda geçerlidir.
Bayrağın
egress-public-network-access
dağıtım için devre dışı bırakılıp bırakılmadiğini denetleyin. Bu bayrak etkinse ve kapsayıcı kayıt defterinin görünürlüğü özelse, bu hata beklenir.Özel uç nokta bağlantısının durumunu denetlemek için aşağıdaki komutu kullanın. değerini, çalışma alanınızın Azure Container Registry adıyla değiştirin
<registry-name>
:az acr private-endpoint-connection list -r <registry-name> --query "[?privateLinkServiceConnectionState.description=='Egress for Microsoft.MachineLearningServices/workspaces/onlineEndpoints'].{Name:name, status:privateLinkServiceConnectionState.status}"
Yanıt belgesinde alanın olarak
Approved
ayarlandığınıstatus
doğrulayın. Onaylanmamışsa, onaylamak için aşağıdaki komutu kullanın. değerini önceki komuttan döndürülen adla değiştirin<private-endpoint-name>
:az network private-endpoint-connection approve -n <private-endpoint-name>
Puanlama uç noktası çözümlenemiyor
Puanlama isteğini veren istemcinin Azure Machine Learning çalışma alanına erişebilen bir sanal ağ olduğunu doğrulayın.
nslookup
IP adresi bilgilerini almak için uç nokta ana bilgisayar adında komutunu kullanın:nslookup endpointname.westcentralus.inference.ml.azure.com
Yanıt bir adres içeriyor. Bu adres sanal ağ tarafından sağlanan aralıkta olmalıdır
Not
Kubernetes çevrimiçi uç noktası için uç nokta ana bilgisayar adı, Kubernetes kümenizde belirtilen CName (etki alanı adı) olmalıdır. Bu bir HTTP uç noktasıysa, IP adresi doğrudan Studio kullanıcı arabiriminde alabileceğiniz uç nokta URI'sinde yer alır. Uç noktanın IP adresini almanın diğer yolları Güvenli Kubernetes çevrimiçi uç noktasında bulunabilir.
Konak adı komutuyla
nslookup
çözümlenmezse:Yönetilen çevrimiçi uç nokta için
Sanal ağ için özel DNS bölgesinde bir A kaydı olup olmadığını denetleyin.
Kayıtları denetlemek için aşağıdaki komutu kullanın:
az network private-dns record-set list -z privatelink.api.azureml.ms -o tsv --query [].name
Sonuçlara benzer
*.<GUID>.inference.<region>
bir girdi bulunmalıdır.Çıkarım değeri döndürülmezse, çalışma alanının özel uç noktasını silin ve yeniden oluşturun. Daha fazla bilgi için bkz . Özel uç nokta yapılandırma.
Özel uç nokta içeren çalışma alanı özel dns kullanılarak ayarlanmışsa Çalışma alanınızı özel dns sunucusuyla kullanma, çözümlemenin özel DNS'den doğru çalışıp çalışmadığını doğrulamak için aşağıdaki komutu kullanın.
dig endpointname.westcentralus.inference.ml.azure.com
Kubernetes çevrimiçi uç noktası için
Kubernetes kümesindeki DNS yapılandırmasını denetleyin.
Ayrıca, azureml-fe'nin beklendiği gibi çalışıp çalışmadığını denetleyebilirsiniz, aşağıdaki komutu kullanın:
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"
HTTP için
curl https://localhost:<port>/api/v1/endpoint/<endpoint-name>/swagger.json "Swagger not found"
Curl HTTP'leri başarısız olursa (örneğin, zaman aşımı) ancak HTTP çalışıyorsa lütfen sertifikanın geçerli olup olmadığını denetleyin.
Bu, A kaydına çözümlenemezse, çözümlemenin Azure DNS'den (168.63.129.16) çalışıp çalışmadığını doğrulayın.
dig @168.63.129.16 endpointname.westcentralus.inference.ml.azure.com
Bu başarılı olursa, özel DNS'de özel bağlantı için koşullu iletici sorunlarını giderebilirsiniz.
Çevrimiçi dağıtımlar puanlanamıyor
Dağıtımın başarıyla dağıtılıp dağıtılmadığını görmek için aşağıdaki komutu kullanın:
az ml online-deployment show -e <endpointname> -n <deploymentname> --query '{name:name,state:provisioning_state}'
Dağıtım başarıyla tamamlandıysa değeri
state
olurSucceeded
.Dağıtım başarılı olursa, trafiğin dağıtıma atandığını denetlemek için aşağıdaki komutu kullanın. değerini uç noktanızın adıyla değiştirin
<endpointname>
:az ml online-endpoint show -n <endpointname> --query traffic
İpucu
bu dağıtımı hedeflemek için isteğinizdeki üst bilgiyi kullanıyorsanız
azureml-model-deployment
bu adım gerekli değildir.Bu komuttan gelen yanıt, dağıtımlara atanan trafiğin yüzdesini listelemelidir.
Trafik atamaları (veya dağıtım üst bilgisi) doğru ayarlanmışsa, uç noktanın günlüklerini almak için aşağıdaki komutu kullanın. değerini uç noktanın adıyla ve
<deploymentname>
dağıtımıyla değiştirin<endpointname>
:az ml online-deployment get-logs -e <endpointname> -n <deploymentname>
Dağıtıma bir istek gönderdiğinizde puanlama kodunu çalıştırırken sorun olup olmadığını görmek için günlükleri inceleyin.
Çıkarım sunucusu sorunlarını giderme
Bu bölümde, Azure Machine Learning çıkarım HTTP sunucusu için temel sorun giderme ipuçları sağlıyoruz.
Temel adımlar
Sorun gidermenin temel adımları şunlardır:
- Python ortamınız için sürüm bilgilerini toplayın.
- Ortam dosyasında belirtilen azureml-inference-server-http python paketi sürümünün başlangıç günlüğünde görüntülenen AzureML Çıkarım HTTP sunucusu sürümüyle eşleştiğinden emin olun. Bazen Pip'in bağımlılık çözümleyicisi yüklenen paketlerin beklenmeyen sürümlerine yol açar.
- Ortamınızda Flask (ve veya bağımlılıkları) belirtirseniz, bunları kaldırın. Bağımlılıklar , ,
Jinja2
,itsdangerous
,Werkzeug
,MarkupSafe
veclick
bağımlılıklarıdırFlask
. Flask, sunucu paketinde bağımlılık olarak listelenir ve sunucumuzun yüklemesine izin vermek en iyisidir. Bu şekilde sunucu Flask'in yeni sürümlerini desteklediğinde bunları otomatik olarak alırsınız.
Sunucu sürümü
Sunucu paketi azureml-inference-server-http
PyPI'da yayımlanır. Değişiklik günlüğümüzü ve önceki tüm sürümleri PyPI sayfamızda bulabilirsiniz. Önceki bir sürümü kullanıyorsanız en son sürüme güncelleştirin.
- 0.4.x: ≤ ve içindeki eğitim görüntülerinde
20220601
azureml-defaults>=1.34,<=1.43
paketlenen sürüm.0.4.13
son kararlı sürümdür. sürümünden0.4.11
önce sunucuyu kullanıyorsanız, 'denjinja2
adMarkup
içeri aktaramama gibi Flask bağımlılık sorunlarını görebilirsiniz. Mümkünse veya0.8.x
sürümüne0.4.13
(en son sürüm) yükseltmeniz önerilir. - 0.6.x: Görüntülerin ≤ 20220516 çıkarıldığında önceden yüklenmiş olan sürüm. En son kararlı sürüm:
0.6.1
. - 0.7.x: Flask 2'yi destekleyen ilk sürüm. En son kararlı sürüm:
0.7.7
. - 0.8.x: Günlük biçimi değişti ve Python 3.6 desteği bırakıldı.
Paket bağımlılıkları
Sunucu azureml-inference-server-http
için en uygun paketler aşağıdaki paketlerdir:
- Şişe
- opencensus-ext-azure
- çıkarım şeması
Python ortamınızda belirttiyseniz azureml-defaults
paket azureml-inference-server-http
bağlıdır ve otomatik olarak yüklenir.
İpucu
Python SDK v1 kullanıyorsanız ve Python ortamınızda açıkça belirtmezseniz azureml-defaults
SDK paketi sizin için ekleyebilir. Ancak, SDK'nın açık olduğu sürüme kilitlenir. Örneğin, SDK sürümü ise 1.38.0
ortamın pip gereksinimlerine eklenir azureml-defaults==1.38.0
.
Sık sorulan sorular
1. Sunucu başlatma sırasında aşağıdaki hatayla karşılaştım:
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
Python ortamınızda Flask 2 yüklü ancak Flask 2'yi azureml-inference-server-http
desteklemeyen bir sürümünü çalıştırıyorsunuz. Flask 2 desteği, içinde azureml-inference-server-http>=0.7.0
de azureml-defaults>=1.44
bulunan öğesine eklenir.
Bu paketi bir AzureML docker görüntüsünde kullanmıyorsanız en son veya
azureml-defaults
sürümünüazureml-inference-server-http
kullanın.Bu paketi bir AzureML docker görüntüsüyle kullanıyorsanız Temmuz 2022'de veya sonrasında yerleşik bir görüntü kullandığınızdan emin olun. Görüntü sürümü kapsayıcı günlüklerinde kullanılabilir. Aşağıdakine benzer bir günlük bulabilmelisiniz:
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 |
Görüntünün derleme tarihi yukarıdaki örnekte
20220708
veya 8 Temmuz 2022'de yer alan "Gerçekleştirme Derlemesi"nin ardından görünür. Bu görüntü Flask 2 ile uyumludur. Kapsayıcı günlüğünüzde bunun gibi bir başlık görmüyorsanız, görüntünüz güncel değildir ve güncelleştirilmelidir. CUDA görüntüsü kullanıyorsanız ve daha yeni bir görüntü bulamıyorsanız, görüntünüzün AzureML Kapsayıcıları'nda kullanım dışı olup olmadığını denetleyin. Varsa, yenilerini bulabilmeniz gerekir.Sunucuyu çevrimiçi uç noktayla kullanıyorsanız, günlükleri Azure Machine Learning stüdyosu'deki çevrimiçi uç nokta sayfasındaki "Dağıtım günlükleri" altında da bulabilirsiniz. SDK v1 ile dağıtım yaparsanız ve dağıtım yapılandırmanızda açıkça bir görüntü belirtmezseniz, varsayılan olarak yerel SDK araç takımınızla eşleşen ve görüntünün en son sürümü olmayan bir
openmpi4.1.0-ubuntu20.04
sürümünü kullanırsınız. Örneğin, SDK 1.43 varsayılan olarak uyumsuz olan öğesini kullanıropenmpi4.1.0-ubuntu20.04:20220616
. Dağıtımınız için en son SDK'yi kullandığınızdan emin olun.Bir nedenle görüntüyü güncelleştiremiyorsanız, eski sürüm sunucusunu ile
Flask 1.0.x
yükleyecek olan veyaazureml-inference-server-http~=0.4.13
sabitleyerekazureml-defaults==1.43
geçici olarak sorundan kaçınabilirsiniz.
2. , , MarkupSafe
click
jinja2
veya ModuleNotFoundError
modüllerinde opencensus
veya başlatma sırasında aşağıdaki ileti gibi bir ImportError
veya ile karşılaştım:
ImportError: cannot import name 'Markup' from 'jinja2'
Sunucunun eski sürümleri (<= 0.4.10), Flask'in bağımlılığını uyumlu sürümlere sabitlemedi. Bu sorun, sunucunun en son sürümünde düzeltildi.