Share via


Çevrimiçi uç noktaların dağıtım ve puanlama sorunlarını giderme

ŞUNLAR IÇIN GEÇERLIDIR: Azure CLI ml uzantısı v2 (geçerli)Python SDK azure-ai-ml v2 (geçerli)

Azure Machine Learning çevrimiçi uç noktalarının dağıtımı ve puanlaması ile ilgili yaygın sorunları çözmeyi öğrenin.

Bu belge, sorun gidermeye yaklaşmanız gereken şekilde yapılandırılmıştır:

  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ı puanlarken çağırma ve tahmin hatalarının HTTP durum kodlarıyla nasıl eşlenmesi açıklanmaktadır.

Önkoşullar

Yerel olarak dağıtma

Yerel dağıtım, yerel bir Docker ortamına bir model dağıtıyor. Yerel dağıtım, buluta dağıtımdan önce test etmek ve hata ayıklamak için kullanışlıdır.

İpucu

Puanlama betiğinizde yerel olarak hata ayıklamak için Azure Machine Learning çıkarım HTTP sunucusu Python paketini de kullanabilirsiniz. Çıkarım sunucusuyla hata ayıklama, yerel uç noktalara dağıtmadan önce puanlama betiğinin hatalarını ayıklamanıza yardımcı olur, böylece dağıtım kapsayıcısı yapılandırmalarından etkilenmeden hata ayıklayabilirsiniz.

Yerel dağıtım, yerel bir uç noktanın oluşturulmasını, güncelleştirilmesini ve silinmesini destekler. Ayrıca uç noktadan günlükleri çağırmanızı ve almanızı sağlar.

Yerel dağıtımı kullanmak için uygun CLI komutuna ekleyin --local :

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

Yerel dağıtımın bir parçası olarak aşağıdaki adımlar gerçekleşir:

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

Daha fazla bilgi için bkz . Makine öğrenmesi modelini dağıtma ve puanlandırma bölümünde yerel olarak dağıtma.

İpucu

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

Conda yüklemesi

Genellikle, MLflow dağıtımıyla ilgili sorunlar, dosyada conda.yaml belirtilen kullanıcı ortamının yüklenmesiyle ilgili sorunlardan kaynakılır.

Conda yükleme sorunlarının hatalarını ayıklamak için aşağıdaki adımları deneyin:

  1. Conda yüklemesi için günlükleri denetleyin. Kapsayıcı kilitlendiyse veya başlatılması çok uzun sürüyorsa conda ortam güncelleştirmesi doğru çözümlenememiş olabilir.

  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.

    1. Conda paketi yüklemesi çalışma zamanında gerçekleşir, bu nedenle SKU boyutu ortam dosyasında ayrıntılı olarak belirtilen conda.yaml tüm paketleri barındıramayacak kadar küçükse kapsayıcı kilitlenebilir.
    2. Standard_F4s_v2 VM iyi bir başlangıç SKU boyutudur, ancak conda dosyasında hangi bağımlılıkların belirtildiğine bağlı olarak daha büyük olanlar gerekebilir.
    3. Kubernetes çevrimiçi uç noktası için Kubernetes kümesinde en az 4 vCPU çekirdeği ve 8 GB bellek olmalıdır.

Kapsayıcı günlüklerini alma

Modelin dağıtıldığı sanal makineye doğrudan erişemezsiniz. Bununla birlikte sanal makinede çalışan bazı kapsayıcılardan günlükler alabilirsiniz. Edindiğiniz bilgi miktarı, dağıtımın sağlama durumuna bağlıdır. Belirtilen kapsayıcı çalışır durumdaysa konsol çıkışını görürsünüz; aksi takdirde, daha sonra yeniden denemek için bir ileti alırsınız.

Günlükleri alabileceğiniz iki tür kapsayıcı vardır:

  • Çıkarım sunucusu: Günlükler, puanlama betiğinizden (kod) yazdırma/günlüğe kaydetme işlevlerinin çıkışını içeren konsol günlüğünü (score.pyçıkarım sunucusundan) içerir.
  • Depolama başlatıcı: Günlükler, kod ve model verilerinin kapsayıcıya başarıyla indirilip indirilmediğine ilişkin bilgiler içerir. Kapsayıcı, çıkarım sunucusu kapsayıcısı çalışmaya başlamadan önce çalışır.

Kapsayıcıdan günlük çıktısını görmek için aşağıdaki CLI komutunu kullanın:

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

veya

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

--workspace-name Bu parametreleri aracılığıyla az configurehenüz ayarlamadıysanız ve komutlarına ekleyin--resource-group.

Bu parametreleri ayarlama hakkında bilgi edinmek ve şu anda değer ayarladıysanız şunu çalıştırın:

az ml online-deployment get-logs -h

Varsayılan olarak günlükler çıkarım sunucusundan çekilir.

Not

Python günlüğü kullanıyorsanız, iletilerin günlüklerde yayımlanması için doğru günlük düzeyi sırasını kullandığınızdan emin olun. Örneğin, BİlGİ.

Ayrıca, geçirerek –-container storage-initializerdepolama başlatıcı kapsayıcısından günlükleri alabilirsiniz.

Daha fazla bilgi görmek için komutlara ve/veya --debug ekleyin--help.

Kubernetes çevrimiçi uç noktası için yöneticiler modeli dağıttığınız kümeye doğrudan erişebilir ve bu da Kubernetes'teki günlüğü denetlemeleri için daha esnektir. Örneğin:

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

İstek izleme

Desteklenen iki izleme üst bilgisi vardır:

  • x-request-id sunucu izleme için ayrılmıştır. Geçerli bir GUID olduğundan emin olmak için bu üst bilgiyi geçersiz kılarız.

    Not

    Başarısız bir istek için destek bileti oluşturduğunuzda, araştırmayı hızlandırmak için başarısız istek kimliğini ekleyin.

  • x-ms-client-request-id istemci izleme senaryoları için kullanılabilir. Bu üst bilgi yalnızca alfasayısal karakterleri, kısa çizgileri ve alt çizgileri kabul etmek için temizlenmiş ve en fazla 40 karaktere kesilmiştir.

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

Aşağıdaki liste, dağıtım işlemi durumunun bir parçası olarak bildirilen yaygın dağıtım hatalarının listesidir:

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

HATA: ImageBuildFailure

Ortam (docker görüntüsü) oluşturulurken bu hata döndürülür. Hatalar hakkında daha fazla bilgi için derleme günlüğünü de kontrol edebilirsiniz. Derleme günlüğü, Azure Machine Learning çalışma alanınız için varsayılan depolama alanında bulunur. Tam konum hatanın bir parçası olarak döndürülebilir. Örneğin, "the build log under the storage account '[storage-account-name]' in the container '[container-name]' at the path '[path-to-the-log]'".

Aşağıdaki listede yaygın görüntü derleme hatası senaryoları yer alır:

ImageBuild zaman aşımlarınız varsa varsayılan yoklama ayarlarını gözden geçirmenizi de öneririz.

Kapsayıcı kayıt defteri yetkilendirme hatası

Hata iletisinde bundan bahsediliyorsa "container registry authorization failure" , kapsayıcı kayıt defterine geçerli kimlik bilgileriyle erişemezsiniz. Çalışma alanı kaynağının anahtarlarının zaman uyumsuz hale getirilmesi bu hataya neden olabilir ve otomatik olarak eşitlenmesi biraz zaman alabilir. Ancak, anahtarların eşitlenmesi için el ile çağrı yapabilir ve bu da yetkilendirme hatasını çözebilir.

Bir sanal ağın arkasındaki kapsayıcı kayıt defterleri de yanlış ayarlanırsa bu hatayla karşılaşabilir. Sanal ağın düzgün ayarlandığını doğrulamanız gerekir.

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

Hata iletisinde bahsediliyorsa "failed to communicate with the workspace's container registry" ve sanal ağları kullanıyorsanız ve çalışma alanının Azure Container Registry'si özelse ve özel bir uç noktayla yapılandırılmışsa, sanal ağda görüntü oluşturmaya izin vermek için Azure Container Registry'yi etkinleştirmeniz gerekir.

Genel görüntü derleme hatası

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

Ayrıca buluta dağıtmadan önce modellerinizi yerel olarak test etmek ve hatalarını ayıklamak için yerel olarak dağıtmanızı öneririz.

HATA: OutOfQuota

Aşağıdaki liste, Azure hizmetlerini kullanırken kotası tükenebilecek yaygın kaynakların listesidir:

Ayrıca, aşağıdaki liste yalnızca Kubernetes çevrimiçi uç noktası için kotası tükenebilecek yaygın kaynakların listesidir:

CPU Kotası

Modeli dağıtmadan önce yeterli işlem kotasına sahip olmanız gerekir. Bu kota abonelik başına, çalışma alanı başına, SKU başına ve bölge başına ne kadar sanal çekirdeğin kullanılabilir olduğunu tanımlar. Her dağıtım kullanılabilir kotayı çıkarır ve sildikten sonra SKU türüne göre geri ekler.

Olası bir azaltma, silebileceğiniz kullanılmayan dağıtımlar olup olmadığını denetlemektir. İsterseniz kota artışı isteği gönderebilirsiniz.

Küme kotası

Bu sorun, yeterli Azure Machine Learning İşlem kümesi kotanız olmadığında oluşur. Bu kota, Azure Bulut'ta CPU veya GPU düğümlerini dağıtmak için abonelik başına bir kerede kullanımda olabilecek toplam küme sayısını tanımlar.

Olası bir azaltma, silebileceğiniz kullanılmayan dağıtımlar olup olmadığını denetlemektir. İsterseniz kota artışı isteği gönderebilirsiniz. Bu kota artırma isteği için kota türü olarak seçtiğinizden Machine Learning Service: Cluster Quota emin olun.

Disk kotası

Bu sorun, modelin boyutu kullanılabilir disk alanından daha büyük olduğunda ve model indirilemediğinde ortaya çıkar. Daha fazla disk alanı olan veya görüntü ve model boyutunu azaltan bir SKU deneyin.

Bellek kotası

Bu sorun, modelin bellek ayak izi kullanılabilir bellekten daha büyük olduğunda ortaya çıkar. Daha fazla belleğe sahip bir SKU deneyin.

Rol atama kotası

Yönetilen çevrimiçi uç nokta oluştururken, yönetilen kimliğin çalışma alanı kaynaklarına erişmesi için rol ataması gerekir. Rol atama sınırına ulaştıysanız, bu abonelikteki kullanılmayan bazı rol atamalarını silmeyi deneyin. Erişim Denetimi menüsüne giderek Azure portalındaki tüm rol atamalarını denetleyebilirsiniz.

Uç nokta kotası

Bu abonelikte kullanılmayan bazı uç noktaları silmeyi deneyin. Tüm uç noktalarınız etkin bir şekilde kullanılıyorsa, uç nokta sınırı artışı istemeyi deneyebilirsiniz. Uç nokta sınırı hakkında daha fazla bilgi edinmek için bkz . Azure Machine Learning çevrimiçi uç noktaları ve toplu iş uç noktaları ile uç nokta kotası.

Kubernetes kotası

Bu sorun, istenen CPU veya bellek bu dağıtım için zamanlanamayan düğümler nedeniyle sağlanamadığında ortaya çıkar. Örneğin, düğümler kordonlanmış veya başka bir şekilde kullanılamıyor olabilir.

Hata iletisi genellikle kümedeki kaynağın yetersiz olduğunu gösterir; örneğin, OutOfQuota: Kubernetes unschedulable. Details:0/1 nodes are available: 1 Too many pods...kümede çok fazla pod olduğu ve isteğinize göre yeni modeli dağıtmak için yeterli kaynak olmadığı anlamına gelir.

Bu sorunu gidermek için aşağıdaki azaltmayı deneyebilirsiniz:

  • Kubernetes kümesini koruyan BT işlemleri için daha fazla düğüm eklemeyi veya bazı kaynakları serbest bırakmak için kümedeki kullanılmayan bazı podları temizlemeyi deneyebilirsiniz.
  • Modelleri dağıtan makine öğrenmesi mühendisleri için dağıtımınızın kaynak isteğini azaltmayı deneyebilirsiniz:
    • Kaynak isteğini dağıtım yapılandırmasında kaynak bölümü aracılığıyla doğrudan tanımlarsanız, kaynak isteğini azaltmayı deneyebilirsiniz.
    • Model dağıtımı için kaynak tanımlamak için kullanırsanız instance type , örnek türü kaynak yapılandırmasını ayarlamak için BT işlemlerine başvurabilirsiniz. Daha fazla ayrıntı için Bkz. Kubernetes örnek türünü yönetme.

Bölge genelinde VM kapasitesi

Bölgede Azure Machine Learning kapasitesinin olmaması nedeniyle hizmet belirtilen VM boyutunu sağlayamadı. Daha sonra yeniden deneyin veya farklı bir bölgeye dağıtmayı deneyin.

Diğer kota

Dağıtımın score.py bir parçası olarak sağlanan öğesini çalıştırmak için Azure, ihtiyaç duyduğu tüm kaynakları score.py içeren bir kapsayıcı oluşturur ve bu kapsayıcıda puanlama betiğini çalıştırır.

Kapsayıcınız başlatılamıyorsa puanlama yapılamaz. Kapsayıcının destekleyebileceklerden instance_type daha fazla kaynak istemesi olabilir. Öyleyse, çevrimiçi dağıtımın instance_type güncelleştirmesini göz önünde bulundurun.

Hatanın tam nedenini almak için şunu çalıştırın:

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

HATA: BadArgument

Aşağıdaki liste, yönetilen çevrimiçi uç nokta veya Kubernetes çevrimiçi uç noktasını kullanırken bu hatayla karşılaşabileceğiniz nedenlerden bazılarıdır:

Aşağıdaki liste, yalnızca Kubernetes çevrimiçi uç noktasını kullanırken bu hatayla karşılaşabileceğiniz nedenlerdendir:

Abonelik mevcut değil

Girilen Azure aboneliği mevcut olmalıdır. Bu hata, başvuruda bulunan Azure aboneliğini bulamadığımızda oluşur. Bu hatanın nedeni büyük olasılıkla abonelik kimliğindeki bir yazım hatasıdır. Abonelik kimliğinin doğru yazıldığını ve şu anda etkin olup olmadığını bir kez daha denetleyin.

Azure abonelikleri hakkında daha fazla bilgi için önkoşullar bölümünü görebilirsiniz.

Yetkilendirme hatası

İşlem kaynağını sağladıktan sonra (dağıtım oluştururken), Azure çalışma alanından kullanıcı kapsayıcı görüntüsünü çekmeye çalışır Azure Container Registry (ACR). Kullanıcı modelini ve kod yapıtlarını çalışma alanı depolama hesabından kullanıcı kapsayıcısına bağlamaya çalışır.

Azure, bu eylemleri gerçekleştirmek için depolama hesabına ve kapsayıcı kayıt defterine erişmek için yönetilen kimlikleri kullanır.

  • İlişkili uç noktayı Sistem Tarafından Atanan Kimlik ile oluşturduysanız, Azure rol tabanlı erişim denetimi (RBAC) izni otomatik olarak verilir ve başka izin gerekmez.

  • Kullanıcı Tarafından Atanan Kimlik ile ilişkili uç noktayı oluşturduysanız, kullanıcının yönetilen kimliğinin çalışma alanının depolama hesabında Depolama blob veri okuyucu iznine ve çalışma alanı için Azure Container Registry'de (ACR) AcrPull iznine sahip olması gerekir. Kullanıcı Tarafından Atanan Kimliğinizin doğru izne sahip olduğundan emin olun.

Daha fazla bilgi için bkz . Kapsayıcı Kayıt Defteri Yetkilendirme Hatası.

Geçersiz şablon işlevi belirtimi

Bu hata, bir şablon işlevi yanlış belirtildiğinde oluşur. İlkeyi düzeltin veya engeli kaldırmak için ilke atamasını kaldırın. Hata iletisi, bu hatada hata ayıklamanıza yardımcı olacak ilke atama adını ve ilke tanımını ve şablon hatalarını önlemeye yönelik ipuçlarının açıklandığı Azure ilke tanımı yapısı makalesini içerebilir.

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

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

Kapsayıcı görüntüsünün ACR çalışma alanında kullanılabilir olduğundan emin olun.

Örneğin, görüntü testacr.azurecr.io/azureml/azureml_92a029f831ce58d2ed011c3c42d35acb:latest ile depoyu az acr repository show-tags -n testacr --repository azureml/azureml_92a029f831ce58d2ed011c3c42d35acb --orderby time_desc --output tabledenetleyin.

Kullanıcı modeli indirilemiyor

Kullanıcının modeli bulunamıyor olabilir. Daha fazla ayrıntı almak için kapsayıcı günlüklerini denetleyin.

Modeli dağıtımla aynı çalışma alanına kaydettiğinizden emin olun. Çalışma alanında bir modelin ayrıntılarını göstermek için:

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

Uyarı

Modelin bilgilerini almak için sürümü veya etiketi belirtmeniz gerekir.

Blobların çalışma alanı depolama hesabında mevcut olup olmadığını da de kontrol edebilirsiniz.

  • Örneğin, blob ise https://foobar.blob.core.windows.net/210212154504-1517266419/WebUpload/210212154504-1517266419/GaussianNB.pkl, var olup olmadığını denetlemek için bu komutu kullanabilirsiniz:

    az storage blob exists --account-name foobar --container-name 210212154504-1517266419 --name WebUpload/210212154504-1517266419/GaussianNB.pkl --subscription <sub-name>`
    
  • Blob varsa, depolama başlatıcısından günlükleri almak için şu komutu kullanabilirsiniz:

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

Özel ağ ile MLFlow model biçimi desteklenmiyor

Yönetilen çevrimiçi uç noktalar için eski ağ yalıtım yöntemiyle birlikte kod içermeyen bir dağıtım yaklaşımıyla bir MLflow modeli dağıtmaya çalıştığınızda bu hata oluşur. Eski ağ yalıtım yöntemini kullanıyorsanız, bu özel ağ özelliği MLFlow modeli biçimiyle birlikte kullanılamaz. Kod içermeyen dağıtım yaklaşımıyla bir MLflow modeli dağıtmanız gerekiyorsa, çalışma alanıyla yönetilen sanal ağı kullanmayı deneyin.

Sınırlardan büyük kaynak istekleri

Kaynaklara yönelik istekler sınırlardan küçük veya buna eşit olmalıdır. Sınırları ayarlamazsanız, işlemlerinizi bir Azure Machine Learning çalışma alanına eklediğinizde varsayılan değerleri ayarlarız. Azure portalında veya komutunu kullanarak sınırları de kontrol az ml compute show edebilirsiniz.

azureml-fe hazır değil

Gelen çıkarım isteklerini dağıtılan hizmetlere yönlendiren ön uç bileşeni (azureml-fe) gerektiğinde otomatik olarak ölçeklendirilir. Bu, k8s uzantısı yüklemeniz sırasında yüklenir.

Bu bileşenin kümede iyi durumda olması, en az bir iyi durumda çoğaltma olması gerekir. Kubernetes çevrimiçi uç noktasını ve dağıtım oluşturma/güncelleştirme isteğini tetiklediğinizde kullanılamazsa bu hata iletisini alırsınız.

Bu sorunu düzeltmek için pod durumunu ve günlüklerini denetleyin; kümede yüklü k8s uzantısını güncelleştirmeyi de deneyebilirsiniz.

HATA: ResourceNotReady

Dağıtımın score.py bir parçası olarak sağlanan öğesini çalıştırmak için Azure, ihtiyaç duyduğu tüm kaynakları score.py içeren bir kapsayıcı oluşturur ve bu kapsayıcıda puanlama betiğini çalıştırır. Bu senaryodaki hata, çalışırken bu kapsayıcının kilitlenmesi ve puanlamanın gerçekleşemeyecek olmasıdır. Bu hata şu durumlarda oluşur:

  • içinde score.pybir hata var. Yaygın sorunları tanılamak için kullanın get-logs :
    • İçeri aktarmaya çalışan bir paket score.py conda ortamına dahil değildir.
    • Söz dizimi hatası.
    • yönteminde init() bir hata.
  • get-logs Herhangi bir günlük üretmiyorsa, bu genellikle kapsayıcının başlatılamadığını gösterir. Bu sorunun hatalarını ayıklamak için bunun yerine yerel olarak dağıtmayı deneyin.
  • Hazır olma veya canlılık yoklamaları doğru ayarlanmamıştır.
  • Kapsayıcı başlatma çok uzun sürüyor, böylece hazır olma veya canlılık araştırması hata eşiğinin ötesinde başarısız oluyor. Bu durumda, kapsayıcıyı başlatmak için daha uzun süre tanıyacak şekilde yoklama ayarlarını yapın. Ya da desteklenen VM SKU'ları arasında daha büyük bir VM SKU'su deneyerek başlatmayı hızlandırabilirsiniz.
  • Kapsayıcının ortam kurulumunda eksik bağımlılık gibi bir hata var.
  • Hatayı aldığınızda TypeError: register() takes 3 positional arguments but 4 were given , flask v2 ile azureml-inference-server-httparasındaki bağımlılığı denetleyin. Daha fazla bilgi için bkz . ÇıKARıM HTTP sunucusu hakkında SSS.

HATA: ResourceNotFound

Aşağıdaki liste, yalnızca yönetilen çevrimiçi uç nokta veya Kubernetes çevrimiçi uç noktasını kullanırken bu hatayla karşılaşabileceğiniz nedenlerdendir:

Resource Manager kaynak bulamıyor

Azure Resource Manager gerekli bir kaynağı bulamadıklarında bu hata oluşur. Örneğin, bir depolama hesabına başvurulduysa ancak belirtildiği yolda bulunamıyorsa bu hatayı alabilirsiniz. Tam yol veya adlarının yazım denetimiyle sağlanmış olabilecek kaynakları iki kez denetlediğinden emin olun.

Daha fazla bilgi için bkz . Kaynak Bulunamadı Hatalarını Çözme.

Kapsayıcı kayıt defteri yetkilendirme hatası

Dağıtım için özel veya başka bir şekilde erişilemeyen kapsayıcı kayıt defterine ait bir görüntü sağlandığında bu hata oluşur. Şu anda API'lerimiz özel kayıt defteri kimlik bilgilerini kabul edemiyor.

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

  1. Özel kayıt defterinizin acrPull rolünü çevrimiçi uç noktanızın sistem kimliğine verin.
  2. Ortam tanımınızda, özel görüntünüzün adresini ve görüntüyü değiştirmeme (derleme) yönergesini belirtin.

Azaltma başarılı olursa, görüntünün oluşturulması gerekmez ve son görüntü adresi verilen görüntü adresidir. Dağıtım zamanında, çevrimiçi uç noktanızın sistem kimliği görüntüyü özel kayıt defterinden çeker.

Daha fazla tanılama bilgisi için bkz . Çalışma Alanı Tanılama API'sini Kullanma.

HATA: operationCanceled

Aşağıdaki liste, yönetilen çevrimiçi uç nokta veya Kubernetes çevrimiçi uç noktasını kullanırken bu hatayla karşılaşabileceğiniz nedenlerden bazılarıdır:

İşlem daha yüksek öncelikli başka bir işlem tarafından iptal edildi

Azure işlemleri belirli bir öncelik düzeyine sahiptir ve en yüksekten en düşüğe kadar yürütülür. Bu hata, işleminiz daha yüksek önceliğe sahip başka bir işlem tarafından geçersiz kılındığında oluşur.

İşlemi yeniden denemek iptal edilmeden gerçekleştirilmesine izin verebilir.

Kilit onayı beklenilirken işlem iptal edildi

Azure operasyonları, gönderildikten sonra kısa bir bekleme süresine sahiptir ve bu süre boyunca yarış koşullarına girmediğimizden emin olmak için bir kilit alır. Gönderdiğiniz işlem başka bir işlemle aynı olduğunda bu hata oluşur. Diğer işlem şu anda devam etmek için kilidi aldığına dair onay bekliyor. İlk istek sonrasında çok erken bir şekilde benzer bir istek gönderdiğinizi gösterebilir.

Bir dakikaya kadar birkaç saniye bekledikten sonra işlemi yeniden denemek, işlemin iptal edilmeden gerçekleştirilmesine izin verebilir.

HATA: SecretsInjectionError

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

  • Gizli diziler dağıtım tanımı tarafından başvuru olarak belirtilse bile (ortam değişkenlerine eşlenmiş) uç nokta kimliğinin çalışma alanı bağlantılarından ve/veya anahtar kasalarından gizli dizileri okuması için Azure RBAC izni yoktur. Değişikliklerin etkili olması için rol atamanın zaman alabileceğini unutmayın.
  • Gizli dizi başvurularının biçimi geçersiz veya belirtilen gizli diziler çalışma alanı bağlantılarında ve/veya anahtar kasalarında yok.

Daha fazla bilgi için bkz. Çevrimiçi uç noktalara gizli dizi ekleme (önizleme) ve Gizli dizi ekleme (önizleme) kullanarak çevrimiçi dağıtımdan gizli dizileri erişme.

HATA: InternalServerError

Kararlı ve güvenilir bir hizmet sağlamak için elimizden geleni yapmamıza rağmen, bazen işler plana uygun gitmez. Bu hatayı alırsanız, bu bir şeyin bizim tarafımızda doğru olmadığı anlamına gelir ve bunu düzeltmemiz gerekir. Tüm ilgili bilgileri içeren bir müşteri destek bileti gönderin ve sorunu çözebiliriz.

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

Kimlik ve kimlik doğrulamasıyla ilgili hatalar:

Crashloopbackoff ile ilgili hatalar:

Puanlama betiğiyle ilgili hatalar:

Diğerleri:

HATA: ACRSecretError

Aşağıdaki liste, Kubernetes çevrimiçi dağıtımlarını oluştururken/güncelleştirirken bu hatayla karşılaşabileceğiniz nedenlerden bazılarıdır:

  • Rol ataması tamamlanmadı. Bu durumda, birkaç saniye bekleyin ve daha sonra yeniden deneyin.
  • Azure ARC (Azure Arc Kubernetes kümesi için) veya Azure Machine Learning uzantısı (AKS için) düzgün yüklenmemiş veya yapılandırılmamış. Azure ARC veya Azure Machine Learning uzantısı yapılandırmasını ve durumunu denetlemeyi deneyin.
  • Kubernetes kümesi yanlış ağ yapılandırmasına sahip, ara sunucuyu, ağ ilkesini veya sertifikayı denetleyin.
    • Özel aks kümesi kullanıyorsanız AKS sanal akında ACR, depolama hesabı, çalışma alanı için özel uç noktalar ayarlamanız gerekir.
  • Azure Machine Learning uzantısı sürümünüzün v1.1.25'ten büyük olduğundan emin olun.

HATA: TokenRefreshFailed

Bu hatanın nedeni, Kubernetes küme kimliği düzgün ayarlanamadığından uzantının Azure'dan asıl kimlik bilgilerini alamıyor olmasıdır. Azure Machine Learning uzantısını yeniden yükleyin ve yeniden deneyin.

HATA: GetAADTokenFailed

Bu hatanın nedeni Kubernetes kümesinin Azure AD belirtecini istemesinin başarısız olması veya zaman aşımına uğradı olması, ağ erişilebilirliğinizi kontrol edip yeniden denemenizdir.

Çalışma alanınız genel ağ erişimini devre dışı bırakmış özel bir çalışma alanıysa Kubernetes kümesi yalnızca özel bağlantı üzerinden bu özel çalışma alanıyla iletişim kurmalıdır.

HATA: ACRAuthenticationChallengeFailed

Bu hatanın nedeni Kubernetes kümesinin kimlik doğrulaması sınaması yapmak için çalışma alanının ACR hizmetine ulaşamamadır. Ağınızı, özellikle de ACR genel ağ erişimini denetleyin ve yeniden deneyin.

Ağı denetlemek için GetAADTokenFailed içindeki sorun giderme adımlarını izleyebilirsiniz.

HATA: ACRTokenExchangeFailed

Bu hatanın nedeni, Azure AD belirteci henüz yetkilendirilmediğinden Kubernetes kümesi exchange ACR belirtecinin başarısız olmasıdır. Rol ataması biraz zaman aldığından bir dakika bekleyip yeniden deneyebilirsiniz.

Bu hata aynı zamanda ACR hizmetine o anda çok fazla istek yapılmasından kaynaklanıyor olabilir, geçici bir hata olmalıdır, daha sonra yeniden deneyebilirsiniz.

HATA: KubernetesUnaccessible

Kubernetes modeli dağıtımları sırasında aşağıdaki hatayı alabilirsiniz:

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

Bu hatayı azaltmak için şunları yapabilirsiniz:

  • Küme için AKS sertifikasını döndürün. Daha fazla bilgi için bkz . Azure Kubernetes Service'te (AKS) Sertifika Döndürme.
  • Yeni sertifika 5 saat sonra olarak güncelleştirilmelidir, böylece 5 saat bekleyip yeniden dağıtabilirsiniz.

HATA: ImagePullLoopBackOff

Kubernetes çevrimiçi dağıtımlarını oluştururken/güncelleştirirken bu hatayla karşılaşabilmenizin nedeni, görüntüleri kapsayıcı kayıt defterinden indirememeniz ve görüntülerin çekme hatasına neden olmasıdır.

Bu durumda, kümenin kapsayıcı kayıt defterinden görüntü çekip çekemediğini küme ağ ilkesini ve çalışma alanı kapsayıcı kayıt defterini de kontrol edebilirsiniz.

HATA: DeploymentCrashLoopBackOff

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

  • Kullanıcı betiğinde score.py söz dizimi hatası veya içeri aktarma hatası var, ardından başlatma sırasında özel durumlar oluşuyor.
  • Veya dağıtım podunun sınırından daha fazla belleğe ihtiyacı vardır.

Bu hatayı azaltmak için, önce dağıtım günlüklerini kullanıcı betiklerindeki özel durumlar için de kontrol edebilirsiniz. Hata devam ederse kaynakları/örnek türü bellek sınırını genişletmeyi deneyin.

HATA: KubernetesCrashLoopBackOff

Aşağıdaki liste, Kubernetes çevrimiçi uç noktalarını/dağıtımlarını oluştururken/güncelleştirirken bu hatayla karşılaşabileceğiniz nedenlerden bazılarıdır:

  • CrashLoopBackoff durumunda takılmış bir veya daha fazla pod, dağıtım günlüğünün var olup olmadığını denetleyebilir ve günlükte hata iletileri olup olmadığını kontrol edebilirsiniz.
  • 'de score.py bir hata var ve puan kodunuzu açtığınızda kapsayıcı kilitlendi, HATA: ResourceNotReady bölümünü izleyebilirsiniz.
  • Puanlama işleminizin dağıtım yapılandırma sınırınızın yetersiz olduğu daha fazla belleğe ihtiyacı var. Dağıtımı daha büyük bir bellek sınırıyla güncelleştirmeyi deneyebilirsiniz.

HATA: NamespaceNotFound

Kubernetes çevrimiçi uç noktalarını oluştururken/güncelleştirirken bu hatayla karşılaşabilirsiniz çünkü kullandığınız Kubernetes işlem ad alanı kümenizde kullanılamaz.

Çalışma alanı portalınızda Kubernetes işlemini ve Kubernetes kümenizdeki ad alanını denetleyebilirsiniz. Ad alanı kullanılamıyorsa, eski işlemden ayrılabilir ve kümenizde zaten var olan bir ad alanı belirterek yeni bir tane oluşturmak için yeniden ekleyebilirsiniz.

HATA: UserScriptInitFailed

Kubernetes çevrimiçi dağıtımlarını oluştururken/güncelleştirirken bu hatayla karşılaşabilirsiniz çünkü karşıya yüklenen score.py dosyanızdaki init işlevi özel durum oluşturdu.

Dağıtım günlüklerini denetledikten sonra özel durum iletisini ayrıntılı olarak görebilir ve özel durumu düzeltebilirsiniz.

HATA: UserScriptImportError

Kubernetes çevrimiçi dağıtımlarını oluştururken/güncelleştirirken bu hatayla karşılaşabilirsiniz. Bunun nedeni, karşıya yüklediğiniz dosyanın kullanılamayan paketleri içeri aktarmasıdır score.py .

Dağıtım günlüklerini denetledikten sonra özel durum iletisini ayrıntılı olarak görebilir ve özel durumu düzeltebilirsiniz.

HATA: UserScriptFunctionNotFound

Kubernetes çevrimiçi dağıtımlarını oluştururken/güncelleştirirken bu hatayla karşılaşabilirsiniz çünkü score.py karşıya yüklediğiniz dosyanın veya run()adlı init() bir işlevi yoktur. Kodunuzu denetleyebilir ve işlevi ekleyebilirsiniz.

HATA: EndpointNotFound

Kubernetes çevrimiçi dağıtımlarını oluştururken/güncelleştirirken bu hatayla karşılaşabilmenizin nedeni, sistemin kümedeki dağıtım için uç nokta kaynağını bulamıyor olmasıdır. Dağıtımı mevcut bir uç noktada veya kümenizde önce bu uç noktayı oluşturmanız gerekir.

HATA: EndpointAlreadyExists

Kubernetes çevrimiçi uç noktası oluştururken bu hatayla karşılaşabilirsiniz çünkü oluşturma uç noktası kümenizde zaten var.

Uç nokta adı çalışma alanı ve küme başına benzersiz olmalıdır, bu nedenle bu durumda başka bir adla uç nokta oluşturmanız gerekir.

HATA: ScoringFeUnhealthy

Kubernetes çevrimiçi uç noktasını/dağıtımını oluştururken/güncelleştirirken bu hatayla karşılaşabilirsiniz çünkü kümede çalışan sistem hizmeti olan Azureml-fe bulunamadı veya iyi durumda değil.

Bu sorunu gidermek için kümenizdeki Azure Machine Learning uzantısını yeniden yükleyebilir veya güncelleştirebilirsiniz.

HATA: ValidateScoringFailed

Kubernetes çevrimiçi dağıtımlarını oluştururken/güncelleştirirken bu hatayla karşılaşabilirsiniz çünkü model dağıtımı işlenirken puanlama isteği URL'si doğrulaması başarısız oldu.

Bu durumda, önce uç nokta URL'sini denetledikten sonra dağıtımı yeniden dağıtmayı deneyebilirsiniz.

HATA: InvalidDeploymentSpec

Kubernetes çevrimiçi dağıtımlarını oluştururken/güncelleştirirken bu hatayla karşılaşabilirsiniz çünkü dağıtım belirtimi geçersizdir.

Bu durumda, hata iletisini de kontrol edebilirsiniz.

  • geçerli olduğundan emin instance count olun.
  • Otomatik ölçeklendirmeyi etkinleştirdiyseniz ve maximum instance count öğesinin minimum instance count her ikisinin de geçerli olduğundan emin olun.

HATA: PodUnschedulable

Aşağıdaki liste, Kubernetes çevrimiçi uç noktalarını/dağıtımlarını oluştururken/güncelleştirirken bu hatayla karşılaşabileceğiniz nedenlerden bazılarıdır:

  • Kümenizdeki kaynakların yetersiz olması nedeniyle düğümlere pod zamanlanamıyor.
  • Düğüm eşleştirme düğüm benzitesi/seçicisi yok.

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

  • node selector Kullandığınız tanımı instance type ve node label küme düğümlerinizin yapılandırmasını denetleyin.
  • AKS kümesinin düğüm SKU boyutunu veya Arc-Kubernetes kümesinin düğüm kaynağını denetleyin instance type .
    • Kümenin kaynağı yetersizse, örnek türü kaynak gereksinimini azaltabilir veya daha küçük kaynak gerektiren başka bir örnek türü kullanabilirsiniz.
  • Kümenin dağıtım gereksinimini karşılayacak başka kaynağı yoksa, kaynakları serbest bırakmak için bazı dağıtımı silin.

HATA: PodOutOfMemory

Çevrimiçi dağıtımı oluştururken/güncelleştirirken bu hatayla karşılaşabilirsiniz. Dağıtım için verdiğiniz bellek sınırı yetersizdir. Bu hatayı azaltmak için bellek sınırını daha büyük bir değere ayarlayabilir veya daha büyük bir örnek türü kullanabilirsiniz.

HATA: InferencingClientCallFailed

Kubernetes çevrimiçi uç noktalarını/dağıtımlarını oluştururken/güncelleştirirken bu hatayla karşılaşabilmenizin nedeni, Kubernetes kümesinin k8s uzantısının bağlanamaz olmasıdır.

Bu durumda, işlemlerinizi ayırıp yeniden ekleyebilirsiniz .

Not

Yeniden eklemeyle ilgili hataları gidermek için lütfen daha önce ayrılmış işlemle aynı yapılandırmayla (aynı işlem adı ve ad alanı gibi) yeniden bağlanmayı garanti edin, aksi takdirde başka hatalarla karşılaşabilirsiniz.

Hala çalışmıyorsa, kümeye erişebilen yöneticiden geçiş kubectl get po -n azureml sunucusu podlarının çalışıp çalışmadığını denetlemesini isteyebilirsiniz.

Otomatik ölçeklendirme sorunları

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

Kubernetes çevrimiçi uç noktası için, Kubernetes kümesindeki tüm model dağıtımları için otomatik ölçeklendirmeyi işleyen bir ön uç bileşeni olan Azure Machine Learning çıkarım yönlendiricisi vardır. Kubernetes çıkarım yönlendirmesinin otomatik ölçeklendirmesi bölümünde daha fazla bilgi bulabilirsiniz

Yaygın model tüketimi hataları

Aşağıdaki liste, uç nokta invoke işlem durumundan kaynaklanan yaygın model tüketimi hatalarının listesidir.

Bant genişliği sınırı sorunları

Yönetilen çevrimiçi uç noktaların her uç nokta için bant genişliği sınırları vardır. Sınır yapılandırmasını çevrimiçi uç noktaların sınırları içinde bulabilirsiniz. Bant genişliği kullanımınız sınırı aşarsa isteğiniz gecikir. Bant genişliği gecikmesini izlemek için:

  • Geçerli bant genişliği kullanımını anlamak için "Ağ baytları" ölçümünü kullanın. Daha fazla bilgi için bkz . Yönetilen çevrimiçi uç noktaları izleme.
  • Bant genişliği sınırı zorlanırsa döndürülen iki yanıt fragmanı vardır:
    • ms-azureml-bandwidth-request-delay-ms: istek akışı aktarımı için geçen milisaniye cinsinden gecikme süresi.
    • ms-azureml-bandwidth-response-delay-ms: yanıt akışı aktarımı için geçen milisaniye cinsinden gecikme süresi.

HTTP durum kodu

REST istekleriyle çevrimiçi uç noktalara eriştiğiniz zaman, döndürülen durum kodları HTTP durum kodları standartlarına uyar. Bunlar, uç nokta çağırma ve tahmin hatalarının HTTP durum kodlarıyla eşlenme şekliyle ilgili ayrıntılardır.

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

Aşağıdaki tabloda REST istekleriyle yönetilen çevrimiçi uç noktalar kullanılırken sık karşılaşılan hata kodları yer alır:

Durum kodu Neden tümceciği Bu kod neden döndürülebilir?
200 Tamam Modeliniz, gecikme süreniz içinde başarıyla yürütüldü.
Kategori 401 Yetkisiz puan gibi istenen eylemi gerçekleştirme izniniz yok veya belirtecinizin süresi dolmuş veya yanlış biçimde. Daha fazla bilgi için bkz . uç nokta kimlik doğrulaması kavramı ve uç nokta için kimlik doğrulaması yapma.
404 Bulunamadı Uç noktanın pozitif ağırlıklı geçerli bir dağıtımı yoktur.
408 İstek zaman aşımı Model yürütme, model dağıtım yapılandırmanızın altında request_settings sağlanan request_timeout_ms zaman aşımından daha uzun sürdü.
424 Model Hatası Model kapsayıcınız 200 olmayan bir yanıt döndürürse Azure 424 döndürür. Model Status Code Uç noktanızın Azure İzleyici Ölçüm Gezgini'nin ölçüm altındaki Requests Per Minute boyutu denetleyin. Veya yanıt üst bilgilerini ms-azureml-model-error-statuscode ve ms-azureml-model-error-reason daha fazla bilgi için denetleyin. 424 canlılık veya hazır olma yoklaması başarısız olursa, yoklama ayarlarını kapsayıcının canlılığını veya hazır olma süresini daha uzun süre tanıyacak şekilde ayarlamayı göz önünde bulundurun.
Kategori 429 Çok fazla bekleyen istek var Modeliniz şu anda işleyebileceğinden daha fazla istek alıyor. Azure Machine Learning, sorunsuz çalışma garantisi vermek için herhangi bir anda paralel olarak en fazla 2 * max_concurrent_requests_per_instance * instance_count requests işlemeye izin veren bir sistem uygulamıştır. Bu üst sınırı aşan diğer istekler reddedilir. Bu ayarları doğrulamak ve ayarlamak için request_settings ve scale_settings bölümlerinin altında model dağıtım yapılandırmanızı gözden geçirebilirsiniz. Ayrıca, request Ayarlar için YAML tanımında açıklandığı gibi ortam değişkeninin WORKER_COUNT doğru şekilde geçirildiğinden emin olmak önemlidir.

Otomatik ölçeklendirme kullanıyorsanız ve bu hatayı alıyorsanız, modeliniz istekleri sistemin ölçeğini artıramaya kıyasla daha hızlı alıyor demektir. Bu durumda, sisteme ayarlanması gereken zamanı vermek için istekleri üstel geri alma ile yeniden göndermeyi göz önünde bulundurun. Örnek sayısını hesaplamak için kod kullanarak örnek sayısını da artırabilirsiniz. Otomatik ölçeklendirmeyi ayarlamayla birlikte bu adımlar, modelinizin istek akışını işlemeye hazır olduğundan emin olunmasını sağlar.
Kategori 429 Hız sınırlı Saniye başına istek sayısı yönetilen çevrimiçi uç noktaların sınırlarına ulaştı.
500 İç sunucu hatası Azure Machine Learning tarafından sağlanan altyapı başarısız oluyor.

Kubernetes çevrimiçi uç noktaları için yaygın hata kodları

Aşağıdaki tabloda, REST istekleriyle Kubernetes çevrimiçi uç noktaları kullanılırken sık karşılaşılan hata kodları yer alır:

Durum kodu Neden tümceciği Bu kod neden döndürülebilir?
409 Çakışma hatası Bir işlem zaten devam ederken, aynı çevrimiçi uç noktadaki tüm yeni işlemler 409 çakışma hatasıyla yanıt verir. Örneğin, çevrimiçi uç nokta oluşturma veya güncelleştirme işlemi sürüyorsa ve yeni bir Delete işlemi tetiklerseniz hata oluşturur.
502 score.py dosyasının run() yönteminde bir özel durum oluşturdu veya kilitlendi içinde score.pybir hata olduğunda, örneğin conda ortamında içeri aktarılan paket yok, söz dizimi hatası veya yöntemde init() bir hata var. Dosyada hata ayıklamak için burayı izleyebilirsiniz.
503 Saniye başına isteklerde büyük ani artışlar alma Otomatik ölçeklendirici, yükteki aşamalı değişiklikleri işlemek için tasarlanmıştır. saniye başına isteklerde büyük ani artışlar alırsanız, istemciler 503 HTTP durum kodu alabilir. Otomatik ölçeklendirici hızlı tepki vermesine rağmen, AKS'nin daha fazla kapsayıcı oluşturması önemli miktarda zaman alır. 503 durum kodunu önlemek için burayı takip edebilirsiniz.
504 İstek zaman aşımına uğradı 504 durum kodu, isteğin zaman aşımına uğradı olduğunu gösterir. Varsayılan zaman aşımı ayarı 5 saniyedir. Gereksiz çağrıları kaldırmak için score.py değiştirerek zaman aşımını artırabilir veya uç noktayı hızlandırmayı deneyebilirsiniz. Bu eylemler sorunu çözmezse, score.py dosyasında hata ayıklamak için burayı izleyebilirsiniz. Kod yanıt vermeyen bir durumda veya sonsuz bir döngüde olabilir.
500 İç sunucu hatası Azure Machine Learning tarafından sağlanan altyapı başarısız oluyor.

503 durum kodlarını önleme

Kubernetes çevrimiçi dağıtımları, Azure Machine Learning çıkarım yönlendiricisinde bulabileceğiniz ek yükü desteklemek için çoğaltmaların eklenmesini sağlayan otomatik ölçeklendirmeyi destekler. Ölçeği artırma/azaltma kararları geçerli kapsayıcı çoğaltmalarının kullanımına bağlıdır.

503 durum kodunu önlemeye yardımcı olabilecek iki şey vardır:

İpucu

Bu iki yaklaşım tek tek veya birlikte kullanılabilir.

  • Otomatik ölçeklendirmenin yeni çoğaltmalar oluşturduğu kullanım düzeyini değiştirin. değerini daha düşük bir değere ayarlayarak kullanım hedefini autoscale_target_utilization ayarlayabilirsiniz.

    Önemli

    Bu değişiklik çoğaltmaların daha hızlı oluşturulmasına neden olmaz. Bunun yerine, daha düşük bir kullanım eşiğinde oluşturulurlar. Hizmet %70 kullanılana kadar beklemek yerine değerin %30 olarak değiştirilmesi, %30 kullanım gerçekleştiğinde çoğaltmaların oluşturulmasına neden olur.

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

  • En az çoğaltma sayısını değiştirin. En düşük çoğaltmaların artırılması, gelen ani artışları işlemek için daha büyük bir havuz sağlar.

    Örnek sayısını artırmak için bu kodları izleyerek gerekli çoğaltmaları hesaplayabilirsiniz.

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

    Not

    Yeni minimum çoğaltmaların işleyebileceğinden daha büyük istek artışları alırsanız yeniden 503 alabilirsiniz. Örneğin uç noktanıza gelen trafik arttıkça en düşük çoğaltmaları artırmanız gerekebilir.

Örnek sayısını hesaplama

Örnek sayısını artırmak için aşağıdaki kodu kullanarak gerekli çoğaltmaları hesaplayabilirsiniz:

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

concurrent_requests = target_rps * request_process_time / target_utilization

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

CORS ilkesi tarafından engellendi

Çevrimiçi uç noktalar (v2) şu anda Çıkış Noktaları Arası Kaynak Paylaşımı'nı (CORS) yerel olarak desteklememektedir. Web uygulamanız CORS denetim öncesi isteklerini düzgün işlemeden uç noktayı çağırmaya çalışırsa aşağıdaki hata iletisini görebilirsiniz:

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

CORS denetim öncesi isteklerini işlemek için ara katman olarak Azure İşlevleri, Azure Uygulaması lication Gateway veya herhangi bir hizmeti kullanmanızı öneririz.

Yaygın ağ yalıtımı sorunları

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

Azure Machine Learning çalışma alanı için v1_legacy_modeyapılandırılabilir ve bu da v2 API'lerini devre dışı bırakır. Yönetilen çevrimiçi uç noktalar v2 API platformunun bir özelliğidir ve çalışma alanı için etkinleştirilirse v1_legacy_mode çalışmaz.

Önemli

'yi devre dışı bırakmadan v1_legacy_modeönce ağ güvenlik ekibinize danışın. Ağ güvenlik ekibiniz tarafından bir nedenle etkinleştirilmiş olabilir.

özelliğini devre dışı bırakma v1_legacy_modehakkında bilgi için bkz . v2 ile ağ yalıtımı.

Anahtar tabanlı kimlik doğrulamasıyla çevrimiçi uç nokta oluşturma işlemi başarısız oluyor

Çalışma alanınız için Azure Key Vault'un ağ kurallarını listelemek için aşağıdaki komutu kullanın. değerini anahtar kasanızın adıyla değiştirin <keyvault-name> :

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

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

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

değeri bypass değilseAzureServices, anahtarı olarak ayarlamak 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 dağıtım için devre dışı bırakılıp bırakılmadiğini denetleyin. Bu bayrak etkinse ve kapsayıcı kayıt defterinin görünürlüğü özelse, bu hata beklenir.

  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ın Azure Container Registry adıyla değiştirin <registry-name> :

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

    Yanıt belgesinde alanın olarak Approvedayarlandığını status doğrulayın. Onaylanmamışsa, onaylamak için aşağıdaki komutu kullanın. değerini önceki komuttan döndürülen adla değiştirin <private-endpoint-name> :

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

Puanlama uç noktası çözümlenemiyor

  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:

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

    Yanıt bir adres içeriyor. Bu adres sanal ağ tarafından sağlanan aralıkta olmalıdır

    Not

    Kubernetes çevrimiçi uç noktası için uç nokta ana bilgisayar adı, Kubernetes kümenizde belirtilen CName (etki alanı adı) olmalıdır. Bu bir HTTP uç noktasıysa, IP adresi doğrudan Studio kullanıcı arabiriminde alabileceğiniz uç nokta URI'sinde yer alır. Uç noktanın IP adresini almanın diğer yolları Güvenli Kubernetes çevrimiçi uç noktasında bulunabilir.

  3. Konak adı komutuyla nslookup çözümlenmezse:

    Yönetilen çevrimiçi uç nokta için

    1. Sanal ağ için özel DNS bölgesinde bir A kaydı olup olmadığını denetleyin.

      Kayıtları denetlemek için aşağıdaki komutu kullanın:

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

      Sonuçlara benzer *.<GUID>.inference.<region>bir girdi bulunmalıdır.

    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 dns kullanılarak ayarlanmışsa Çalışma alanınızı özel dns sunucusuyla kullanma, çözümlemenin özel DNS'den doğru çalışıp çalışmadığını doğrulamak için aşağıdaki komutu kullanın.

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

    Kubernetes çevrimiçi uç noktası için

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

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

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

      HTTP için

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

    Curl HTTP'leri başarısız olursa (örneğin, zaman aşımı) ancak HTTP çalışıyorsa lütfen sertifikanın geçerli olup olmadığını denetleyin.

    Bu, A kaydına çözümlenemezse, çözümlemenin Azure DNS'den (168.63.129.16) çalışıp çalışmadığını doğrulayın.

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

    Bu başarılı olursa, özel DNS'de özel bağlantı için koşullu iletici sorunlarını giderebilirsiniz.

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

  1. Dağıtımın başarıyla dağıtılıp dağıtılmadığını görmek için aşağıdaki komutu kullanın:

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

    Dağıtım başarıyla tamamlandıysa değeri state 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
    

    İpucu

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

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

  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> 
    

    Dağıtıma bir istek gönderdiğinizde puanlama kodunu çalıştırırken sorun olup olmadığını görmek için günlükleri inceleyin.

Çıkarım sunucusu sorunlarını giderme

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

Temel adımlar

Sorun gidermenin temel adımları şunlardır:

  1. Python ortamınız için sürüm bilgilerini toplayın.
  2. Ortam dosyasında belirtilen azureml-inference-server-http python paketi sürümünün başlangıç günlüğünde görüntülenen AzureML Çıkarım HTTP sunucusu sürümüyle eşleştiğinden emin olun. Bazen Pip'in bağımlılık çözümleyicisi yüklenen paketlerin beklenmeyen sürümlerine yol açar.
  3. Ortamınızda Flask (ve veya bağımlılıkları) belirtirseniz, bunları kaldırın. Bağımlılıklar , , Jinja2, itsdangerous, Werkzeug, MarkupSafeve clickbağımlılıklarıdırFlask. Flask, sunucu paketinde bağımlılık olarak listelenir ve sunucumuzun yüklemesine izin vermek en iyisidir. Bu şekilde sunucu Flask'in yeni sürümlerini desteklediğinde bunları otomatik olarak alırsınız.

Sunucu sürümü

Sunucu paketi azureml-inference-server-http PyPI'da yayımlanır. Değişiklik günlüğümüzü ve önceki tüm sürümleri PyPI sayfamızda bulabilirsiniz. Önceki bir sürümü kullanıyorsanız en son sürüme güncelleştirin.

  • 0.4.x: ≤ ve içindeki eğitim görüntülerinde 20220601azureml-defaults>=1.34,<=1.43paketlenen sürüm. 0.4.13 son kararlı sürümdür. sürümünden 0.4.11önce sunucuyu kullanıyorsanız, 'den jinja2ad Markup içeri aktaramama gibi Flask bağımlılık sorunlarını görebilirsiniz. Mümkünse veya 0.8.x sürümüne 0.4.13 (en son sürüm) yükseltmeniz önerilir.
  • 0.6.x: Görüntülerin ≤ 20220516 çıkarıldığında önceden yüklenmiş olan sürüm. En son kararlı sürüm: 0.6.1.
  • 0.7.x: Flask 2'yi destekleyen ilk sürüm. En son kararlı sürüm: 0.7.7.
  • 0.8.x: Günlük biçimi değişti ve Python 3.6 desteği bırakıldı.

Paket bağımlılıkları

Sunucu azureml-inference-server-http için en uygun paketler aşağıdaki paketlerdir:

  • Şişe
  • opencensus-ext-azure
  • çıkarım şeması

Python ortamınızda belirttiyseniz azureml-defaults paket azureml-inference-server-http bağlıdır ve otomatik olarak yüklenir.

İpucu

Python SDK v1 kullanıyorsanız ve Python ortamınızda açıkça belirtmezseniz azureml-defaults SDK paketi sizin için ekleyebilir. Ancak, SDK'nın açık olduğu sürüme kilitlenir. Örneğin, SDK sürümü ise 1.38.0ortamın pip gereksinimlerine eklenir azureml-defaults==1.38.0 .

Sık sorulan sorular

1. Sunucu başlatma sırasında aşağıdaki hatayla karşılaştım:


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

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

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

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

Python ortamınızda Flask 2 yüklü ancak Flask 2'yi azureml-inference-server-http desteklemeyen bir sürümünü çalıştırıyorsunuz. Flask 2 desteği, içinde azureml-inference-server-http>=0.7.0de azureml-defaults>=1.44bulunan öğesine eklenir.

  • Bu paketi bir AzureML docker görüntüsünde kullanmıyorsanız en son veya azureml-defaultssürümünü azureml-inference-server-http kullanın.

  • Bu paketi bir AzureML docker görüntüsüyle kullanıyorsanız Temmuz 2022'de veya sonrasında yerleşik bir görüntü kullandığınızdan emin olun. Görüntü sürümü kapsayıcı günlüklerinde kullanılabilir. Aşağıdakine benzer bir günlük bulabilmelisiniz:

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

    Görüntünün derleme tarihi yukarıdaki örnekte 20220708veya 8 Temmuz 2022'de yer alan "Gerçekleştirme Derlemesi"nin ardından görünür. Bu görüntü Flask 2 ile uyumludur. Kapsayıcı günlüğünüzde bunun gibi bir başlık görmüyorsanız, görüntünüz güncel değildir ve güncelleştirilmelidir. CUDA görüntüsü kullanıyorsanız ve daha yeni bir görüntü bulamıyorsanız, görüntünüzün AzureML Kapsayıcıları'nda kullanım dışı olup olmadığını denetleyin. Varsa, yenilerini bulabilmeniz gerekir.

  • Sunucuyu çevrimiçi uç noktayla kullanıyorsanız, günlükleri Azure Machine Learning stüdyosu'deki çevrimiçi uç nokta sayfasındaki "Dağıtım günlükleri" altında da bulabilirsiniz. SDK v1 ile dağıtım yaparsanız ve dağıtım yapılandırmanızda açıkça bir görüntü belirtmezseniz, varsayılan olarak yerel SDK araç takımınızla eşleşen ve görüntünün en son sürümü olmayan bir openmpi4.1.0-ubuntu20.04 sürümünü kullanırsınız. Örneğin, SDK 1.43 varsayılan olarak uyumsuz olan öğesini kullanır openmpi4.1.0-ubuntu20.04:20220616. Dağıtımınız için en son SDK'yi kullandığınızdan emin olun.

  • Bir nedenle görüntüyü güncelleştiremiyorsanız, eski sürüm sunucusunu ile Flask 1.0.xyükleyecek olan veya azureml-inference-server-http~=0.4.13sabitleyerek azureml-defaults==1.43 geçici olarak sorundan kaçınabilirsiniz.

2. , , MarkupSafeclickjinja2veya ModuleNotFoundError modüllerinde opencensusveya başlatma sırasında aşağıdaki ileti gibi bir ImportError veya ile karşılaştım:

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

Sunucunun eski sürümleri (<= 0.4.10), Flask'in bağımlılığını uyumlu sürümlere sabitlemedi. Bu sorun, sunucunun en son sürümünde düzeltildi.

Sonraki adımlar