Aracılığıyla paylaş


Ç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 takibi

Desteklenen iki izleme başlığı 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 değiştirir. 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 başlık yalnızca alfasayısal karakterleri, kısa çizgileri ve alt çizgileri kabul eder ve maksimum 40 karaktere kadar kesilir.

Yerel olarak dağıt

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 ilgili komuta --local ekleyin.

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 Yerel uç nokta kullanarak yerel olarak dağıtma ve hata ayıklama bölümüne bakın.

İ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 al

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.

Log dosyalarını aşağıdaki kapsayıcı türlerinden alabilirsiniz:

  • Çıkarım sunucusu konsol kayıtları, puanlama betiği score.py kodunuzdan yazdırma ve günlüğe kaydetme işlevlerinin çıktısı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 INFO gibi doğ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

veya

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. –-container storage-initializer geçirerek depolama başlatıcı kapsayıcısından günlükleri alabilirsiniz.

Eğer bu parametreleri daha önce --resource-group ile ayarlamadıysanız, --workspace-name ve az configure komutlarına ekleyin. 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 komutlara --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, ayrıca bkz Kubernetes dağıtımlarına özgü yaygın hatalar.

HATA: GörüntüYapıHatası

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şemediğinizde hata iletisi "container registry authorization failure"’dan bahseder. Ç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 komutunu manuel olarak çağırarak anahtar eşitlemesi yapabilir ve bu da yetkilendirme hatasını çözebilir.

Sanal ağın arkasında bulunan kapsayıcı kayıt defterleri, yanlış ayarlanırlarsa 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, görüntü oluşturma hesaplaması ayarlanmamış.

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ü oluşturma 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. Loglar, görüntü derlemesinin zaman aşımına uğradığı noktada 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. Son satır Installing pip dependencies: ...working... ile biterse ve derleme günlüğünde belirgin bir hata bulunmazsa, 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ı

Hata, bu dağıtım için düğümlerin zamanlanamaması nedeniyle istenen CPU veya bellek sağlanamadığında 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üncellenmesini düşünün.

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: Hatalı Argüman

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.

MDC etkinleştirildiğinde, kullanıcının yönetilen kimliğinin çalışma alanı depolama hesabında Depolama Blob Verileri Katkıda Bulunanı izni olmalıdır. Daha fazla bilgi için bkz. MDC etkinleştirildiğinde Depolama Blobu Yetkilendirme Hatası.

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 Kapsayıcı kayıt defteri yetkilendirme hatası'na bkz.

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, testacr.azurecr.io/azureml/azureml_92a029f831ce58d2ed011c3c42d35acb:latest görüntüsüyse, depoyu 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 az ml compute show komutunu kullanarak sınırları da kontrol 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 sağlıklı replikası 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: KaynakHazırDeğil

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 senaryodaki hata, kapsayıcının çalışırken çökmesi nedeniyle puanlamanın gerçekleşememesidir. 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 dosyasının içe aktarmaya çalıştığı, ancak conda ortamına dahil olmayan bir paket
    • Söz dizimi hatası
    • init() yönteminde bir hata

    get-logs günlük oluşturmazsa, bu genellikle kapsayıcının başlatılamadığını gösterir. Bu sorunu düzeltmek için yerel olarak dağıtım yapmayı 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 desteklenen daha büyük bir VM SKU'sunu deneyin.

  • Kapsayıcı ortamı kurulumunda, örneğin eksik bir 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: Kaynak Bulunamadı

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.

Konteyner 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 edemez.

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ği'ne özel kayıt defterinizin acrPull rolünü tanımlayın.
  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 Çalışma alanı tanılamasını kullanma bölümüne bakın.

HATA: Çalışma Alanı Yönetilen Ağı Hazır Değil

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: Operasyon İptal Edildi

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 (Gizli Bilgilerin Enjeksiyon Hatası)

Çevrimiçi dağıtım oluşturulurken gizli anahtarlar alma ve ekleme işlemi, çalışma alanı bağlantılarından veya anahtar kasalarından gizli anahtarları almak için uç noktayla ilişkili kimlik kullanılarak gerçekleştirilir. Bu hata aşağıdaki nedenlerden biri nedeniyle oluşur:

  • Azure RBAC izni olmadığından, uç nokta kimliği, dağıtım tanımı gizli bilgileri ortam değişkenlerine eşlenen başvurular olarak belirtse bile, çalışma alanı bağlantılarından veya anahtar kasalarından gizli bilgileri okuyamaz. Rol atanması değişikliklerin etkili olması için zaman alabilir.

  • Gizli referansların biçimi geçersiz veya belirtilen gizli bilgiler çalışma alanı bağlantılarında ya da anahtar kasalarında yok.

Daha fazla bilgi için bkz: Çevrimiçi uç noktalardaki gizli dizileri enjekte etme (önizleme) ve Gizli dizileri çevrimiçi dağıtımdan gizli dizi ekleme (önizleme) yöntemiyle erişme.

HATA: Dahili Sunucu Hatası

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: JetonYenilemeBaşarısız

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: AAD Token Alma Başarısız

Kubernetes kümesi için Microsoft Entra ID belirteç isteği başarısız olduğu veya zaman aşımına uğradığı için bu hata oluşur. Ağ erişiminizi kontrol edin ve tekrar deneyin.

  • Kümenin çalışma alanına bağlanabildiğinden emin olmak ve proxy sunucuyu kontrol etmek için Kubernetes'i kullan 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: ACR Kimlik Doğrulama Sınavı Başarısız oldu

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: ACRTokenExchangeBaşarısız

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 çöktüğü için, 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 işlemi sırasında özel durumlar oluşturan bir söz dizimi hatası veya içeri aktarma hatasına sahiptir.
  • 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ılı kalmış. Dağıtım günlüğünün mevcut olup olmadığını ve günlükte hata iletileri olup olmadığını denetleyin.
  • score.py dosyasında bir hata var ve puan kodunuzu başlatırken kapsayıcı çöktü. 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 bilgisayarınızın kullandığı ad alanı kümenizde mevcut olmadığından, Kubernetes çevrimiçi uç noktalarını oluştururken veya güncellerken 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: KullanıcıScriptİnitBaşarısız

Karşıya yüklenen init dosyanızdaki işlevi bir özel durum oluşturduğunda, 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: KullanıcıScriptiİçeAktarmaHatası

Kubernetes çevrimiçi dağıtımlarını oluştururken veya güncellerken, yüklediğiniz score.py dosyası kullanılamayan paketleri içe aktardığı için bu hatayla karşılaşabilirsiniz. Ö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ında init() veya run() adlı bir işlev bulunmadığından, Kubernetes çevrimiçi dağıtımlarını oluştururken veya güncelleştirirken bu hatayı alabilirsiniz. Kodunuzu denetleyin ve işlevi ekleyin.

HATA: Uç Nokta Bulunamadı

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: Uç Nokta Zaten Mevcut

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 (Puanlama Ürününde Sağlıksız Durum)

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: Puanlama Doğrulaması Başarısız

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: Geçersiz Dağıtım Özellikleri

Dağıtım belirtimi geçersiz olduğundan Kubernetes çevrimiçi dağıtımlarını oluşturur veya güncelleştirirken bu hatayı alabilirsiniz. Emin olmak için instance count hata mesajını kontrol edin. Otomatik ölçeklendirmeyi etkinleştirdiyseniz minimum instance count ve maximum instance count öğelerinin 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 bağlılık seçicisi ile eşleşen hiçbir düğüm yok.

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

  1. Kullandığınız node selector öğesinin instance_type tanımını ve küme düğümlerinizin node label yapılandırmasını kontrol edin.
  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: Çıkarım İstemci Çağrısı Başarısız Oldu

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, bilgisayarınızı ayırıp yeniden bağlayı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ı uygulandığında iki yanıt römorku 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 geçici katman olarak Azure İşlevleri, Azure Uygulama Ağ Geçidi 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ü.
401 Yetkisiz İstenen eylemi, örneğin puanlama, gerçekleştirme izniniz yok veya jetonunuzun süresi dolmuş ya da 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ı Bitiş noktasının pozitif ağırlık taşıyan geçerli bir dağıtımı yok.
408 İstek zamanaşımı Model yürütmesi, model dağıtım yapılandırmanızın request_timeout_ms altında sağlanan request_settings 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 boyutunu, uç noktanızın Requests Per Minute ölçütü altındaki Azure Monitor Ölçüm Gezgini üzerinde kontrol edin. Veya yanıt üst bilgilerini ms-azureml-model-error-statuscode ve ms-azureml-model-error-reason daha fazla bilgi için denetleyin. Eğer 424 hatası, canlılık veya hazır olma yoklaması başarısızlığıyla birlikte gelirse, kapsayıcı canlılığını veya hazır olma durumunu araştırmak için daha fazla zaman sağlamak amacıyla ProbeSettings'i ayarlamayı düşünün.
429 Çok fazla bekleyen istek var. Modeliniz şu anda işleyebileceğinden daha fazla istek alıyor. Sorunsuz bir operasyonu garanti etmek için, Azure Machine Learning, herhangi bir zamanda paralel olarak maksimum 2 * max_concurrent_requests_per_instance * instance_count requests işlemeye izin verir. Bu üst sınırı aşan istekler reddedilir.

Model dağıtım yapılandırmanızı ve ayarları doğrulamak ve ayarlamak için request_settings ve scale_settings bölümlerini 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çeklenme hızından daha hızlı alıyor demektir. Sistemin ayarlaması için zaman tanımak amacıyla üstel geri çekilme 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.
429 Oran sınırlı Saniye başına istek sayısı yönetilen çevrimiçi uç nokta sınırlarına ulaştı.
beş yüz İç 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 run() dosyasının yönteminde özel durum veya kilitlenme tr-TR: score.py dosyasında, örneğin conda ortamında bulunmayan bir paket veya bir söz dizimi hatası olduğunda ya da init() yöntemi başarısız olduğunda, dosyada hata ayıklamak için ERROR: ResourceNotReady'ye bakın.
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 ölçüde zaman alır. Nasıl 503 durum kodu hatalarını önleyebileceğinizi görün.
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 düzeltmezse, kod yanıt vermeyen bir durumda veya sonsuz döngüde olabilir. Hata ayıklamak için HATA: ResourceNotReady hatasını izleyin ve score.py dosyasını inceleyin.
beş yüz İç 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çek artırma veya azaltma kararı, mevcut 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.

  • Otomatik ölçeklendirmenin yeni çoğaltmalar oluşturduğu kullanım hedefini, autoscale_target_utilization değerini daha düşük bir değere ayarlayarak 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şturulmalarına olanak tanır. Ö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 minimum replika 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 replikaların işleyebileceğinden daha büyük istek artışları alırsanız, yeniden 503 hatası alabilirsiniz. Örneğin uç noktanıza gelen trafik arttıkça en düşük çoğaltmaları artırmanız gerekebilir.

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

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, v1 eski moduyla ilgili bir mesajla başarısız oluyor.

Yönetilen çevrimiçi uç noktalar, Azure Machine Learning v2 API platformunun bir özelliğidir. Azure Machine Learning çalışma alanınız v1 eski modu için yapılandırılmışsa, yönetilen çevrimiçi uç noktalar çalışmaz. Özellikle, v1_legacy_mode çalışma alanı ayarı true olarak ayarlandıysa, v1 eski modu açık olur ve v2 API'leri için destek sağlanmaz.

v1 eski modunu nasıl kapattığınızı görmek için bkz. Azure Resource Manager'da yeni API platformumuzla ağ yalıtımı değişikliği.

Önemli

v1_legacy_mode ayarını false olarak değiştirmeden önce, v1 eski modu bir nedenle açık olabileceğinden, ağ güvenlik ekibinize danışın.

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. <key-vault-name> öğesini anahtar kasanızın adıyla değiştirin.

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

Bu komutun yanıtı aşağıdaki JSON koduna benzer:

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

Eğer bypass değeri AzureServices değilse, onu olarak ayarlamak için AzureServices kılavuzundaki yönergeleri kullanın.

Çevrimiçi dağıtımlar görüntü indirme hatasıyla başarısız oluyor

Not

Bu sorun, yönetilen çevrimiçi uç noktalar için eski ağ yalıtım yöntemini kullandığınızda geçerlidir. Bu yöntemde Azure Machine Learning, bir uç nokta altında her dağıtım için bir yönetilen sanal ağ oluşturur.

  1. Dağıtım için egress-public-network-access bayrağının değerinin disabled olup olmadığını denetleyin. Eğer bu bayrak etkinse ve kapsayıcı kayıt defterinin görünürlüğü özel (privé) ise, bu beklenen bir hatadır.

  2. Özel uç nokta bağlantısının durumunu denetlemek için aşağıdaki komutu kullanın. Çalışma alanınızın Azure Container Registry adını <registry-name> ile değiştirin.

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

    Yanıt kodunda, status alanının Approved olarak ayarlandığını doğrulayın. Değer değilse Approved, bağlantıyı onaylamak için aşağıdaki komutu kullanın. <private-endpoint-connection-ID> değerini, önceki komutun döndürdüğü kimlikle değiştirin.

    az network private-endpoint-connection approve --id <private-endpoint-connection-ID> --description "Approved"
    

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ındaki komutunu kullanın:

    nslookup <endpoint-name>.<endpoint-region>.inference.ml.azure.com
    

    Örneğin, komutunuz aşağıdakine benzer görünebilir:

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

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

    Not

    • Kubernetes çevrimiçi uç noktası için uç nokta ana bilgisayar adı, Kubernetes kümenizde belirtilen CName (etki alanı adı) olmalıdır.
    • Uç nokta HTTP kullanıyorsa, IP adresi, studio kullanıcı arabiriminden alabileceğiniz uç nokta URI'sinde yer alır.
    • Uç noktanın IP adresini almanın diğer yolları için bkz. DNS'nizi FQDN ile güncelleştirme.
  3. nslookup Komut ana bilgisayar adını çözmezse, aşağıdaki bölümlerden birinde eylemleri gerçekleştirin.

Yönetilen çevrimiçi uç noktalar

  1. Sanal ağın özel Etki Alanı Adı Sistemi (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çlar, *.<GUID>.inference.<region> gibi bir kayıt içermelidir.

  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 Özel uç noktayı nasıl yapılandıracağınızı öğrenin.

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

    dig <endpoint-name>.<endpoint-region>.inference.ml.azure.com
    

Kubernetes çevrimiçi uç noktaları

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

  2. Azure Machine Learning çıkarım yönlendiricisinin beklendiği azureml-fegibi çalışıp çalışmadığını denetleyin. Bu denetimi gerçekleştirmek için aşağıdaki adımları izleyin:

    1. Podda azureml-fe aşağıdaki komutu çalıştırın:

      kubectl exec -it deploy/azureml-fe -- /bin/bash
      
    2. Aşağıdaki komutlardan birini çalıştırın:

      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 HTTPS komutu başarısız olursa veya zaman aşımına uğradıysa ancak HTTP komutu çalışıyorsa sertifikanın geçerli olup olmadığını denetleyin.

  4. Yukarıdaki işlem A kaydına çözümlenemezse, çözümlemenin Azure DNS sanal genel IP adresinden (168.63.129.16) çalışıp çalışmadığını doğrulamak için aşağıdaki komutu kullanın:

    dig @168.63.129.16 <endpoint-name>.<endpoint-region>.inference.ml.azure.com
    
  5. Yukarıdaki komut başarılı olursa, özel DNS'de Azure Özel Bağlantı için koşullu iletici sorunlarını giderin.

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

  1. Puanlanamaz bir dağıtımın durumunu görmek için aşağıdaki komutu çalıştırın:

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

    Succeeded alanının state değeri başarılı bir dağıtımı gösterir.

  2. Başarılı bir dağıtım için, trafiğin dağıtıma atandığını denetlemek için aşağıdaki komutu kullanın:

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

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

    İpucu

    Bu dağıtımı hedeflemek için isteğinizde üst bilgiyi azureml-model-deployment kullanırsanız 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:

    az ml online-deployment get-logs  -e <endpoint-name> -n <deployment-name> 
    
  4. Dağıtıma bir istek gönderdiğinizde puanlama kodunun çalıştırılmasında sorun olup olmadığını görmek için kayıtları kontrol edin.

Çı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 şu adımları izleyin:

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

  2. Ortam dosyanızda, belirtilen Python paketinin azureml-inference-server-http sürümünü denetleyin. Azure Machine Learning çıkarım HTTP sunucusu başlangıç günlüklerinde görüntülenen çıkarım sunucusunun sürümünü denetleyin. İki sürümün eşleşdiğini 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. Ortamınızda Flask veya bağımlılıkları belirttiyseniz, bu öğeleri kaldırın.

    • Bağımlı paketler arasında flask, jinja2, itsdangerous, werkzeug, markupsafeve bulunur click.
    • Paket flask , çıkarım sunucusu 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, çıkarım sunucusu paket güncelleştirmelerini kullanıma sunuldukça otomatik olarak alır.

Çıkarım sunucusu sürümünü denetleyin

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

Erken paket sürümü 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 20220601 tarihi veya öncesine ait eğitim görüntülerinde ve 0.1.34 ile 1.43 arasındaki azureml-defaults sürüm paketlerinde paketlenmiştir. En son kararlı sürüm 0.4.13'dür. 0.4.11'den önceki sunucu sürümlerinde, can't import name Markup from jinja2 gibi Flask bağımlılık sorunlarıyla karşılaşabilirsiniz. Mümkünse en son sürüm olan 0.4.13 veya 1.4.x sürümüne yükseltin.
0.6.x Önceden yüklenmiş çıkarımın bulunduğu 20220516 ve öncesindeki görüntülerde. 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üncelleştirilmiş günlük biçimini kullanır. Python 3.6 desteğini sona erdiriyor. Yok Yok
1.0.x Python 3.7 desteğini sona erdiriyor. Yok Yok
1.1.x 2.0 sürümüne pydantic taşır. Yok Yok
1.2.x Python 3.11 desteği ekler. gunicorn sürüm 22.0.0'a güncelleniyor. werkzeug 3.0.3 ve sonraki sürümlere günceller. Yok Yok
1.3.x Python 3.12 desteği ekler. Sürüm 2024.7.4'e yükseltildi certifi . Sürüm 5.0.0'a yükseltildi flask-cors . gunicorn ve pydantic paketlerini yükseltir. Yok Yok
1.4.x Sürüm 3.0.1'e yükseltildi waitress . Python 3.8 desteğini sona erdiriyor. Flask 2.0 yükseltmesinin istek nesne kodunu bozmasını engelleyen uyumluluk katmanını kaldırır. Uyumluluk katmanına bağlıysanız, istek nesnesi kodunuz çalışmayabilir. Puan betiğinizi Flask 2'ye geçirin.

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

Python ortamınızda azureml-defaults paketini belirtirseniz, azureml-inference-server-http paketi bağımlı pakettir. Bağımlılık otomatik olarak yüklenir.

İpucu

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

Çıkarım sunucusu başlatma sırasında TypeError

Çıkarım sunucusu başlatılırken 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 azureml-inference-server-http 0.7.0 paketi ve sonraki sürümleri ile azureml-defaults 1.44 paketi ve sonraki sürümlerinde kullanılabilir.

  • Flask 2 paketini bir Azure Machine Learning Docker görüntüsünde kullanmıyorsanız, azureml-inference-server-http veya azureml-defaults paketinin 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 July 2022 veya daha yeni bir sürüm olduğunu teyit edin.

    Görüntü sürümünü kapsayıcı günlüklerinde bulabilirsiniz. Örneğin, aşağıdaki günlük kayıtlarına bakın:

    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, notasyonunun Materialization Build ardından görünür. Yukarıdaki örnekte, görüntü sürümü 20220708, yani 8 Temmuz 2022'dir. 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 kullanım dışı bırakılıp kullanılmadığını görmek için AzureML Kapsayıcıları deposuna bakın. Kullanım dışı bırakılan görüntüler için atanmış yedekler bulabilirsiniz.

    Çıkarım sunucusunu çevrimiçi uç noktayla kullanıyorsanız günlükleri Azure Machine Learning studio'da da bulabilirsiniz. Uç noktanızın sayfasında Günlükler sekmesini seçin.

SDK v1 ile dağıtım yaparsanız ve dağıtım yapılandırmanızda açıkça bir görüntü belirtmezseniz çıkarım sunucusu 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 çıkarım sunucusu 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, azureml-defaults==1.43 ya da azureml-inference-server-http~=0.4.13 girdilerini ortam dosyanıza sabitleyerek geçici olarak bu sorundan kaçınabilirsiniz. Bu girdiler, çıkarım sunucusunu flask 1.0.x ile eski sürümü yüklemeye yönlendirir.

Çıkarım sunucusu başlatma sırasında ImportError veya ModuleNotFoundError

Çıkarım sunucusu başlatılırken, belirli modüllerde ImportError veya ModuleNotFoundError ile örneğin opencensus, jinja2, markupsafe ya da click karşılaşabilirsiniz. Aşağıdaki örnekte hata iletisi gösterilmektedir:

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

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

Diğer yaygın sorunlar

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. Eğer konteyner, yerel olarak çözümlendiği halde 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 Azure İzleyici otomatik ölçeklendirme sorunlarını giderme sayfasına bakın.

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 Autoscale Kubernetes çıkarım yönlendirmesi bölümüne bakın.