Çevrimiçi uç nokta 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)

Bu makalede, yaygın Azure Machine Learning çevrimiçi uç nokta dağıtımı ve puanlama sorunlarını giderme ve çözme adımları açıklanmaktadır.

Belge yapısı, sorun gidermeye yaklaşımınızı yansıtır:

  1. Modellerinizi buluta dağıtmadan önce test etmek ve hatalarını ayıklamak için yerel dağıtımı kullanın.
  2. Sorunları ayıklamaya yardımcı olması için kapsayıcı günlüklerini kullanın.
  3. 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ı puanladığınızda çağırma ve tahmin hatalarının HTTP durum kodlarıyla nasıl eşlenmesi açıklanmaktadır.

Önkoşullar

  • Azure Machine Learning çalışma alanı.
  • Azure CLI ve Azure Machine Learning CLI v2. CLI'yı (v2) yükleyin, ayarlayın ve kullanın.

İstek izleme

Desteklenen iki izleme üst bilgisi vardır:

  • x-request-id sunucu izleme için ayrılmıştır. Azure Machine Learning, geçerli bir GUID olduğundan emin olmak için bu üst bilgiyi geçersiz kılar. 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. Alternatif olarak, bölgenin adını ve uç nokta adını belirtin.

  • 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 eder ve en fazla 40 karaktere kadar kesilir.

Yerel olarak dağıtma

Yerel dağıtım, modeli yerel bir Docker ortamına dağıtma anlamına gelir. Yerel dağıtım, yerel uç noktanın oluşturulmasını, güncelleştirilmesini ve silinmesini destekler ve uç noktadan günlükleri çağırmanıza ve almanıza olanak tanır. 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.

Azure CLI veya Python SDK ile yerel olarak dağıtabilirsiniz. Azure Machine Learning stüdyosu yerel dağıtımı veya yerel uç noktaları desteklemez.

Yerel dağıtımı kullanmak için uygun komuta ekleyin --local .

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

Yerel dağıtım sırasında aşağıdaki adımlar gerçekleşir:

  1. Docker yeni bir kapsayıcı görüntüsü oluşturur veya yerel Docker önbelleğinden mevcut bir görüntüyü çeker. Docker, belirtim dosyasının ortam bölümüyle eşleşiyorsa mevcut bir görüntüyü kullanır.
  2. Docker, yeni kapsayıcıyı model ve kod dosyaları gibi bağlı yerel yapıtlarla başlatır.

Daha fazla bilgi için bkz . Yerel uç nokta kullanarak yerel olarak dağıtma ve hata ayıklama.

İpucu

Uç noktalarınızı yerel olarak test etmek ve hatalarını ayıklamak için Visual Studio Code kullanabilirsiniz. Daha fazla bilgi için bkz . Visual Studio Code'da çevrimiçi uç noktalarda yerel olarak hata ayıklama.

Kapsayıcı günlüklerini alma

Modelin dağıtıldığı sanal makineye (VM) doğrudan erişim alamazsınız, ancak VM üzerinde çalışan bazı kapsayıcılardan günlükleri 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 aşağıdaki kapsayıcı türlerinden alabilirsiniz:

  • Çıkarım sunucusu konsol günlüğü, puanlama betiği score.py kodunuzdan yazdırma ve günlüğe kaydetme işlevlerinin çıkışını içerir.
  • Depolama başlatıcı günlükleri, kod ve model verilerinin kapsayıcıya başarıyla indirilip indirilmediği hakkında bilgi içerir. Kapsayıcı, çıkarım sunucusu kapsayıcısı çalışmaya başlamadan önce çalışır.

Kubernetes çevrimiçi uç noktaları için yöneticiler modeli dağıttığınız kümeye doğrudan erişebilir ve Kubernetes'teki günlükleri kontrol edebilir. Örneğin:

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

Not

Python günlüğü kullanıyorsanız, iletilerin günlüklerde yayımlanması için gibi INFOdoğru günlük düzeyini kullandığınızdan emin olun.

Bkz. kapsayıcılardan günlük çıktısı

Bir kapsayıcıdan günlük çıktısını görmek için aşağıdaki komutu kullanın:

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

Or

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

Varsayılan olarak, günlükler çıkarım sunucusundan çekilir. geçirerek –-container storage-initializerdepolama başlatıcı kapsayıcısından günlükleri alabilirsiniz.

--workspace-name bu parametreleri aracılığıyla az configureayarlamadıysanız ve komutlarına ekleyin--resource-group. Bu parametreleri ayarlama hakkında bilgi edinmek veya şu anda değer ayarladıysanız aşağıdaki komutu çalıştırın:

az ml online-deployment get-logs -h

Daha fazla bilgi görmek için komutları ekleyin --help veya --debug ekleyin.

Sık karşılaşılan dağıtım hataları

Dağıtım işlemi durumu aşağıdaki yaygın dağıtım hatalarını bildirebilir:

Bir Kubernetes çevrimiçi dağıtımı oluşturuyor veya güncelleştiriyorsanız bkz . Kubernetes dağıtımlarına özgü yaygın hatalar.

HATA: ImageBuildFailure

Docker görüntü ortamı oluşturulurken bu hata döndürülür. Hata 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 bölümlerde yaygın görüntü derleme hatası senaryoları açıklanmaktadır:

Azure Container Registry yetkilendirme hatası

Geçerli kimlik bilgileriyle kapsayıcı kayıt defterine erişememenizi gösteren bir hata iletisi "container registry authorization failure" . Çalışma alanı kaynak anahtarlarının zaman uyumsuz hale getirilmesi bu hataya neden olabilir ve otomatik olarak eşitlenmesi biraz zaman alabilir. Ancak, az ml workspace sync-keys ile anahtar eşitlemesi 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ış ayarlanmışsa bu hatayla karşılaşabilir. Sanal ağın düzgün ayarlandığını doğrulayın.

Sanal ağ ile özel bir çalışma alanında ayarlı olmayan görüntü derleme işlem

Hata iletisinde belirtiliyorsa "failed to communicate with the workspace's container registry"ve bir sanal ağ kullanıyorsanız ve çalışma alanının kapsayıcı kayıt defteri özelse ve özel bir uç noktayla yapılandırılmışsa, Container Registry'nin sanal ağda görüntü oluşturmasına izin vermeniz gerekir.

Görüntü derleme zaman aşımına uğradı

Görüntü derleme zaman aşımları genellikle bir görüntünün dağıtım oluşturma zaman çerçevesi içinde derlemeyi tamamlayamayacak kadar büyük olmasından kaynaklanabilir. Görüntü derleme günlüklerinizi hatanın belirttiği konumda denetleyin. Günlükler, görüntü derlemesinin zaman aşımına uğradıklarında kesilir.

Bu sorunu çözmek için görüntünüzü ayrı olarak derleyin; böylece görüntünün yalnızca dağıtım oluşturma sırasında çekilmesi gerekir. ImageBuild zaman aşımlarınız varsa varsayılan yoklama ayarlarını da gözden geçirin.

Genel görüntü derleme hatası

Hata hakkında daha fazla bilgi için derleme günlüğünü denetleyin. Derleme günlüğünde belirgin bir hata bulunmazsa ve son satır ise Installing pip dependencies: ...working..., hataya bir bağımlılık neden olabilir. Conda dosyanıza sürüm bağımlılıklarını sabitlemek bu sorunu çözebilir.

Buluta dağıtmadan önce modellerinizi test etmek ve hatalarını ayıklamak için yerel olarak dağıtmayı deneyin.

HATA: OutOfQuota

Azure hizmetlerini kullanırken aşağıdaki kaynakların kotası tükenebilir:

Yalnızca Kubernetes çevrimiçi uç noktaları için Kubernetes kaynağının kotası da tükenebilir.

CPU kotası

Modeli dağıtmak için yeterli işlem kotanıza sahip olmanız gerekir. CPU kotası abonelik başına, çalışma alanı başına, SKU başına ve bölge başına kaç 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.

Silebileceğiniz kullanılmayan dağıtımlar olup olmadığını denetleyebilirsiniz veya kota artışı isteği gönderebilirsiniz.

Küme kotası

Hata, OutOfQuota yeterli Azure Machine Learning işlem kümesi kotanız olmadığında oluşur. Kota, Azure bulutunda CPU veya GPU düğümlerini dağıtmak için aynı anda kullanabileceğiniz abonelik başına toplam küme sayısını tanımlar.

Disk kotası

Hata, OutOfQuota modelin boyutu kullanılabilir disk alanından daha büyük olduğunda ve model indirilemediğinde oluşur. Daha fazla disk alanı olan bir SKU kullanmayı veya görüntü ve model boyutunu azaltmayı deneyin.

Bellek kotası

Hata, OutOfQuota modelin bellek ayak izi kullanılabilir bellekten daha büyük olduğunda oluşur. Daha fazla belleğe sahip bir SKU deneyin.

Rol atama kotası

Yönetilen çevrimiçi uç nokta oluşturduğunuzda, 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. Azure portalında Azure aboneliğiniz için Erişim denetimi'ni seçerek 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 deneyin. 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 OutOfQuota dağıtım için zamanlanamayan düğümler nedeniyle istenen CPU veya bellek sağlanamıyorsa hata oluşur. Örneğin, düğümler kordonlanmış veya başka bir şekilde kullanılamıyor olabilir.

Hata iletisi genellikle kümedeki kaynak yetersizlik durumunu gösterir, örneğin OutOfQuota: Kubernetes unschedulable. Details:0/1 nodes are available: 1 Too many pods.... Bu ileti, 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 azaltmaları deneyin:

  • Kubernetes kümesini tutan BT operatörleri, bazı kaynakları serbest bırakmak için daha fazla düğüm eklemeyi veya kümedeki kullanılmayan bazı podları temizlemeyi deneyebilir.

  • Modelleri dağıtan makine öğrenmesi mühendisleri, dağıtımın kaynak isteğini azaltmayı deneyebilir.

    • 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ı deneyin.
    • 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 operatörüne başvurun. Daha fazla bilgi için bkz . Örnek türlerini oluşturma ve 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 bir parçası olarak sağladığınız score.py dosyasını çalıştırmak için Azure, score.py gereken tüm kaynakları içeren bir kapsayıcı oluşturur. Ardından Azure Machine Learning bu kapsayıcıda puanlama betiğini çalıştırır. Kapsayıcınız başlatılamıyorsa puanlama gerçekleşemez. Kapsayıcı, destekleyebileceğinden daha fazla kaynak instance_type isteyebilir. Çevrimiçi dağıtımın instance_type güncelleştirmesini göz önünde bulundurun.

Hatanın tam nedenini almak için aşağıdaki eylemi gerçekleştirin.

Şu komutu çalıştırın:

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

HATA: BadArgument

Aşağıdaki nedenlerle yönetilen çevrimiçi uç noktaları veya Kubernetes çevrimiçi uç noktalarını kullandığınızda bu hatayı alabilirsiniz:

Aşağıdaki nedenlerle yalnızca Kubernetes çevrimiçi uç noktalarını kullanırken de bu hatayı alabilirsiniz:

Abonelik yok

Başvuruda bulunılan Azure aboneliği mevcut ve etkin olmalıdır. Azure girdiğiniz abonelik kimliğini bulamadıklarında bu hata oluşur. Hata, abonelik kimliğindeki bir yazım hatasından kaynaklanıyor olabilir. Abonelik kimliğinin doğru girilip girildiğini ve şu anda etkin olup olmadığını bir kez daha denetleyin.

Yetkilendirme hatası

Dağıtım oluştururken işlem kaynağını sağladıktan sonra Azure, çalışma alanı kapsayıcı kayıt defterinden kullanıcı kapsayıcı görüntüsünü çeker ve kullanıcı modelini ve kod yapıtlarını çalışma alanı depolama hesabından kullanıcı kapsayıcısına bağlar. Azure, depolama hesabına ve kapsayıcı kayıt defterine erişmek için yönetilen kimlikleri kullanır.

İlişkili uç noktayı kullanıcı tarafından atanan kimlikle oluşturursanız, kullanıcının yönetilen kimliğinin çalışma alanı depolama hesabında Depolama blobu veri okuyucu iznine ve çalışma alanı kapsayıcı kayıt defterinde AcrPull iznine sahip olması gerekir. Kullanıcı tarafından atanan kimliğinizin doğru izinlere sahip olduğundan emin olun.

Sistem tarafından atanan kimlikle ilişkili uç noktayı oluşturursanız, Azure rol tabanlı erişim denetimi (RBAC) izni otomatik olarak verilir ve başka izin gerekmez. 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 hatanın hatalarını ayıklamanıza yardımcı olmak için ilke atama adını ve ilke tanımını içerebilir. Şablon hatalarını önlemeye yönelik ipuçları için bkz . Azure ilke tanımı yapısı .

Kullanıcının kapsayıcı görüntüsü indirilemiyor

Kullanıcı kapsayıcısı bulunamayabilir. Daha fazla ayrıntı almak için kapsayıcı günlüklerini denetleyin.

Kapsayıcı görüntüsünün çalışma alanı kapsayıcı kayıt defterinde kullanılabilir olduğundan emin olun. Örneğin, görüntü ise testacr.azurecr.io/azureml/azureml_92a029f831ce58d2ed011c3c42d35acb:latestdepoyu denetlemek için aşağıdaki komutu kullanabilirsiniz:

az acr repository show-tags -n testacr --repository azureml/azureml_92a029f831ce58d2ed011c3c42d35acb --orderby time_desc --output table`

Kullanıcı modeli indirilemiyor

Kullanıcı modeli bulunamayabilir. 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 aşağıdaki eylemi gerçekleştirin. Model bilgilerini almak için sürümü veya etiketi belirtmeniz gerekir.

Şu komutu çalıştırın:

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

Ayrıca blobların çalışma alanı depolama hesabında mevcut olup olmadığını denetleyin. Örneğin, blob ise https://foobar.blob.core.windows.net/210212154504-1517266419/WebUpload/210212154504-1517266419/GaussianNB.pkl, blob'un mevcut olup olmadığını denetlemek için aşağıdaki komutu kullanabilirsiniz:

az storage blob exists --account-name <storage-account-name> --container-name <container-name> --name WebUpload/210212154504-1517266419/GaussianNB.pkl --subscription <sub-name>

Blob varsa, depolama başlatıcısından günlükleri almak için aşağıdaki 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öntemini kullanıyorsanız özel ağ özelliğini MLflow modeli biçimiyle kullanamazsınız. Kod içermeyen dağıtım yaklaşımıyla bir MLflow modeli dağıtmanız gerekiyorsa, çalışma alanıyla yönetilen bir 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 çalışma alanına eklediğinizde Azure Machine Learning varsayılan değerleri ayarlar. 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ç azureml-fe bileşeni, k8s uzantısı yüklemesi sırasında yüklenir ve gerektiğinde otomatik olarak ölçeklendirilir. Bu bileşenin kümede en az bir iyi durumda çoğaltması olmalıdır.

Bir Kubernetes çevrimiçi uç noktasını veya dağıtım oluşturma veya güncelleştirme isteğini tetiklediğinizde bileşen kullanılamıyorsa bu hatayı 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 bir parçası olarak sağladığınız score.py dosyasını çalıştırmak için Azure, score.py gereken tüm kaynakları içeren bir kapsayıcı oluşturur ve puanlama betiğini bu kapsayıcıda çalıştırır. Bu senaryoda hata, bu kapsayıcı çalışırken kilitlendiğinden puanlama gerçekleşemez. Bu hata aşağıdaki koşullardan biri altında oluşabilir:

  • score.py'da bir hata var. Aşağıdakiler gibi yaygın sorunları tanılamak için kullanın get-logs :

    • score.py conda ortamına dahil olmayan içeri aktarmaya çalışan bir paket
    • Söz dizimi hatası
    • yönteminde init() bir hata

    Günlük oluşturmazsa get-logs , bu genellikle kapsayıcının başlatılamadığını gösterir. Bu sorunun hatalarını ayıklamak için 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ürdüğünden hazır olma veya canlılık araştırması hata eşiğinin ötesinde başarısız olur. Bu durumda, kapsayıcıyı başlatmak için daha uzun bir süre tanıyacak şekilde yoklama ayarlarını yapın. Veya başlatmayı hızlandıran daha büyük bir desteklenen VM SKU'su deneyin.

  • Kapsayıcı ortamı kurulumunda eksik bağımlılık gibi bir hata var.

    Hatayı alırsanız TypeError: register() takes 3 positional arguments but 4 were given flask v2 ile azureml-inference-server-httparasındaki bağımlılığı denetleyin. Daha fazla bilgi için bkz . HTTP sunucusu sorunlarını giderme.

HATA: ResourceNotFound

Yönetilen çevrimiçi uç nokta veya Kubernetes çevrimiçi uç noktasını kullanırken aşağıdaki nedenlerle bu hatayı alabilirsiniz:

Resource Manager kaynak bulamıyor

Azure Resource Manager gerekli bir kaynağı bulamadıklarında bu hata oluşur. Örneğin, belirtilen yolda bir depolama hesabı bulunamazsa bu hatayı alabilirsiniz. Doğruluk ve yazım denetimi için yol veya ad belirtimlerini çift denetleyin. Daha fazla bilgi için bkz . Kaynak Bulunamadı hatalarını düzeltme.

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. Azure Machine Learning API'leri özel kayıt defteri kimlik bilgilerini kabul edebilir.

Bu hatayı azaltmak için kapsayıcı kayıt defterinin özel olmadığından emin olun veya aşağıdaki adımları izleyin:

  1. Çevrimiçi uç noktanızın sistem kimliğine özel kayıt defterinizin acrPull rolünü verin.
  2. Ortam tanımınızda, özel görüntünüzün adresini belirtin ve görüntüyü değiştirmeme veya oluşturmama yönergelerini verin.

Bu 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ılamasını kullanma.

HATA: WorkspaceManagedNetworkNotReady

Bu hata, çalışma alanı yönetilen sanal ağını etkinleştiren bir çevrimiçi dağıtım oluşturmaya çalıştığınızda oluşur, ancak yönetilen sanal ağ henüz sağlanmamıştır. Çevrimiçi dağıtım oluşturmadan önce çalışma alanı tarafından yönetilen sanal ağı sağlayın.

Çalışma alanı yönetilen sanal ağını el ile sağlamak için Yönetilen sanal ağı el ile sağlama başlığındaki yönergeleri izleyin. Daha sonra çevrimiçi dağıtımlar oluşturmaya başlayabilirsiniz. Daha fazla bilgi için bkz . Yönetilen çevrimiçi uç nokta ile ağ yalıtımı ve Ağ yalıtımı ile yönetilen çevrimiçi uç noktalarınızın güvenliğini sağlama.

HATA: operationCanceled

Yönetilen çevrimiçi uç nokta veya Kubernetes çevrimiçi uç noktasını kullanırken aşağıdaki nedenlerle bu hatayı alabilirsiniz:

İş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üşüke kadar yürütülür. Bu hata, daha yüksek önceliğe sahip başka bir işlem işleminizi geçersiz kıldığında oluşur. İşlemi yeniden denemek, işlemin iptal edilmeden gerçekleştirilebilmesine olanak tanıyabilir.

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ıyla karşılaşmamalarını sağlamak 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 etmeden önce kilidi aldığına dair onay bekliyor.

İlk istek sonrasında çok kısa bir süre içinde benzer bir istek göndermiş olabilirsiniz. Bir dakikaya kadar bekledikten sonra işlemi yeniden denemek, işlemin iptal edilmeden gerçekleştirilebilmesine olanak tanıyabilir.

HATA: SecretsInjectionError

Çevrimiçi dağıtım oluşturma sırasında gizli dizi alma ve ekleme, çalışma alanı bağlantılarından veya anahtar kasalarından gizli dizileri almak için çevrimiçi uç noktayla ilişkili kimliği kullanır. Bu hata aşağıdaki nedenlerden biri nedeniyle oluşur:

  • Dağıtım tanımı, gizli dizileri ortam değişkenlerine eşlenen başvurular olarak belirtse bile, uç nokta kimliğinin çalışma alanı bağlantılarından veya anahtar kasalarından gizli dizileri okumasına yönelik Azure RBAC izni yoktur. Değişikliklerin etkili olması rol ataması zaman alabilir.

  • Gizli dizi başvurularının biçimi geçersiz veya belirtilen gizli diziler çalışma alanı bağlantılarında 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

Bu hata, Azure Machine Learning hizmetinde düzeltilmesi gereken bir sorun olduğu anlamına gelir. Sorunu çözmek için gereken tüm bilgileri içeren bir müşteri destek bileti gönderin.

Kubernetes dağıtımlarına özgü yaygın hatalar

Kimlik ve kimlik doğrulama hataları:

Crashloopbackoff hataları:

Puanlama betiği hataları:

Diğer hatalar:

HATA: ACRSecretError

Kubernetes çevrimiçi dağıtımlarını oluşturduğunuzda veya güncelleştirdiğinizde, aşağıdaki nedenlerden biri nedeniyle bu hatayı alabilirsiniz:

  • Rol ataması tamamlanmadı. Birkaç saniye bekleyin ve yeniden deneyin.

  • Azure Arc özellikli Kubernetes kümesi veya AKS Azure Machine Learning uzantısı düzgün yüklenmemiş veya yapılandırılmamış. Azure Arc özellikli Kubernetes veya Azure Machine Learning uzantısı yapılandırmasını ve durumunu denetleyin.

  • Kubernetes kümesi yanlış ağ yapılandırmasına sahip. Ara sunucuyu, ağ ilkesini veya sertifikayı denetleyin.

  • Özel AKS kümenizde uygun uç noktalar yok. Aks sanal ağındaki Container Registry, depolama hesabı ve çalışma alanı için özel uç noktaları ayarladığınızdan emin olun.

  • Azure Machine Learning uzantı sürümünüz v1.1.25 veya daha düşük. Uzantı sürümünüzün v1.1.25 sürümünden büyük olduğundan emin olun.

HATA: TokenRefreshFailed

Kubernetes küme kimliği düzgün ayarlanmadığından, uzantı Azure'dan bir asıl kimlik bilgisi alamadığından bu hata oluşur. Azure Machine Learning uzantısını yeniden yükleyin ve yeniden deneyin.

HATA: GetAADTokenFailed

Kubernetes kümesi Microsoft Entra ID belirtecinin başarısız olması veya zaman aşımına uğramaması nedeniyle bu hata oluşur. Ağ erişiminizi denetleyin ve yeniden deneyin.

  • Giden ara sunucuyu denetlemek ve kümenin çalışma alanına bağlanadığından emin olmak için Kubernetes işlemini kullanma başlığındaki yönergeleri izleyin. Çalışma alanı uç noktası URL'sini kümedeki çevrimiçi uç nokta Özel Kaynak Tanımı'nda (CRD) bulabilirsiniz.

  • Çalışma alanının genel erişime izin verip vermeyeceğini denetleyin. AKS kümesinin genel mi yoksa özel mi olduğuna bakılmaksızın, özel bir çalışma alanı genel ağ erişimini devre dışı bırakırsa, Kubernetes kümesi bu çalışma alanıyla yalnızca özel bir bağlantı üzerinden iletişim kurabilir. Daha fazla bilgi için bkz . Güvenli AKS çıkarım ortamı nedir?

HATA: ACRAuthenticationChallengeFailed

Kubernetes kümesi bir kimlik doğrulama sınaması yapmak için çalışma alanı Container Registry hizmetine ulaşamadığından bu hata oluşur. Ağınızı, özellikle Container Registry genel ağ erişimini denetleyin ve yeniden deneyin. Ağı denetlemek için GetAADTokenFailed içindeki sorun giderme adımlarını izleyebilirsiniz.

HATA: ACRTokenExchangeFailed

Bu hata, Microsoft Entra Id belirtecinin henüz yetkilendirilememesi nedeniyle oluşur, bu nedenle Kubernetes kümesi exchange Container Registry belirteci başarısız olur. Rol ataması biraz zaman alır, bu nedenle bir dakika bekleyip yeniden deneyin.

Bu hata, Container Registry hizmetine yönelik çok fazla eşzamanlı istek nedeniyle de olabilir. Bu hata geçici olmalıdır ve daha sonra yeniden deneyebilirsiniz.

HATA: KubernetesUnaccessible

Kubernetes model 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 kümenin AKS sertifikasını döndürebilirsiniz. Yeni sertifika 5 saat sonra güncelleştirilmelidir, böylece 5 saat bekleyip yeniden dağıtabilirsiniz. Daha fazla bilgi için bkz . Azure Kubernetes Service'te (AKS) sertifika döndürme.

HATA: ImagePullLoopBackOff

Kapsayıcı kayıt defterinden görüntüleri indiremediğinizden Kubernetes çevrimiçi dağıtımlarını oluşturduğunuzda veya güncelleştirdiğinizde bu hatayı alabilirsiniz ve bu da görüntülerin çekme hatasına neden olur. Kümenin kapsayıcı kayıt defterinden görüntü çekip çekemediğini görmek için küme ağ ilkesini ve çalışma alanı kapsayıcı kayıt defterini denetleyin.

HATA: DeploymentCrashLoopBackOff

Kullanıcı kapsayıcısı başlatılırken kilitlendiğinden Kubernetes çevrimiçi dağıtımlarını oluştururken veya güncelleştirirken bu hatayı alabilirsiniz. Bu hatanın iki olası nedeni vardır:

  • Kullanıcı betiği score.py başlatma sırasında özel durumlar oluşturan bir söz dizimi hatası veya içeri aktarma hatası var.
  • 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üklerinde kullanıcı betiklerindeki özel durumları denetleyin. Hata devam ederse kaynak/örnek türü bellek sınırını genişletmeyi deneyin.

HATA: KubernetesCrashLoopBackOff

Aşağıdaki nedenlerden biri nedeniyle Kubernetes çevrimiçi uç noktalarını veya dağıtımlarını oluştururken veya güncelleştirirken bu hatayı alabilirsiniz:

  • Bir veya daha fazla pod CrashLoopBackoff durumunda takıldı. Dağıtım günlüğünün mevcut olup olmadığını ve günlükte hata iletileri olup olmadığını denetleyin.
  • score.py'de bir hata var ve puan kodunuzu başlatırken kapsayıcı kilitlendi. HATA: ResourceNotReady altındaki yönergeleri izleyin.
  • Puanlama işleminizin dağıtım yapılandırma sınırınızdan 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 işleminizin kullandığı ad alanı kümenizde kullanılamadığından, Kubernetes çevrimiçi uç noktalarını oluşturur veya güncelleştirirken bu hatayı alabilirsiniz. Çalışma alanı portalınızda Kubernetes işlemini denetleyin ve Kubernetes kümenizdeki ad alanını denetleyin. Ad alanı kullanılamıyorsa eski işlemden ayrılın ve kümenizde zaten var olan bir ad alanı belirterek yeni bir ad alanı oluşturmak için yeniden ekleyin.

HATA: UserScriptInitFailed

Karşıya yüklenen score.py dosyanızdaki işlev bir özel durum oluşturduğundan init Kubernetes çevrimiçi dağıtımlarını oluşturur veya güncelleştirirken bu hatayı alabilirsiniz. Özel durum iletisini ayrıntılı olarak görmek için dağıtım günlüklerini denetleyin ve özel durumu düzeltin.

HATA: UserScriptImportError

Karşıya yüklediğiniz score.py dosyası kullanılamayan paketleri içeri aktardığından Kubernetes çevrimiçi dağıtımlarını oluşturur veya güncelleştirirken bu hatayı alabilirsiniz. Özel durum iletisini ayrıntılı olarak görmek için dağıtım günlüklerini denetleyin ve özel durumu düzeltin.

HATA: UserScriptFunctionNotFound

Karşıya yüklediğiniz score.py dosyasının veya run()adlı init() bir işlevi olmadığından Kubernetes çevrimiçi dağıtımlarını oluşturur veya güncelleştirirken bu hatayı alabilirsiniz. Kodunuzu denetleyin ve işlevi ekleyin.

HATA: EndpointNotFound

Sistem kümede dağıtım için uç nokta kaynağını bulamadığından Kubernetes çevrimiçi dağıtımlarını oluşturur veya güncelleştirirken bu hatayı alabilirsiniz. Dağıtımı mevcut bir uç noktada oluşturun veya önce kümenizde uç noktayı oluşturun.

HATA: EndpointAlreadyExists

Uç nokta kümenizde zaten mevcut olduğundan bir Kubernetes çevrimiçi uç noktası oluşturduğunuzda bu hatayı alabilirsiniz. Uç nokta adı çalışma alanı ve küme başına benzersiz olmalıdır, bu nedenle başka bir adla bir uç nokta oluşturun.

HATA: ScoringFeUnhealthy

Kümede çalışan azureml-fe sistem hizmeti bulunamadığından veya iyi durumda olmadığından bir Kubernetes çevrimiçi uç noktası veya dağıtımı oluşturduğunuzda veya güncelleştirdiğinizde bu hatayı alabilirsiniz. Bu sorunu azaltmak için kümenizdeki Azure Machine Learning uzantısını yeniden yükleyin veya güncelleştirin.

HATA: ValidateScoringFailed

Modeli işlerken puanlama isteği URL'si doğrulaması başarısız olduğundan Kubernetes çevrimiçi dağıtımlarını oluşturur veya güncelleştirirken bu hatayı alabilirsiniz. Uç nokta URL'sini denetleyin ve yeniden dağıtmayı deneyin.

HATA: InvalidDeploymentSpec

Dağıtım belirtimi geçersiz olduğundan Kubernetes çevrimiçi dağıtımlarını oluşturur veya güncelleştirirken bu hatayı alabilirsiniz. geçerli olduğundan emin olmak instance count için hata iletisini denetleyin. Otomatik ölçeklendirmeyi etkinleştirdiyseniz ve maximum instance count değerlerinin minimum instance count her ikisinin de geçerli olduğundan emin olun.

HATA: PodUnschedulable

Aşağıdaki nedenlerden biri nedeniyle Kubernetes çevrimiçi uç noktalarını veya dağıtımlarını oluştururken veya güncelleştirirken bu hatayı alabilirsiniz:

  • Kümenizdeki kaynakların yetersiz olması nedeniyle sistem podu düğümlere zamanlayamaz.
  • Düğüm benzite seçicisi ile eşleşen düğüm yok.

Bu hatayı azaltmak için şu adımları izleyin:

  1. node selector Kullandığınız öğesinin instance_type tanımını ve node label küme düğümlerinizin yapılandırmasını denetleyin.
  2. AKS kümesinin instance_type ve düğüm SKU boyutunu veya Azure Arc özellikli Kubernetes kümesinin düğüm kaynağını denetleyin.
  3. Kümenin kaynağı yetersizse, örnek türü kaynak gereksinimini azaltın veya daha küçük kaynak gereksinimleri olan başka bir örnek türü kullanın.
  4. Kümede dağıtım gereksinimini karşılayacak başka kaynak yoksa, kaynakları serbest bırakmak için bazı dağıtımları silin.

HATA: PodOutOfMemory

Dağıtım için sağladığınız bellek sınırı yetersiz olduğundan, çevrimiçi dağıtım oluştururken veya güncelleştirirken bu hatayı alabilirsiniz. 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 kümesinin k8s uzantısı bağlanamadığından, Kubernetes çevrimiçi uç noktalarını veya dağıtımlarını oluştururken veya güncelleştirirken bu hatayı alabilirsiniz. Bu durumda, işlemlerinizi ayırıp yeniden takın.

Yeniden eklemeyle ilgili hataları gidermek için, diğer hataları önlemek için ayrılmış işlemle aynı yapılandırmayla (işlem adı ve ad alanı gibi) yeniden bağlanmayı unutmayın. Hala çalışmıyorsa, kümeye kubectl get po -n azureml erişebilen bir yöneticiden geçiş sunucusu podlarının çalışıp çalışmadığını denetlemesini isteyin.

Model tüketimi sorunları

Uç nokta invoke işlem durumundan kaynaklanan yaygın model tüketimi hataları bant genişliği sınırı sorunları, CORS ilkesi ve çeşitli HTTP durum kodlarıdır.

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 ağ baytları ölçümünü kullanarak geçerli bant genişliği kullanımını anlayın. Daha fazla bilgi için bkz . Yönetilen çevrimiçi uç noktaları izleme.

Bant genişliği sınırı zorlanırsa iki yanıt fragmanı döndürülür:

  • ms-azureml-bandwidth-request-delay-ms , istek akışı aktarımı için geçen milisaniye cinsinden gecikme süresidir.
  • ms-azureml-bandwidth-response-delay-msyanıt akışı aktarımı için geçen milisaniye cinsinden gecikme süresidir.

CORS ilkesi tarafından engellendi

V2 çevrimiçi uç noktaları, Çıkış Noktaları Arası Kaynak Paylaşımı'nı (CORS) yerel olarak desteklemez. Web uygulamanız CORS denetim öncesi isteklerini düzgün bir şekilde işlemeden uç noktayı çağırmaya çalışırsa aşağıdaki hata iletisini alabilirsiniz:

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 başka bir hizmeti kullanabilirsiniz.

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. Aşağıdaki bölümlerde uç nokta çağırma ve tahmin hatalarının HTTP durum kodlarıyla nasıl eşlenmeleri hakkında ayrıntılar sağlanır.

Yönetilen çevrimiçi uç noktalar için yaygın hata kodları

Rest istekleri yönetilen çevrimiçi uç noktaları tükettiğinde aşağıdaki tabloda yaygın hata kodları yer alır:

Durum kodu Neden Açıklama
200 Tamam Modeliniz gecikme sınırlarınızda 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. Yönetilen çevrimiçi uç noktalar için kimlik doğrulaması ve Çevrimiçi uç noktalar için istemcilerin kimliğini doğrulama.
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, kapsayıcı canlılığını veya hazır olma durumunu araştırmak için daha fazla zaman sağlamak için ProbeSettings'i ayarlamayı göz önünde bulundurun.
Kategori 429 Çok fazla bekleyen istek var Modeliniz şu anda işleyebileceğinden daha fazla istek alıyor. Sorunsuz bir çalışma sağlamak için Azure Machine Learning, herhangi bir zamanda paralel olarak işlemeye izin 2 * max_concurrent_requests_per_instance * instance_count requests verir. Bu üst sınırı aşan istekler reddedilir.

Bu ayarları doğrulamak ve ayarlamak için ve scale_settings bölümlerinin request_settings altında model dağıtım yapılandırmanızı gözden geçirebilirsiniz. Ayrıca, RequestSettings'te açıklandığı gibi ortam değişkeninin WORKER_COUNT doğru şekilde geçirildiğinden emin olun.

Otomatik ölçeklendirmeyi kullanırken bu hatayı alırsanız modeliniz istekleri sistemin ölçeğini artıramaya kıyasla daha hızlı alıyor demektir. Sisteme ayarlamak için zaman tanımak için üstel geri alma ile istekleri yeniden göndermeyi göz önünde bulundurun. Örnek sayısını hesaplamak için kod kullanarak örnek sayısını da artırabilirsiniz. Modelinizin istek akışını işlemeye hazır olduğundan emin olmak için bu adımları otomatik ölçeklendirmeyi ayarlamayla birleştirin.
Kategori 429 Hız sınırlı Saniye başına istek sayısı yönetilen çevrimiçi uç nokta 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 istekleri Kubernetes çevrimiçi uç noktalarını tükettiğinde sık karşılaşılan hata kodları yer alır:

Durum kodu Hata Açıklama
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 devam ederse, yeni bir silme işleminin tetiklenmesi hataya neden olur.
502 score.py dosyasının run() yönteminde özel durum veya kilitlenme score.py bir hata olduğunda( örneğin conda ortamında mevcut olmayan içeri aktarılmış bir paket, bir söz dizimi hatası veya yöntemde init() bir hata) hata olduğunda, bkz. Hata: Dosyada hata ayıklamak için ResourceNotReady.
503 saniye başına isteklerde büyük ani artışlar 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 HTTP durum kodu 503'e sahip olabilir. Otomatik ölçeklendirici hızlı tepki vermesine rağmen, AKS'nin daha fazla kapsayıcı oluşturması önemli miktarda zaman alır. Bkz . 503 durum kodu hatalarını önleme.
504 İstek zaman aşımına uğrar 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 düzeltmezse, kod yanıt vermeyen bir durumda veya sonsuz döngüde olabilir. score.py dosyasında hata ayıklamak için HATA: ResourceNotReady'yi izleyin.
500 İç sunucu hatası Azure Machine Learning tarafından sağlanan altyapı başarısız oluyor.

503 durum kodu hatalarını önleme

Kubernetes çevrimiçi dağıtımları, ek yükü desteklemek için çoğaltmaların eklenmesini sağlayan otomatik ölçeklendirmeyi destekler. Daha fazla bilgi için bkz . Azure Machine Learning çıkarım yönlendiricisi. Ölçeği artırma veya azaltma kararı, geçerli kapsayıcı çoğaltmalarının kullanımına bağlıdır.

İki eylem 503 durum kodu hatalarının önlenmesine yardımcı olabilir: Yeni çoğaltma oluşturmak için kullanım düzeyini değiştirme veya en az çoğaltma sayısını değiştirme. Bu yaklaşımları tek tek veya birlikte kullanabilirsiniz.

  • değerini daha düşük bir değere ayarlayarak otomatik ölçeklendirmenin yeni çoğaltmalar oluşturduğu kullanım hedefini autoscale_target_utilization değiştirin. Bu değişiklik çoğaltmaların daha hızlı oluşturulmasına neden olmaz, ancak daha düşük bir kullanım eşiğinde oluşturulur. Örneğin, değerin %30 olarak değiştirilmesi, hizmet %70 kullanılana kadar beklemek yerine %30 kullanım gerçekleştiğinde çoğaltmaların oluşturulmasına neden olur.

  • Gelen ani artışları işleyebilen daha büyük bir havuz sağlamak için en az çoğaltma sayısını değiştirin.

Örnek sayısını hesaplama

Örnek sayısını artırmak için gerekli çoğaltmaları aşağıdaki gibi 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.

Kubernetes çevrimiçi uç noktası zaten geçerli maksimum çoğaltmaları kullanıyorsa ve yine de 503 durum kodu alırsanız, maksimum çoğaltma sayısını artırmak için değeri artırın autoscale_max_replicas .

Ağ yalıtımı sorunları

Bu bölümde yaygın ağ yalıtımı sorunları hakkında bilgi sağlanır.

Çevrimiçi uç nokta oluşturma işlemi V1LegacyMode == true iletisiyle başarısız oluyor

v2 API'lerini devre dışı bırakmak üzere için v1_legacy_modeAzure Machine Learning çalışma alanını yapılandırabilirsiniz. Yönetilen çevrimiçi uç noktalar v2 API platformunun bir özelliğidir ve çalışma alanı için etkinleştirildiyse v1_legacy_mode çalışmaz.

öğesini devre dışı bırakmak v1_legacy_modeiçin bkz . v2 ile ağ yalıtımı.

Önemli

devre dışı bırakmadan v1_legacy_modeönce ağ güvenlik ekibinize danışın çünkü bir nedenle etkinleştirmiş olabilirler.

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 anahtar kasasının 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 koduna benzer:

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

değeri bypass değilseAzureServices, anahtarı olarak ayarlamak AzureServicesiç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.

  1. Bayrağın egress-public-network-access disabled dağıtım için olup olmadığını denetleyin. Bu bayrak etkinse ve kapsayıcı kayıt defterinin görünürlüğü özelse, bu hata beklenir.

  2. Ö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 için Azure kapsayıcı kayıt defterinin 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 kodunda alanın olarak Approvedayarlandığını status doğrulayın. Aksi takdirde, 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

  1. Puanlama isteğini veren istemcinin Azure Machine Learning çalışma alanına erişebilen bir sanal ağ olduğunu doğrulayın.

  2. nslookup IP adresi bilgilerini almak için uç nokta ana bilgisayar adında komutunu kullanın, örneğin:

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

    Yanıt, sanal ağ tarafından sağlanan aralıkta olması gereken bir adres içerir.

    Not

  3. nslookup Komut ana bilgisayar adını çözmezse aşağıdaki eylemleri gerçekleştirin:

Yönetilen çevrimiçi uç noktalar

  1. Sanal ağın özel Etki Alanı Adı Sunucusu (DNS) bölgesinde bir A kaydı olup olmadığını 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.

  2. Çı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.

  3. Özel uç nokta içeren çalışma alanı özel bir DNS sunucusu kullanıyorsa, özel DNS'den alınan çözümün doğru çalıştığını doğrulamak için aşağıdaki komutu çalıştırın.

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

Kubernetes çevrimiçi uç noktaları

  1. Kubernetes kümesindeki DNS yapılandırmasını denetleyin.

  2. Ayrıca aşağıdaki komutu kullanarak azureml-fe'nin beklendiği gibi çalışıp çalışmadığını denetleyin:

    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 aşağıdaki komutu kullanın:

     curl https://localhost:<port>/api/v1/endpoint/<endpoint-name>/swagger.json
    "Swagger not found"
    
  3. Curl HTTP'leri başarısız olursa veya zaman aşımına uğradıysa ancak HTTP çalışıyorsa sertifikanın geçerli olup olmadığını denetleyin.

  4. Yukarıdaki işlem 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
    
  5. Yukarıdaki komut başarılı olursa, özel DNS'de özel bağlantı için koşullu iletici sorunlarını giderin.

Çevrimiçi dağıtımlar puanlanamıyor

  1. Dağıtımın başarılı olup olmadığını görmek için aşağıdaki komutu çalıştırı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 olur Succeeded.

  2. 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
    

    Bu komuttan gelen yanıt, dağıtımlara atanan trafiğin yüzdesini listelemelidir.

    İpucu

    bu dağıtımı hedeflemek için isteğinizdeki üst bilgiyi kullanırsanız azureml-model-deployment bu adım gerekli değildir.

  3. 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> 
    
  4. 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 gözden geçirin.

Çıkarım sunucusu sorunları

Bu bölümde, Azure Machine Learning çıkarımı HTTP sunucusu için temel sorun giderme ipuçları sağlanır.

Yüklü paketleri denetleme

Yüklü paketlerle ilgili sorunları gidermek için bu adımları izleyin.

  1. Python ortamınız için yüklü paketler ve sürümler hakkında bilgi toplayın.

  2. Ortam dosyasında belirtilen Python paketi sürümünün başlangıç günlüğünde görüntülenen Azure Machine Learning çıkarım HTTP sunucusu sürümüyle eşleşeceğini azureml-inference-server-http onaylayın.

    Bazı durumlarda pip bağımlılık çözümleyicisi beklenmeyen paket sürümlerini yükler. Yüklü paketleri ve sürümleri düzeltmek için komutunu çalıştırmanız pip gerekebilir.

  3. Flask'i veya ortamınızdaki bağımlılıklarını belirtirseniz, bu öğeleri kaldırın.

    • Bağımlı paketler arasında flask, jinja2, itsdangerous, werkzeug, markupsafeve bulunur click.
    • flask sunucu paketinde bağımlılık olarak listelenir. En iyi yaklaşım, çıkarım sunucusunun paketi yüklemesine izin vermektir flask .
    • Çıkarım sunucusu Flask'in yeni sürümlerini destekleyecek şekilde yapılandırıldığında, sunucu paket güncelleştirmelerini kullanıma sunuldukça otomatik olarak alır.

Sunucu sürümünü denetleme

Sunucu azureml-inference-server-http paketi PyPI'da yayımlanır. PyPI sayfasında değişiklik günlüğü ve önceki tüm sürümler listelenir.

Önceki bir paket sürümünü kullanıyorsanız yapılandırmanızı en son sürüme güncelleştirin. Aşağıdaki tabloda kararlı sürümler, yaygın sorunlar ve önerilen ayarlamalar özetlenmektedir:

Paket sürümü Açıklama Sorun Çözüm
0.4.x tarihli 20220601 veya önceki eğitim görüntülerinde paketlenmiş ve azureml-defaults sürümleri .1.34 aracılığıyla paketlenmiştir 1.43. En son kararlı sürüm 0.4.13'dür. 0.4.11'den önceki sunucu sürümleri için gibi "can't import name Markup from jinja2"Flask bağımlılık sorunlarıyla karşılaşabilirsiniz. Mümkünse en son sürüm olan 0.4.13 veya 0.8.x sürümüne yükseltin.
0.6.x Eski ve önceki 20220516 görüntüleri çıkarsama önceden yüklenmiş. En son kararlı sürüm 0.6.1'dir. Yok Yok
0.7.x Flask 2'i destekler. En son kararlı sürüm 0.7.7'dir. Yok Yok
0.8.x Günlük biçimi değiştirildi. Python 3.6 desteği sona erdi. Yok Yok

Paket bağımlılıklarını denetleme

Sunucu paketi için azureml-inference-server-http en ilgili bağımlı paketler şunlardır:

  • flask
  • opencensus-ext-azure
  • inference-schema

Paketi Python ortamınızda belirttiyseniz azureml-defaults , azureml-inference-server-http paket bağımlı bir pakettir. Bağımlılık otomatik olarak yüklenir.

İpucu

Python SDK v1 kullanıyorsanız ve paketi Python ortamınızda açıkça belirtmezseniz azureml-defaults , SDK paketi otomatik olarak ekleyebilir. Ancak paketleyici sürümü SDK sürümüne göre kilitlenir. Örneğin, SDK sürümü ise1.38.0azureml-defaults==1.38.0, giriş ortamın pip gereksinimlerine eklenir.

Sunucu başlatma sırasında TypeError

Sunucu başlatma sırasında aşağıdakilerle TypeError karşılaşabilirsiniz:

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üyse ancak paket sürümünüz azureml-inference-server-http Flask 2'yi desteklemediğinde bu hata oluşur. Flask 2 desteği, paket sürümü 0.7.0 ve üzeri ile azureml-defaults paket sürümü 1.44 ve üzeri sürümlerde azureml-inference-server-http kullanılabilir.

  • Flask 2 paketini bir Azure Machine Learning Docker görüntüsünde kullanmıyorsanız veya azureml-defaults paketinin azureml-inference-server-http en son sürümünü kullanın.

  • Flask 2 paketini bir Azure Machine Learning Docker görüntüsünde kullanıyorsanız görüntü derleme sürümünün Temmuz 2022 veya üzeri olduğunu onaylayın.

    Görüntü sürümünü kapsayıcı günlüklerinde bulabilirsiniz. Örneğin:

    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 | 
    

    Görüntünün derleme tarihi, gösterimin Materialization Build ardından görünür. Yukarıdaki örnekte, görüntü sürümü veya 8 Temmuz 2022'dir 20220708 . Bu örnekteki görüntü Flask 2 ile uyumludur.

    Kapsayıcı günlüğünüzde benzer bir ileti görmüyorsanız, görüntünüz güncel değildir ve güncelleştirilmelidir. İşlem Birleşik Cihaz Mimarisi (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. Kullanım dışı bırakılan görüntüler için belirlenmiş değiştirmeler bulabilirsiniz.

    Sunucuyu çevrimiçi uç noktayla kullanıyorsanız, günlükleri Azure Machine Learning stüdyosu Uç Noktalar sayfasındaki Günlükler'de de 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, sunucu paketi yerel SDK araç takımınızla eşleşen bir sürümle uygular openmpi4.1.0-ubuntu20.04 . Ancak, yüklenen sürüm görüntünün kullanılabilir en son sürümü olmayabilir.

SDK sürüm 1.43 için sunucu paket sürümünü varsayılan olarak yükler openmpi4.1.0-ubuntu20.04:20220616 , ancak bu paket sürümü SDK 1.43 ile uyumlu değildir. Dağıtımınız için en son SDK'yi kullandığınızdan emin olun.

Görüntüyü güncelleştiremiyorsanız, veya girdilerini ortam dosyanıza sabitleyerek azureml-defaults==1.43 azureml-inference-server-http~=0.4.13 geçici olarak sorundan kaçınabilirsiniz. Bu girdiler sunucuyu ile flask 1.0.xeski sürümü yüklemeye yönlendirir.

Sunucu başlatma sırasında ImportError veya ModuleNotFoundError

Sunucu başlatma sırasında , jinja2, markupsafeveya ModuleNotFoundError gibi opencensusbelirli modüllerde veya clickile karşılaşabilirsinizImportError. Aşağıdaki örnekte hata iletisi gösterilmektedir:

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

İçeri aktarma ve modül hataları, Flask bağımlılığını uyumlu bir sürüme sabitlemeyen sunucunun 0.4.10 veya önceki sürümlerini kullandığınızda oluşur. Sorunu önlemek için sunucunun daha sonraki bir sürümünü yükleyin.

Diğer yaygın sorunları çözme

Diğer yaygın çevrimiçi uç nokta sorunları conda yükleme ve otomatik ölçeklendirme ile ilgilidir.

Conda yükleme sorunları

MLflow dağıtımıyla ilgili sorunlar genellikle conda.yml dosyasında 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:

  1. Conda yükleme günlüklerini denetleyin. Kapsayıcı kilitlendiyse veya başlatılması çok uzun sürdüyse conda ortam güncelleştirmesi büyük olasılıkla doğru çözümlenememiştir.
  2. mlflow conda dosyasını komutuyla conda env create -n userenv -f <CONDA_ENV_FILENAME>yerel olarak yükleyin.
  3. Yerel olarak hatalar varsa, yeniden dağıtmadan önce conda ortamını çözmeyi ve işlevsel bir ortam oluşturmayı deneyin.
  4. 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 conda.yml ortam dosyasındaki 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ının belirttiği bağımlılıklara bağlı olarak daha büyük VM'lere ihtiyacınız olabilir.
    • Kubernetes çevrimiçi uç noktaları için Kubernetes kümesi en az dört vCPU çekirdeğine ve 8 GB belleğe sahip olmalıdır.

Otomatik ölçeklendirme sorunları

Otomatik ölçeklendirmeyle ilgili sorun yaşıyorsanız bkz . Azure İzleyici otomatik ölçeklendirme sorunlarını giderme.

Kubernetes çevrimiçi uç noktaları için Azure Machine Learning çıkarım yönlendiricisi, Kubernetes kümesindeki tüm model dağıtımları için otomatik ölçeklendirmeyi işleyen bir ön uç bileşenidir. Daha fazla bilgi için bkz . Kubernetes çıkarım yönlendirmesini otomatik ölçeklendirme.