Ç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:
- Modellerinizi buluta dağıtmadan önce test etmek ve hatalarını ayıklamak için yerel dağıtımı kullanın.
- Sorunları ayıklamaya yardımcı olması için kapsayıcı günlüklerini kullanın.
- Oluşabilecek yaygın dağıtım hatalarını ve bunları nasıl düzelteceğinizi öğrenin.
HTTP durum kodları bölümünde, REST istekleriyle uç noktaları 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'in ücretsiz veya ücretli sürümüne sahip etkin bir Azure aboneliği. Ücretsiz deneme Azure aboneliği edinin.
- Azure Machine Learning çalışma alanı.
- Azure CLI ve Azure Machine Learning CLI v2. CLI'yı (v2) yükleyin, ayarlayın ve kullanın.
İstek izleme
Desteklenen iki izleme üst bilgisi vardır:
x-request-id
sunucu izleme için ayrılmıştır. Azure Machine Learning, geçerli bir GUID olduğundan emin olmak için bu üst bilgiyi geçersiz kılar. Başarısız bir istek için destek bileti oluşturduğunuzda, araştırmayı hızlandırmak için başarısız istek kimliğini ekleyin. Alternatif olarak, bölgenin adını ve uç nokta adını belirtin.x-ms-client-request-id
istemci izleme senaryoları için kullanılabilir. Bu üst bilgi yalnızca alfasayısal karakterleri, kısa çizgileri ve alt çizgileri kabul eder ve en fazla 40 karaktere kadar kesilir.
Yerel olarak dağıtma
Yerel dağıtım, modeli yerel bir Docker ortamına dağıtma anlamına gelir. Yerel dağıtım, yerel uç noktanın oluşturulmasını, güncelleştirilmesini ve silinmesini destekler ve uç noktadan günlükleri çağırmanıza ve almanıza olanak tanır. Yerel dağıtım, buluta dağıtımdan önce test etmek ve hata ayıklamak için kullanışlıdır.
İpucu
Puanlama betiğinizde yerel olarak hata ayıklamak için Azure Machine Learning çıkarım HTTP sunucusu Python paketini de kullanabilirsiniz. Çıkarım sunucusuyla hata ayıklama, yerel uç noktalara dağıtmadan önce puanlama betiğinin hatalarını ayıklamanıza yardımcı olur, böylece dağıtım kapsayıcısı yapılandırmalarından etkilenmeden hata ayıklayabilirsiniz.
Azure CLI veya Python SDK ile yerel olarak dağıtabilirsiniz. Azure Machine Learning stüdyosu yerel dağıtımı veya yerel uç noktaları desteklemez.
Yerel dağıtımı kullanmak için uygun komuta ekleyin --local
.
az ml online-deployment create --endpoint-name <endpoint-name> -n <deployment-name> -f <spec_file.yaml> --local
Yerel dağıtım sırasında aşağıdaki adımlar gerçekleşir:
- 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.
- Docker, yeni kapsayıcıyı model ve kod dosyaları gibi bağlı yerel yapıtlarla başlatır.
Daha fazla bilgi için bkz . Yerel uç nokta kullanarak yerel olarak dağıtma ve hata ayıklama.
İpucu
Uç noktalarınızı yerel olarak test etmek ve hatalarını ayıklamak için Visual Studio Code kullanabilirsiniz. Daha fazla bilgi için bkz . Visual Studio Code'da çevrimiçi uç noktalarda yerel olarak hata ayıklama.
Kapsayıcı günlüklerini alma
Modelin dağıtıldığı sanal makineye (VM) doğrudan erişim alamazsınız, ancak VM üzerinde çalışan bazı kapsayıcılardan günlükleri alabilirsiniz. Edindiğiniz bilgi miktarı, dağıtımın sağlama durumuna bağlıdır. Belirtilen kapsayıcı çalışır durumdaysa konsol çıkışını görürsünüz. Aksi takdirde, daha sonra yeniden denemek için bir ileti alırsınız.
Günlükleri aşağıdaki kapsayıcı türlerinden alabilirsiniz:
- Çıkarım sunucusu konsol günlüğü, puanlama betiği score.py kodunuzdan yazdırma ve günlüğe kaydetme işlevlerinin çıkışını içerir.
- Depolama başlatıcı günlükleri, kod ve model verilerinin kapsayıcıya başarıyla indirilip indirilmediği hakkında bilgi içerir. Kapsayıcı, çıkarım sunucusu kapsayıcısı çalışmaya başlamadan önce çalışır.
Kubernetes çevrimiçi uç noktaları için yöneticiler modeli dağıttığınız kümeye doğrudan erişebilir ve Kubernetes'teki günlükleri kontrol edebilir. Örneğin:
kubectl -n <compute-namespace> logs <container-name>
Not
Python günlüğü kullanıyorsanız, iletilerin günlüklerde yayımlanması için gibi INFO
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
Or
az ml online-deployment get-logs --endpoint-name <endpoint-name> --name <deployment-name> --lines 100
Varsayılan olarak, günlükler çıkarım sunucusundan çekilir. geçirerek –-container storage-initializer
depolama başlatıcı kapsayıcısından günlükleri alabilirsiniz.
--workspace-name
bu parametreleri aracılığıyla az configure
ayarlamadıysanız ve komutlarına ekleyin--resource-group
. Bu parametreleri ayarlama hakkında bilgi edinmek veya şu anda değer ayarladıysanız aşağıdaki komutu çalıştırın:
az ml online-deployment get-logs -h
Daha fazla bilgi görmek için komutları ekleyin --help
veya --debug
ekleyin.
Sık karşılaşılan dağıtım hataları
Dağıtım işlemi durumu aşağıdaki yaygın dağıtım hatalarını bildirebilir:
-
Hem yönetilen çevrimiçi uç nokta hem de Kubernetes çevrimiçi uç noktası için ortak:
- Abonelik yok
- Yetkilendirme hatası nedeniyle başlangıç görevi başarısız oldu
- Kaynakta yanlış rol atamaları nedeniyle başlangıç görevi başarısız oldu
- Geçersiz şablon işlevi belirtimi
- Kullanıcının kapsayıcı görüntüsü indirilemiyor
- Kullanıcı modeli indirilemiyor
Kubernetes çevrimiçi uç noktasıyla sınırlıdır:
Bir Kubernetes çevrimiçi dağıtımı oluşturuyor veya güncelleştiriyorsanız bkz . Kubernetes dağıtımlarına özgü yaygın hatalar.
HATA: ImageBuildFailure
Docker görüntü ortamı oluşturulurken bu hata döndürülür. Hata hakkında daha fazla bilgi için derleme günlüğünü de kontrol edebilirsiniz. Derleme günlüğü, Azure Machine Learning çalışma alanınız için varsayılan depolama alanında bulunur.
Tam konum hatanın bir parçası olarak döndürülebilir, örneğin "the build log under the storage account '[storage-account-name]' in the container '[container-name]' at the path '[path-to-the-log]'"
.
Aşağıdaki bölümlerde yaygın görüntü derleme hatası senaryoları açıklanmaktadır:
- Azure Container Registry yetkilendirme hatası
- Sanal ağ ile özel bir çalışma alanında ayarlı olmayan görüntü derleme işlem
- Görüntü derleme zaman aşımına uğradı
- Genel veya bilinmeyen hata
Azure Container Registry yetkilendirme hatası
Geçerli kimlik bilgileriyle kapsayıcı kayıt defterine erişememenizi gösteren bir hata iletisi "container registry authorization failure"
. Çalışma alanı kaynak anahtarlarının zaman uyumsuz hale getirilmesi bu hataya neden olabilir ve otomatik olarak eşitlenmesi biraz zaman alabilir. Ancak, az ml workspace sync-keys ile anahtar eşitlemesi için el ile çağrı yapabilir ve bu da yetkilendirme hatasını çözebilir.
Bir sanal ağın arkasındaki kapsayıcı kayıt defterleri de yanlış ayarlanmışsa bu hatayla karşılaşabilir. Sanal ağın düzgün ayarlandığını doğrulayın.
Sanal ağ ile özel bir çalışma alanında ayarlı olmayan görüntü derleme işlem
Hata iletisinde belirtiliyorsa "failed to communicate with the workspace's container registry"
ve bir sanal ağ kullanıyorsanız ve çalışma alanının kapsayıcı kayıt defteri özelse ve özel bir uç noktayla yapılandırılmışsa, Container Registry'nin sanal ağda görüntü oluşturmasına izin vermeniz gerekir.
Görüntü derleme zaman aşımına uğradı
Görüntü derleme zaman aşımları genellikle bir görüntünün dağıtım oluşturma zaman çerçevesi içinde derlemeyi tamamlayamayacak kadar büyük olmasından kaynaklanabilir. Görüntü derleme günlüklerinizi hatanın belirttiği konumda denetleyin. Günlükler, görüntü derlemesinin zaman aşımına uğradıklarında kesilir.
Bu sorunu çözmek için görüntünüzü ayrı olarak derleyin; böylece görüntünün yalnızca dağıtım oluşturma sırasında çekilmesi gerekir. ImageBuild zaman aşımlarınız varsa varsayılan yoklama ayarlarını da gözden geçirin.
Genel görüntü derleme hatası
Hata hakkında daha fazla bilgi için derleme günlüğünü denetleyin. Derleme günlüğünde belirgin bir hata bulunmazsa ve son satır ise Installing pip dependencies: ...working...
, hataya bir bağımlılık neden olabilir. Conda dosyanıza sürüm bağımlılıklarını sabitlemek bu sorunu çözebilir.
Buluta dağıtmadan önce modellerinizi test etmek ve hatalarını ayıklamak için yerel olarak dağıtmayı deneyin.
HATA: OutOfQuota
Azure hizmetlerini kullanırken aşağıdaki kaynakların kotası tükenebilir:
Yalnızca Kubernetes çevrimiçi uç noktaları için Kubernetes kaynağının kotası da tükenebilir.
CPU kotası
Modeli dağıtmak için yeterli işlem kotanıza sahip olmanız gerekir. CPU kotası abonelik başına, çalışma alanı başına, SKU başına ve bölge başına kaç sanal çekirdeğin kullanılabilir olduğunu tanımlar. Her dağıtım kullanılabilir kotayı çıkarır ve sildikten sonra SKU türüne göre geri ekler.
Silebileceğiniz kullanılmayan dağıtımlar olup olmadığını denetleyebilirsiniz veya kota artışı isteği gönderebilirsiniz.
Küme kotası
Hata, OutOfQuota
yeterli Azure Machine Learning işlem kümesi kotanız olmadığında oluşur. Kota, Azure bulutunda CPU veya GPU düğümlerini dağıtmak için aynı anda kullanabileceğiniz abonelik başına toplam küme sayısını tanımlar.
Disk kotası
Hata, OutOfQuota
modelin boyutu kullanılabilir disk alanından daha büyük olduğunda ve model indirilemediğinde oluşur. Daha fazla disk alanı olan bir SKU kullanmayı veya görüntü ve model boyutunu azaltmayı deneyin.
Bellek kotası
Hata, OutOfQuota
modelin bellek ayak izi kullanılabilir bellekten daha büyük olduğunda oluşur. Daha fazla belleğe sahip bir SKU deneyin.
Rol atama kotası
Yönetilen çevrimiçi uç nokta oluşturduğunuzda, yönetilen kimliğin çalışma alanı kaynaklarına erişmesi için rol ataması gerekir. Rol atama sınırına ulaştıysanız, bu abonelikteki kullanılmayan bazı rol atamalarını silmeyi deneyin. Azure portalında Azure aboneliğiniz için Erişim denetimi'ni seçerek tüm rol atamalarını denetleyebilirsiniz.
Uç nokta kotası
Bu abonelikte kullanılmayan bazı uç noktaları silmeyi deneyin. Tüm uç noktalarınız etkin bir şekilde kullanılıyorsa, uç nokta sınırı artışı istemeyi deneyin. Uç nokta sınırı hakkında daha fazla bilgi edinmek için bkz . Azure Machine Learning çevrimiçi uç noktaları ve toplu iş uç noktaları ile uç nokta kotası.
Kubernetes kotası
Bu OutOfQuota
dağıtım için zamanlanamayan düğümler nedeniyle istenen CPU veya bellek sağlanamıyorsa hata oluşur. Örneğin, düğümler kordonlanmış veya başka bir şekilde kullanılamıyor olabilir.
Hata iletisi genellikle kümedeki kaynak yetersizlik durumunu gösterir, örneğin OutOfQuota: Kubernetes unschedulable. Details:0/1 nodes are available: 1 Too many pods...
. Bu ileti, kümede çok fazla pod olduğu ve isteğinize göre yeni modeli dağıtmak için yeterli kaynak olmadığı anlamına gelir.
Bu sorunu gidermek için aşağıdaki azaltmaları deneyin:
Kubernetes kümesini tutan BT operatörleri, bazı kaynakları serbest bırakmak için daha fazla düğüm eklemeyi veya kümedeki kullanılmayan bazı podları temizlemeyi deneyebilir.
Modelleri dağıtan makine öğrenmesi mühendisleri, dağıtımın kaynak isteğini azaltmayı deneyebilir.
- Kaynak isteğini dağıtım yapılandırmasında kaynak bölümü aracılığıyla doğrudan tanımlarsanız, kaynak isteğini azaltmayı deneyin.
- Model dağıtımı için kaynak tanımlamak için kullanırsanız
instance_type
, örnek türü kaynak yapılandırmasını ayarlamak için BT operatörüne başvurun. Daha fazla bilgi için bkz . Örnek türlerini oluşturma ve yönetme.
Bölge genelinde VM kapasitesi
Bölgede Azure Machine Learning kapasitesinin olmaması nedeniyle hizmet belirtilen VM boyutunu sağlayamadı. Daha sonra yeniden deneyin veya farklı bir bölgeye dağıtmayı deneyin.
Diğer kota
Dağıtımın bir parçası olarak sağladığınız score.py dosyasını çalıştırmak için Azure, score.py gereken tüm kaynakları içeren bir kapsayıcı oluşturur. Ardından Azure Machine Learning bu kapsayıcıda puanlama betiğini çalıştırır. Kapsayıcınız başlatılamıyorsa puanlama gerçekleşemez. Kapsayıcı, destekleyebileceğinden daha fazla kaynak instance_type
isteyebilir. Çevrimiçi dağıtımın instance_type
güncelleştirmesini göz önünde bulundurun.
Hatanın tam nedenini almak için aşağıdaki eylemi gerçekleştirin.
Şu komutu çalıştırın:
az ml online-deployment get-logs -e <endpoint-name> -n <deployment-name> -l 100
HATA: BadArgument
Aşağıdaki nedenlerle yönetilen çevrimiçi uç noktaları veya Kubernetes çevrimiçi uç noktalarını kullandığınızda bu hatayı alabilirsiniz:
- Abonelik yok
- Yetkilendirme hatası nedeniyle başlangıç görevi başarısız oldu
- Kaynakta yanlış rol atamaları nedeniyle başlangıç görevi başarısız oldu
- Geçersiz şablon işlevi belirtimi
- Kullanıcının kapsayıcı görüntüsü indirilemiyor
- Kullanıcı modeli indirilemiyor
- Özel ağ ile MLflow model biçimi desteklenmiyor
Aşağıdaki nedenlerle yalnızca Kubernetes çevrimiçi uç noktalarını kullanırken de bu hatayı alabilirsiniz:
Abonelik yok
Başvuruda bulunılan Azure aboneliği mevcut ve etkin olmalıdır. Azure girdiğiniz abonelik kimliğini bulamadıklarında bu hata oluşur. Hata, abonelik kimliğindeki bir yazım hatasından kaynaklanıyor olabilir. Abonelik kimliğinin doğru girilip girildiğini ve şu anda etkin olup olmadığını bir kez daha denetleyin.
Yetkilendirme hatası
Dağıtım oluştururken işlem kaynağını sağladıktan sonra Azure, çalışma alanı kapsayıcı kayıt defterinden kullanıcı kapsayıcı görüntüsünü çeker ve kullanıcı modelini ve kod yapıtlarını çalışma alanı depolama hesabından kullanıcı kapsayıcısına bağlar. Azure, depolama hesabına ve kapsayıcı kayıt defterine erişmek için yönetilen kimlikleri kullanır.
İlişkili uç noktayı kullanıcı tarafından atanan kimlikle oluşturursanız, kullanıcının yönetilen kimliğinin çalışma alanı depolama hesabında Depolama blobu veri okuyucu iznine ve çalışma alanı kapsayıcı kayıt defterinde AcrPull iznine sahip olması gerekir. Kullanıcı tarafından atanan kimliğinizin doğru izinlere sahip olduğundan emin olun.
Sistem tarafından atanan kimlikle ilişkili uç noktayı oluşturursanız, Azure rol tabanlı erişim denetimi (RBAC) izni otomatik olarak verilir ve başka izin gerekmez. Daha fazla bilgi için bkz . Kapsayıcı kayıt defteri yetkilendirme hatası.
Geçersiz şablon işlevi belirtimi
Bu hata, bir şablon işlevi yanlış belirtildiğinde oluşur. İlkeyi düzeltin veya engeli kaldırmak için ilke atamasını kaldırın. Hata iletisi, bu hatanın hatalarını ayıklamanıza yardımcı olmak için ilke atama adını ve ilke tanımını içerebilir. Şablon hatalarını önlemeye yönelik ipuçları için bkz . Azure ilke tanımı yapısı .
Kullanıcının kapsayıcı görüntüsü indirilemiyor
Kullanıcı kapsayıcısı bulunamayabilir. Daha fazla ayrıntı almak için kapsayıcı günlüklerini denetleyin.
Kapsayıcı görüntüsünün çalışma alanı kapsayıcı kayıt defterinde kullanılabilir olduğundan emin olun. Örneğin, görüntü ise testacr.azurecr.io/azureml/azureml_92a029f831ce58d2ed011c3c42d35acb:latest
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 komutunu kullanarak sınırları de kontrol az ml compute show
edebilirsiniz.
Azureml-fe hazır değil
Gelen çıkarım isteklerini dağıtılan hizmetlere yönlendiren ön uç azureml-fe
bileşeni, k8s uzantısı yüklemesi sırasında yüklenir ve gerektiğinde otomatik olarak ölçeklendirilir. Bu bileşenin kümede en az bir iyi durumda çoğaltması olmalıdır.
Bir Kubernetes çevrimiçi uç noktasını veya dağıtım oluşturma veya güncelleştirme isteğini tetiklediğinizde bileşen kullanılamıyorsa bu hatayı alırsınız. Bu sorunu düzeltmek için pod durumunu ve günlüklerini denetleyin. Kümede yüklü k8s uzantısını güncelleştirmeyi de deneyebilirsiniz.
HATA: ResourceNotReady
Dağıtımın bir parçası olarak sağladığınız score.py dosyasını çalıştırmak için Azure, score.py gereken tüm kaynakları içeren bir kapsayıcı oluşturur ve puanlama betiğini bu kapsayıcıda çalıştırır. Bu senaryoda hata, bu kapsayıcı çalışırken kilitlendiğinden puanlama gerçekleşemez. Bu hata aşağıdaki koşullardan biri altında oluşabilir:
score.py'da bir hata var. Aşağıdakiler gibi yaygın sorunları tanılamak için kullanın
get-logs
:- score.py conda ortamına dahil olmayan içeri aktarmaya çalışan bir paket
- Söz dizimi hatası
- yönteminde
init()
bir hata
Günlük oluşturmazsa
get-logs
, bu genellikle kapsayıcının başlatılamadığını gösterir. Bu sorunun hatalarını ayıklamak için yerel olarak dağıtmayı deneyin.Hazır olma veya canlılık yoklamaları doğru ayarlanmamıştır.
Kapsayıcı başlatma çok uzun sürdüğünden hazır olma veya canlılık araştırması hata eşiğinin ötesinde başarısız olur. Bu durumda, kapsayıcıyı başlatmak için daha uzun bir süre tanıyacak şekilde yoklama ayarlarını yapın. Veya başlatmayı hızlandıran daha büyük bir desteklenen VM SKU'su deneyin.
Kapsayıcı ortamı kurulumunda eksik bağımlılık gibi bir hata var.
Hatayı alırsanız
TypeError: register() takes 3 positional arguments but 4 were given
flask v2 ileazureml-inference-server-http
arasındaki bağımlılığı denetleyin. Daha fazla bilgi için bkz . HTTP sunucusu sorunlarını giderme.
HATA: ResourceNotFound
Yönetilen çevrimiçi uç nokta veya Kubernetes çevrimiçi uç noktasını kullanırken aşağıdaki nedenlerle bu hatayı alabilirsiniz:
- Azure Resource Manager gerekli kaynağı bulamıyor
- Kapsayıcı kayıt defteri özel veya başka bir şekilde erişilemez
Resource Manager kaynak bulamıyor
Azure Resource Manager gerekli bir kaynağı bulamadıklarında bu hata oluşur. Örneğin, belirtilen yolda bir depolama hesabı bulunamazsa bu hatayı alabilirsiniz. Doğruluk ve yazım denetimi için yol veya ad belirtimlerini çift denetleyin. Daha fazla bilgi için bkz . Kaynak Bulunamadı hatalarını düzeltme.
Kapsayıcı kayıt defteri yetkilendirme hatası
Dağıtım için özel veya başka bir şekilde erişilemeyen kapsayıcı kayıt defterine ait bir görüntü sağlandığında bu hata oluşur. Azure Machine Learning API'leri özel kayıt defteri kimlik bilgilerini kabul edebilir.
Bu hatayı azaltmak için kapsayıcı kayıt defterinin özel olmadığından emin olun veya aşağıdaki adımları izleyin:
- Çevrimiçi uç noktanızın sistem kimliğine özel kayıt defterinizin acrPull rolünü verin.
- Ortam tanımınızda, özel görüntünüzün adresini belirtin ve görüntüyü değiştirmeme veya oluşturmama yönergelerini verin.
Bu azaltma başarılı olursa, görüntünün oluşturulması gerekmez ve son görüntü adresi verilen görüntü adresidir. Dağıtım zamanında, çevrimiçi uç noktanızın sistem kimliği görüntüyü özel kayıt defterinden çeker.
Daha fazla tanılama bilgisi için bkz . Çalışma alanı tanılamasını kullanma.
HATA: WorkspaceManagedNetworkNotReady
Bu hata, çalışma alanı yönetilen sanal ağını etkinleştiren bir çevrimiçi dağıtım oluşturmaya çalıştığınızda oluşur, ancak yönetilen sanal ağ henüz sağlanmamıştır. Çevrimiçi dağıtım oluşturmadan önce çalışma alanı tarafından yönetilen sanal ağı sağlayın.
Çalışma alanı yönetilen sanal ağını el ile sağlamak için Yönetilen sanal ağı el ile sağlama başlığındaki yönergeleri izleyin. Daha sonra çevrimiçi dağıtımlar oluşturmaya başlayabilirsiniz. Daha fazla bilgi için bkz . Yönetilen çevrimiçi uç nokta ile ağ yalıtımı ve Ağ yalıtımı ile yönetilen çevrimiçi uç noktalarınızın güvenliğini sağlama.
HATA: operationCanceled
Yönetilen çevrimiçi uç nokta veya Kubernetes çevrimiçi uç noktasını kullanırken aşağıdaki nedenlerle bu hatayı alabilirsiniz:
- İşlem, daha yüksek önceliğe sahip başka bir işlem tarafından iptal edildi
- İşlem, kilit onayı bekleyen önceki bir işlemden dolayı iptal edildi
İşlem daha yüksek öncelikli başka bir işlem tarafından iptal edildi
Azure işlemleri belirli bir öncelik düzeyine sahiptir ve en yüksekten en düşüke kadar yürütülür. Bu hata, daha yüksek önceliğe sahip başka bir işlem işleminizi geçersiz kıldığında oluşur. İşlemi yeniden denemek, işlemin iptal edilmeden gerçekleştirilebilmesine olanak tanıyabilir.
Kilit onayı beklenilirken işlem iptal edildi
Azure operasyonları gönderildikten sonra kısa bir bekleme süresine sahiptir ve bu süre boyunca yarış koşullarıyla karşılaşmamalarını sağlamak için bir kilit alır. Gönderdiğiniz işlem başka bir işlemle aynı olduğunda bu hata oluşur. Diğer işlem şu anda devam etmeden önce kilidi aldığına dair onay bekliyor.
İlk istek sonrasında çok kısa bir süre içinde benzer bir istek göndermiş olabilirsiniz. Bir dakikaya kadar bekledikten sonra işlemi yeniden denemek, işlemin iptal edilmeden gerçekleştirilebilmesine olanak tanıyabilir.
HATA: SecretsInjectionError
Çevrimiçi dağıtım oluşturma sırasında gizli dizi alma ve ekleme, çalışma alanı bağlantılarından veya anahtar kasalarından gizli dizileri almak için çevrimiçi uç noktayla ilişkili kimliği kullanır. Bu hata aşağıdaki nedenlerden biri nedeniyle oluşur:
Dağıtım tanımı, gizli dizileri ortam değişkenlerine eşlenen başvurular olarak belirtse bile, uç nokta kimliğinin çalışma alanı bağlantılarından veya anahtar kasalarından gizli dizileri okumasına yönelik Azure RBAC izni yoktur. Değişikliklerin etkili olması rol ataması zaman alabilir.
Gizli dizi başvurularının biçimi geçersiz veya belirtilen gizli diziler çalışma alanı bağlantılarında veya anahtar kasalarında yok.
Daha fazla bilgi için bkz. Çevrimiçi uç noktalara gizli dizi ekleme (önizleme) ve Gizli dizi ekleme (önizleme) kullanarak çevrimiçi dağıtımdan gizli dizileri erişme.
HATA: InternalServerError
Bu hata, Azure Machine Learning hizmetinde düzeltilmesi gereken bir sorun olduğu anlamına gelir. Sorunu çözmek için gereken tüm bilgileri içeren bir müşteri destek bileti gönderin.
Kubernetes dağıtımlarına özgü yaygın hatalar
Kimlik ve kimlik doğrulama hataları:
- ACRSecretError
- TokenRefreshFailed
- GetAADTokenFailed
- ACRAuthenticationChallengeFailed
- ACRTokenExchangeFailed
- KubernetesUnaccessible
Crashloopbackoff hataları:
Puanlama betiği hataları:
Diğer hatalar:
- NamespaceNotFound
- EndpointAlreadyExists
- ScoringFeUnhealthy
- ValidateScoringFailed
- InvalidDeploymentSpec
- PodUnschedulable
- PodOutOfMemory
- InferencingClientCallFailed
HATA: ACRSecretError
Kubernetes çevrimiçi dağıtımlarını oluşturduğunuzda veya güncelleştirdiğinizde, aşağıdaki nedenlerden biri nedeniyle bu hatayı alabilirsiniz:
Rol ataması tamamlanmadı. Birkaç saniye bekleyin ve yeniden deneyin.
Azure Arc özellikli Kubernetes kümesi veya AKS Azure Machine Learning uzantısı düzgün yüklenmemiş veya yapılandırılmamış. Azure Arc özellikli Kubernetes veya Azure Machine Learning uzantısı yapılandırmasını ve durumunu denetleyin.
Kubernetes kümesi yanlış ağ yapılandırmasına sahip. Ara sunucuyu, ağ ilkesini veya sertifikayı denetleyin.
Özel AKS kümenizde uygun uç noktalar yok. Aks sanal ağındaki Container Registry, depolama hesabı ve çalışma alanı için özel uç noktaları ayarladığınızdan emin olun.
Azure Machine Learning uzantı sürümünüz v1.1.25 veya daha düşük. Uzantı sürümünüzün v1.1.25 sürümünden büyük olduğundan emin olun.
HATA: TokenRefreshFailed
Kubernetes küme kimliği düzgün ayarlanmadığından, uzantı Azure'dan bir asıl kimlik bilgisi alamadığından bu hata oluşur. Azure Machine Learning uzantısını yeniden yükleyin ve yeniden deneyin.
HATA: GetAADTokenFailed
Kubernetes kümesi Microsoft Entra ID belirtecinin başarısız olması veya zaman aşımına uğramaması nedeniyle bu hata oluşur. Ağ erişiminizi denetleyin ve yeniden deneyin.
Giden ara sunucuyu denetlemek ve kümenin çalışma alanına bağlanadığından emin olmak için Kubernetes işlemini kullanma başlığındaki yönergeleri izleyin. Çalışma alanı uç noktası URL'sini kümedeki çevrimiçi uç nokta Özel Kaynak Tanımı'nda (CRD) bulabilirsiniz.
Çalışma alanının genel erişime izin verip vermeyeceğini denetleyin. AKS kümesinin genel mi yoksa özel mi olduğuna bakılmaksızın, özel bir çalışma alanı genel ağ erişimini devre dışı bırakırsa, Kubernetes kümesi bu çalışma alanıyla yalnızca özel bir bağlantı üzerinden iletişim kurabilir. Daha fazla bilgi için bkz . Güvenli AKS çıkarım ortamı nedir?
HATA: ACRAuthenticationChallengeFailed
Kubernetes kümesi bir kimlik doğrulama sınaması yapmak için çalışma alanı Container Registry hizmetine ulaşamadığından bu hata oluşur. Ağınızı, özellikle Container Registry genel ağ erişimini denetleyin ve yeniden deneyin. Ağı denetlemek için GetAADTokenFailed içindeki sorun giderme adımlarını izleyebilirsiniz.
HATA: ACRTokenExchangeFailed
Bu hata, Microsoft Entra Id belirtecinin henüz yetkilendirilememesi nedeniyle oluşur, bu nedenle Kubernetes kümesi exchange Container Registry belirteci başarısız olur. Rol ataması biraz zaman alır, bu nedenle bir dakika bekleyip yeniden deneyin.
Bu hata, Container Registry hizmetine yönelik çok fazla eşzamanlı istek nedeniyle de olabilir. Bu hata geçici olmalıdır ve daha sonra yeniden deneyebilirsiniz.
HATA: KubernetesUnaccessible
Kubernetes model dağıtımları sırasında aşağıdaki hatayı alabilirsiniz:
{"code":"BadRequest","statusCode":400,"message":"The request is invalid.","details":[{"code":"KubernetesUnaccessible","message":"Kubernetes error: AuthenticationException. Reason: InvalidCertificate"}],...}
Bu hatayı azaltmak için kümenin AKS sertifikasını döndürebilirsiniz. Yeni sertifika 5 saat sonra güncelleştirilmelidir, böylece 5 saat bekleyip yeniden dağıtabilirsiniz. Daha fazla bilgi için bkz . Azure Kubernetes Service'te (AKS) sertifika döndürme.
HATA: ImagePullLoopBackOff
Kapsayıcı kayıt defterinden görüntüleri indiremediğinizden Kubernetes çevrimiçi dağıtımlarını oluşturduğunuzda veya güncelleştirdiğinizde bu hatayı alabilirsiniz ve bu da görüntülerin çekme hatasına neden olur. Kümenin kapsayıcı kayıt defterinden görüntü çekip çekemediğini görmek için küme ağ ilkesini ve çalışma alanı kapsayıcı kayıt defterini denetleyin.
HATA: DeploymentCrashLoopBackOff
Kullanıcı kapsayıcısı başlatılırken kilitlendiğinden Kubernetes çevrimiçi dağıtımlarını oluştururken veya güncelleştirirken bu hatayı alabilirsiniz. Bu hatanın iki olası nedeni vardır:
- Kullanıcı betiği score.py başlatma sırasında özel durumlar oluşturan bir söz dizimi hatası veya içeri aktarma hatası var.
- Dağıtım podunun sınırından daha fazla belleğe ihtiyacı vardır.
Bu hatayı azaltmak için önce dağıtım günlüklerinde kullanıcı betiklerindeki özel durumları denetleyin. Hata devam ederse kaynak/örnek türü bellek sınırını genişletmeyi deneyin.
HATA: KubernetesCrashLoopBackOff
Aşağıdaki nedenlerden biri nedeniyle Kubernetes çevrimiçi uç noktalarını veya dağıtımlarını oluştururken veya güncelleştirirken bu hatayı alabilirsiniz:
- Bir veya daha fazla pod CrashLoopBackoff durumunda takıldı. Dağıtım günlüğünün mevcut olup olmadığını ve günlükte hata iletileri olup olmadığını denetleyin.
- score.py'de bir hata var ve puan kodunuzu başlatırken kapsayıcı kilitlendi. HATA: ResourceNotReady altındaki yönergeleri izleyin.
- Puanlama işleminizin dağıtım yapılandırma sınırınızdan daha fazla belleğe ihtiyacı var. Dağıtımı daha büyük bir bellek sınırıyla güncelleştirmeyi deneyebilirsiniz.
HATA: NamespaceNotFound
Kubernetes işleminizin kullandığı ad alanı kümenizde kullanılamadığından, Kubernetes çevrimiçi uç noktalarını oluşturur veya güncelleştirirken bu hatayı alabilirsiniz. Çalışma alanı portalınızda Kubernetes işlemini denetleyin ve Kubernetes kümenizdeki ad alanını denetleyin. Ad alanı kullanılamıyorsa eski işlemden ayrılın ve kümenizde zaten var olan bir ad alanı belirterek yeni bir ad alanı oluşturmak için yeniden ekleyin.
HATA: UserScriptInitFailed
Karşıya yüklenen score.py dosyanızdaki işlev bir özel durum oluşturduğundan init
Kubernetes çevrimiçi dağıtımlarını oluşturur veya güncelleştirirken bu hatayı alabilirsiniz. Özel durum iletisini ayrıntılı olarak görmek için dağıtım günlüklerini denetleyin ve özel durumu düzeltin.
HATA: UserScriptImportError
Karşıya yüklediğiniz score.py dosyası kullanılamayan paketleri içeri aktardığından Kubernetes çevrimiçi dağıtımlarını oluşturur veya güncelleştirirken bu hatayı alabilirsiniz. Özel durum iletisini ayrıntılı olarak görmek için dağıtım günlüklerini denetleyin ve özel durumu düzeltin.
HATA: UserScriptFunctionNotFound
Karşıya yüklediğiniz score.py dosyasının veya run()
adlı init()
bir işlevi olmadığından Kubernetes çevrimiçi dağıtımlarını oluşturur veya güncelleştirirken bu hatayı alabilirsiniz. Kodunuzu denetleyin ve işlevi ekleyin.
HATA: EndpointNotFound
Sistem kümede dağıtım için uç nokta kaynağını bulamadığından Kubernetes çevrimiçi dağıtımlarını oluşturur veya güncelleştirirken bu hatayı alabilirsiniz. Dağıtımı mevcut bir uç noktada oluşturun veya önce kümenizde uç noktayı oluşturun.
HATA: EndpointAlreadyExists
Uç nokta kümenizde zaten mevcut olduğundan bir Kubernetes çevrimiçi uç noktası oluşturduğunuzda bu hatayı alabilirsiniz. Uç nokta adı çalışma alanı ve küme başına benzersiz olmalıdır, bu nedenle başka bir adla bir uç nokta oluşturun.
HATA: ScoringFeUnhealthy
Kümede çalışan azureml-fe sistem hizmeti bulunamadığından veya iyi durumda olmadığından bir Kubernetes çevrimiçi uç noktası veya dağıtımı oluşturduğunuzda veya güncelleştirdiğinizde bu hatayı alabilirsiniz. Bu sorunu azaltmak için kümenizdeki Azure Machine Learning uzantısını yeniden yükleyin veya güncelleştirin.
HATA: ValidateScoringFailed
Modeli işlerken puanlama isteği URL'si doğrulaması başarısız olduğundan Kubernetes çevrimiçi dağıtımlarını oluşturur veya güncelleştirirken bu hatayı alabilirsiniz. Uç nokta URL'sini denetleyin ve yeniden dağıtmayı deneyin.
HATA: InvalidDeploymentSpec
Dağıtım belirtimi geçersiz olduğundan Kubernetes çevrimiçi dağıtımlarını oluşturur veya güncelleştirirken bu hatayı alabilirsiniz. geçerli olduğundan emin olmak instance count
için hata iletisini denetleyin. Otomatik ölçeklendirmeyi etkinleştirdiyseniz ve maximum instance count
değerlerinin minimum instance count
her ikisinin de geçerli olduğundan emin olun.
HATA: PodUnschedulable
Aşağıdaki nedenlerden biri nedeniyle Kubernetes çevrimiçi uç noktalarını veya dağıtımlarını oluştururken veya güncelleştirirken bu hatayı alabilirsiniz:
- Kümenizdeki kaynakların yetersiz olması nedeniyle sistem podu düğümlere zamanlayamaz.
- Düğüm benzite seçicisi ile eşleşen düğüm yok.
Bu hatayı azaltmak için şu adımları izleyin:
node selector
Kullandığınız öğesinininstance_type
tanımını venode label
küme düğümlerinizin yapılandırmasını denetleyin.- AKS kümesinin
instance_type
ve düğüm SKU boyutunu veya Azure Arc özellikli Kubernetes kümesinin düğüm kaynağını denetleyin. - 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.
- Kümede dağıtım gereksinimini karşılayacak başka kaynak yoksa, kaynakları serbest bırakmak için bazı dağıtımları silin.
HATA: PodOutOfMemory
Dağıtım için sağladığınız bellek sınırı yetersiz olduğundan, çevrimiçi dağıtım oluştururken veya güncelleştirirken bu hatayı alabilirsiniz. Bu hatayı azaltmak için bellek sınırını daha büyük bir değere ayarlayabilir veya daha büyük bir örnek türü kullanabilirsiniz.
HATA: InferencingClientCallFailed
Kubernetes kümesinin k8s uzantısı bağlanamadığından, Kubernetes çevrimiçi uç noktalarını veya dağıtımlarını oluştururken veya güncelleştirirken bu hatayı alabilirsiniz. Bu durumda, işlemlerinizi ayırıp yeniden takın.
Yeniden eklemeyle ilgili hataları gidermek için, diğer hataları önlemek için ayrılmış işlemle aynı yapılandırmayla (işlem adı ve ad alanı gibi) yeniden bağlanmayı unutmayın. Hala çalışmıyorsa, kümeye kubectl get po -n azureml
erişebilen bir yöneticiden geçiş sunucusu podlarının çalışıp çalışmadığını denetlemesini isteyin.
Model tüketimi sorunları
Uç nokta invoke
işlem durumundan kaynaklanan yaygın model tüketimi hataları bant genişliği sınırı sorunları, CORS ilkesi ve çeşitli HTTP durum kodlarıdır.
Bant genişliği sınırı sorunları
Yönetilen çevrimiçi uç noktaların her uç nokta için bant genişliği sınırları vardır. Sınır yapılandırmasını çevrimiçi uç noktaların sınırları içinde bulabilirsiniz. Bant genişliği kullanımınız sınırı aşarsa isteğiniz gecikir.
Bant genişliği gecikmesini izlemek için ağ baytları ölçümünü kullanarak geçerli bant genişliği kullanımını anlayın. Daha fazla bilgi için bkz . Yönetilen çevrimiçi uç noktaları izleme.
Bant genişliği sınırı zorlanırsa iki yanıt fragmanı döndürülür:
ms-azureml-bandwidth-request-delay-ms
, istek akışı aktarımı için geçen milisaniye cinsinden gecikme süresidir.ms-azureml-bandwidth-response-delay-ms
yanıt akışı aktarımı için geçen milisaniye cinsinden gecikme süresidir.
CORS ilkesi tarafından engellendi
V2 çevrimiçi uç noktaları, Çıkış Noktaları Arası Kaynak Paylaşımı'nı (CORS) yerel olarak desteklemez. Web uygulamanız CORS denetim öncesi isteklerini düzgün bir şekilde işlemeden uç noktayı çağırmaya çalışırsa aşağıdaki hata iletisini alabilirsiniz:
Access to fetch at 'https://{your-endpoint-name}.{your-region}.inference.ml.azure.com/score' from origin http://{your-url} has been blocked by CORS policy: Response to preflight request doesn't pass access control check. No 'Access-control-allow-origin' header is present on the request resource. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with the CORS disabled.
CORS denetim öncesi isteklerini işlemek için ara katman olarak Azure İşlevleri, Azure Uygulaması Lication Gateway veya başka bir hizmeti kullanabilirsiniz.
HTTP durum kodu
REST istekleriyle çevrimiçi uç noktalara eriştiğiniz zaman, döndürülen durum kodları HTTP durum kodları standartlarına uyar. Aşağıdaki bölümlerde uç nokta çağırma ve tahmin hatalarının HTTP durum kodlarıyla nasıl eşlenmeleri hakkında ayrıntılar sağlanır.
Yönetilen çevrimiçi uç noktalar için yaygın hata kodları
Rest istekleri yönetilen çevrimiçi uç noktaları tükettiğinde aşağıdaki tabloda yaygın hata kodları yer alır:
Durum kodu | Neden | Açıklama |
---|---|---|
200 | Tamam | Modeliniz gecikme sınırlarınızda başarıyla yürütüldü. |
Kategori 401 | Yetkisiz | puan gibi istenen eylemi gerçekleştirme izniniz yok veya belirtecinizin süresi dolmuş veya yanlış biçimde. Daha fazla bilgi için bkz. Yönetilen çevrimiçi uç noktalar için kimlik doğrulaması ve Çevrimiçi uç noktalar için istemcilerin kimliğini doğrulama. |
404 | Bulunamadı | Uç noktanın pozitif ağırlıklı geçerli bir dağıtımı yoktur. |
408 | İstek zaman aşımı | Model yürütme, model dağıtım yapılandırmanızın altında request_settings sağlanan request_timeout_ms zaman aşımından daha uzun sürdü. |
424 | Model hatası | Model kapsayıcınız 200 olmayan bir yanıt döndürürse Azure 424 döndürür. Model Status Code Uç noktanızın Azure İzleyici Ölçüm Gezgini'nin ölçüm altındaki Requests Per Minute boyutu denetleyin. Veya yanıt üst bilgilerini ms-azureml-model-error-statuscode ve ms-azureml-model-error-reason daha fazla bilgi için denetleyin. 424 canlılık veya hazır olma yoklaması başarısız olursa, kapsayıcı canlılığını veya hazır olma durumunu araştırmak için daha fazla zaman sağlamak için ProbeSettings'i ayarlamayı göz önünde bulundurun. |
Kategori 429 | Çok fazla bekleyen istek var | Modeliniz şu anda işleyebileceğinden daha fazla istek alıyor. Sorunsuz bir çalışma sağlamak için Azure Machine Learning, herhangi bir zamanda paralel olarak işlemeye izin 2 * max_concurrent_requests_per_instance * instance_count requests verir. Bu üst sınırı aşan istekler reddedilir.Bu ayarları doğrulamak ve ayarlamak için ve scale_settings bölümlerinin request_settings altında model dağıtım yapılandırmanızı gözden geçirebilirsiniz. Ayrıca, RequestSettings'te açıklandığı gibi ortam değişkeninin WORKER_COUNT doğru şekilde geçirildiğinden emin olun.Otomatik ölçeklendirmeyi kullanırken bu hatayı alırsanız modeliniz istekleri sistemin ölçeğini artıramaya kıyasla daha hızlı alıyor demektir. Sisteme ayarlamak için zaman tanımak için üstel geri alma ile istekleri yeniden göndermeyi göz önünde bulundurun. Örnek sayısını hesaplamak için kod kullanarak örnek sayısını da artırabilirsiniz. Modelinizin istek akışını işlemeye hazır olduğundan emin olmak için bu adımları otomatik ölçeklendirmeyi ayarlamayla birleştirin. |
Kategori 429 | Hız sınırlı | Saniye başına istek sayısı yönetilen çevrimiçi uç nokta sınırlarına ulaştı. |
500 | İç sunucu hatası | Azure Machine Learning tarafından sağlanan altyapı başarısız oluyor. |
Kubernetes çevrimiçi uç noktaları için yaygın hata kodları
Aşağıdaki tabloda REST istekleri Kubernetes çevrimiçi uç noktalarını tükettiğinde sık karşılaşılan hata kodları yer alır:
Durum kodu | Hata | Açıklama |
---|---|---|
409 | Çakışma hatası | Bir işlem zaten devam ederken, aynı çevrimiçi uç noktadaki tüm yeni işlemler 409 çakışma hatasıyla yanıt verir. Örneğin, çevrimiçi uç nokta oluşturma veya güncelleştirme işlemi devam ederse, yeni bir silme işleminin tetiklenmesi hataya neden olur. |
502 | score.py dosyasının run() yönteminde özel durum veya kilitlenme |
score.py bir hata olduğunda( örneğin conda ortamında mevcut olmayan içeri aktarılmış bir paket, bir söz dizimi hatası veya yöntemde init() bir hata) hata olduğunda, bkz. Hata: Dosyada hata ayıklamak için ResourceNotReady. |
503 | saniye başına isteklerde büyük ani artışlar | Otomatik ölçeklendirici, yükteki aşamalı değişiklikleri işlemek için tasarlanmıştır. saniye başına isteklerde büyük ani artışlar alırsanız, istemciler HTTP durum kodu 503'e sahip olabilir. Otomatik ölçeklendirici hızlı tepki vermesine rağmen, AKS'nin daha fazla kapsayıcı oluşturması önemli miktarda zaman alır. Bkz . 503 durum kodu hatalarını önleme. |
504 | İstek zaman aşımına uğrar | 504 durum kodu, isteğin zaman aşımına uğradı olduğunu gösterir. Varsayılan zaman aşımı ayarı 5 saniyedir. Gereksiz çağrıları kaldırmak için score.py değiştirerek zaman aşımını artırabilir veya uç noktayı hızlandırmayı deneyebilirsiniz. Bu eylemler sorunu düzeltmezse, kod yanıt vermeyen bir durumda veya sonsuz döngüde olabilir. score.py dosyasında hata ayıklamak için HATA: ResourceNotReady'yi izleyin. |
500 | İç sunucu hatası | Azure Machine Learning tarafından sağlanan altyapı başarısız oluyor. |
503 durum kodu hatalarını önleme
Kubernetes çevrimiçi dağıtımları, ek yükü desteklemek için çoğaltmaların eklenmesini sağlayan otomatik ölçeklendirmeyi destekler. Daha fazla bilgi için bkz . Azure Machine Learning çıkarım yönlendiricisi. Ölçeği artırma veya azaltma kararı, geçerli kapsayıcı çoğaltmalarının kullanımına bağlıdır.
İki eylem 503 durum kodu hatalarının önlenmesine yardımcı olabilir: Yeni çoğaltma oluşturmak için kullanım düzeyini değiştirme veya en az çoğaltma sayısını değiştirme. Bu yaklaşımları tek tek veya birlikte kullanabilirsiniz.
değerini daha düşük bir değere ayarlayarak otomatik ölçeklendirmenin yeni çoğaltmalar oluşturduğu kullanım hedefini
autoscale_target_utilization
değiştirin. Bu değişiklik çoğaltmaların daha hızlı oluşturulmasına neden olmaz, ancak daha düşük bir kullanım eşiğinde oluşturulur. Örneğin, değerin %30 olarak değiştirilmesi, hizmet %70 kullanılana kadar beklemek yerine %30 kullanım gerçekleştiğinde çoğaltmaların oluşturulmasına neden olur.Gelen ani artışları işleyebilen daha büyük bir havuz sağlamak için en az çoğaltma sayısını değiştirin.
Örnek sayısını hesaplama
Örnek sayısını artırmak için gerekli çoğaltmaları aşağıdaki gibi hesaplayabilirsiniz:
from math import ceil
# target requests per second
target_rps = 20
# time to process the request (in seconds, choose appropriate percentile)
request_process_time = 10
# Maximum concurrent requests per instance
max_concurrent_requests_per_instance = 1
# The target CPU usage of the model container. 70% in this example
target_utilization = .7
concurrent_requests = target_rps * request_process_time / target_utilization
# Number of instance count
instance_count = ceil(concurrent_requests / max_concurrent_requests_per_instance)
Not
Yeni minimum çoğaltmaların işleyebileceğinden daha büyük istek artışları alırsanız yeniden 503 alabilirsiniz. Örneğin uç noktanıza gelen trafik arttıkça en düşük çoğaltmaları artırmanız gerekebilir.
Kubernetes çevrimiçi uç noktası zaten geçerli maksimum çoğaltmaları kullanıyorsa ve yine de 503 durum kodu alırsanız, maksimum çoğaltma sayısını artırmak için değeri artırın autoscale_max_replicas
.
Ağ yalıtımı sorunları
Bu bölümde yaygın ağ yalıtımı sorunları hakkında bilgi sağlanır.
Çevrimiçi uç nokta oluşturma işlemi V1LegacyMode == true iletisiyle başarısız oluyor
v2 API'lerini devre dışı bırakmak üzere için v1_legacy_mode
Azure Machine Learning çalışma alanını yapılandırabilirsiniz. Yönetilen çevrimiçi uç noktalar v2 API platformunun bir özelliğidir ve çalışma alanı için etkinleştirildiyse v1_legacy_mode
çalışmaz.
öğesini devre dışı bırakmak v1_legacy_mode
için bkz . v2 ile ağ yalıtımı.
Önemli
devre dışı bırakmadan v1_legacy_mode
önce ağ güvenlik ekibinize danışın çünkü bir nedenle etkinleştirmiş olabilirler.
Anahtar tabanlı kimlik doğrulamasıyla çevrimiçi uç nokta oluşturma işlemi başarısız oluyor
Çalışma alanınız için Azure anahtar kasasının ağ kurallarını listelemek için aşağıdaki komutu kullanın. değerini anahtar kasanızın adıyla değiştirin <keyvault-name>
:
az keyvault network-rule list -n <keyvault-name>
Bu komutun yanıtı aşağıdaki JSON koduna benzer:
{
"bypass": "AzureServices",
"defaultAction": "Deny",
"ipRules": [],
"virtualNetworkRules": []
}
değeri bypass
değilseAzureServices
, anahtarı olarak ayarlamak AzureServices
için Anahtar kasası ağ ayarlarını yapılandırma bölümünde yer alan yönergeleri kullanın.
Çevrimiçi dağıtımlar görüntü indirme hatasıyla başarısız oluyor
Not
Bu sorun, Azure Machine Learning'in bir uç nokta altında her dağıtım için yönetilen bir sanal ağ oluşturduğu yönetilen çevrimiçi uç noktalar için eski ağ yalıtım yöntemini kullandığınızda geçerlidir.
Bayrağın
egress-public-network-access
disabled
dağıtım için olup olmadığını denetleyin. Bu bayrak etkinse ve kapsayıcı kayıt defterinin görünürlüğü özelse, bu hata beklenir.Özel uç nokta bağlantısının durumunu denetlemek için aşağıdaki komutu kullanın. değerini, çalışma alanınız için Azure kapsayıcı kayıt defterinin adıyla değiştirin
<registry-name>
:az acr private-endpoint-connection list -r <registry-name> --query "[?privateLinkServiceConnectionState.description=='Egress for Microsoft.MachineLearningServices/workspaces/onlineEndpoints'].{Name:name, status:privateLinkServiceConnectionState.status}"
Yanıt kodunda alanın olarak
Approved
ayarlandığınıstatus
doğrulayın. Aksi takdirde, onaylamak için aşağıdaki komutu kullanın. değerini önceki komuttan döndürülen adla değiştirin<private-endpoint-name>
.az network private-endpoint-connection approve -n <private-endpoint-name>
Puanlama uç noktası çözümlenemiyor
Puanlama isteğini veren istemcinin Azure Machine Learning çalışma alanına erişebilen bir sanal ağ olduğunu doğrulayın.
nslookup
IP adresi bilgilerini almak için uç nokta ana bilgisayar adında komutunu kullanın, örneğin:nslookup endpointname.westcentralus.inference.ml.azure.com
Yanıt, sanal ağ tarafından sağlanan aralıkta olması gereken bir adres içerir.
Not
- 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 ise, IP adresi studio kullanıcı arabiriminden alabileceğiniz uç nokta URI'sinde yer alır.
- Uç noktanın IP adresini almanın daha fazla yolunu Güvenli Kubernetes çevrimiçi uç noktasında bulabilirsiniz.
nslookup
Komut ana bilgisayar adını çözmezse aşağıdaki eylemleri gerçekleştirin:
Yönetilen çevrimiçi uç noktalar
Sanal ağın özel Etki Alanı Adı Sunucusu (DNS) bölgesinde bir A kaydı olup olmadığını denetlemek için aşağıdaki komutu kullanın.
az network private-dns record-set list -z privatelink.api.azureml.ms -o tsv --query [].name
Sonuçlara benzer
*.<GUID>.inference.<region>
bir girdi bulunmalıdır.Çıkarım değeri döndürülmezse, çalışma alanının özel uç noktasını silin ve yeniden oluşturun. Daha fazla bilgi için bkz . Özel uç nokta yapılandırma.
Özel uç nokta içeren çalışma alanı özel bir DNS sunucusu kullanıyorsa, özel DNS'den alınan çözümün doğru çalıştığını doğrulamak için aşağıdaki komutu çalıştırın.
dig endpointname.westcentralus.inference.ml.azure.com
Kubernetes çevrimiçi uç noktaları
Kubernetes kümesindeki DNS yapılandırmasını denetleyin.
Ayrıca aşağıdaki komutu kullanarak azureml-fe'nin beklendiği gibi çalışıp çalışmadığını denetleyin:
kubectl exec -it deploy/azureml-fe -- /bin/bash (Run in azureml-fe pod) curl -vi -k https://localhost:<port>/api/v1/endpoint/<endpoint-name>/swagger.json "Swagger not found"
HTTP için aşağıdaki komutu kullanın:
curl https://localhost:<port>/api/v1/endpoint/<endpoint-name>/swagger.json "Swagger not found"
Curl HTTP'leri başarısız olursa veya zaman aşımına uğradıysa ancak HTTP çalışıyorsa sertifikanın geçerli olup olmadığını denetleyin.
Yukarıdaki işlem A kaydına çözümlenemezse, çözümlemenin Azure DNS'den (168.63.129.16) çalışıp çalışmadığını doğrulayın.
dig @168.63.129.16 endpointname.westcentralus.inference.ml.azure.com
Yukarıdaki komut başarılı olursa, özel DNS'de özel bağlantı için koşullu iletici sorunlarını giderin.
Çevrimiçi dağıtımlar puanlanamıyor
Dağıtımın başarılı olup olmadığını görmek için aşağıdaki komutu çalıştırın:
az ml online-deployment show -e <endpointname> -n <deploymentname> --query '{name:name,state:provisioning_state}'
Dağıtım başarıyla tamamlandıysa değeri
state
olurSucceeded
.Dağıtım başarılı olursa, trafiğin dağıtıma atandığını denetlemek için aşağıdaki komutu kullanın. değerini uç noktanızın adıyla değiştirin
<endpointname>
.az ml online-endpoint show -n <endpointname> --query traffic
Bu komuttan gelen yanıt, dağıtımlara atanan trafiğin yüzdesini listelemelidir.
İpucu
bu dağıtımı hedeflemek için isteğinizdeki üst bilgiyi kullanırsanız
azureml-model-deployment
bu adım gerekli değildir.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 gözden geçirin.
Çıkarım sunucusu sorunları
Bu bölümde, Azure Machine Learning çıkarımı HTTP sunucusu için temel sorun giderme ipuçları sağlanır.
Yüklü paketleri denetleme
Yüklü paketlerle ilgili sorunları gidermek için bu adımları izleyin.
Python ortamınız için yüklü paketler ve sürümler hakkında bilgi toplayın.
Ortam dosyasında belirtilen Python paketi sürümünün başlangıç günlüğünde görüntülenen Azure Machine Learning çıkarım HTTP sunucusu sürümüyle eşleşeceğini
azureml-inference-server-http
onaylayın.Bazı durumlarda pip bağımlılık çözümleyicisi beklenmeyen paket sürümlerini yükler. Yüklü paketleri ve sürümleri düzeltmek için komutunu çalıştırmanız
pip
gerekebilir.Flask'i veya ortamınızdaki bağımlılıklarını belirtirseniz, bu öğeleri kaldırın.
- Bağımlı paketler arasında
flask
,jinja2
,itsdangerous
,werkzeug
,markupsafe
ve bulunurclick
. flask
sunucu paketinde bağımlılık olarak listelenir. En iyi yaklaşım, çıkarım sunucusunun paketi yüklemesine izin vermektirflask
.- Çıkarım sunucusu Flask'in yeni sürümlerini destekleyecek şekilde yapılandırıldığında, sunucu paket güncelleştirmelerini kullanıma sunuldukça otomatik olarak alır.
- Bağımlı paketler arasında
Sunucu sürümünü denetleme
Sunucu azureml-inference-server-http
paketi PyPI'da yayımlanır. PyPI sayfasında değişiklik günlüğü ve önceki tüm sürümler listelenir.
Önceki bir paket sürümünü kullanıyorsanız yapılandırmanızı en son sürüme güncelleştirin. Aşağıdaki tabloda kararlı sürümler, yaygın sorunlar ve önerilen ayarlamalar özetlenmektedir:
Paket sürümü | Açıklama | Sorun | Çözüm |
---|---|---|---|
0.4.x | tarihli 20220601 veya önceki eğitim görüntülerinde paketlenmiş ve azureml-defaults sürümleri .1.34 aracılığıyla paketlenmiştir 1.43 . En son kararlı sürüm 0.4.13'dür. |
0.4.11'den önceki sunucu sürümleri için gibi "can't import name Markup from jinja2" Flask bağımlılık sorunlarıyla karşılaşabilirsiniz. |
Mümkünse en son sürüm olan 0.4.13 veya 0.8.x sürümüne yükseltin. |
0.6.x | Eski ve önceki 20220516 görüntüleri çıkarsama önceden yüklenmiş. En son kararlı sürüm 0.6.1'dir. |
Yok | Yok |
0.7.x | Flask 2'i destekler. En son kararlı sürüm 0.7.7'dir. | Yok | Yok |
0.8.x | Günlük biçimi değiştirildi. Python 3.6 desteği sona erdi. | Yok | Yok |
Paket bağımlılıklarını denetleme
Sunucu paketi için azureml-inference-server-http
en ilgili bağımlı paketler şunlardır:
flask
opencensus-ext-azure
inference-schema
Paketi Python ortamınızda belirttiyseniz azureml-defaults
, azureml-inference-server-http
paket bağımlı bir pakettir. Bağımlılık otomatik olarak yüklenir.
İpucu
Python SDK v1 kullanıyorsanız ve paketi Python ortamınızda açıkça belirtmezseniz azureml-defaults
, SDK paketi otomatik olarak ekleyebilir. Ancak paketleyici sürümü SDK sürümüne göre kilitlenir. Örneğin, SDK sürümü ise1.38.0
azureml-defaults==1.38.0
, giriş ortamın pip gereksinimlerine eklenir.
Sunucu başlatma sırasında TypeError
Sunucu başlatma sırasında aşağıdakilerle TypeError
karşılaşabilirsiniz:
TypeError: register() takes 3 positional arguments but 4 were given
File "/var/azureml-server/aml_blueprint.py", line 251, in register
super(AMLBlueprint, self).register(app, options, first_registration)
TypeError: register() takes 3 positional arguments but 4 were given
Python ortamınızda Flask 2 yüklüyse ancak paket sürümünüz azureml-inference-server-http
Flask 2'yi desteklemediğinde bu hata oluşur. Flask 2 desteği, paket sürümü 0.7.0 ve üzeri ile azureml-defaults
paket sürümü 1.44 ve üzeri sürümlerde azureml-inference-server-http
kullanılabilir.
Flask 2 paketini bir Azure Machine Learning Docker görüntüsünde kullanmıyorsanız veya
azureml-defaults
paketininazureml-inference-server-http
en son sürümünü kullanın.Flask 2 paketini bir Azure Machine Learning Docker görüntüsünde kullanıyorsanız görüntü derleme sürümünün Temmuz 2022 veya üzeri olduğunu onaylayın.
Görüntü sürümünü kapsayıcı günlüklerinde bulabilirsiniz. Örneğin:
2022-08-22T17:05:02,147738763+00:00 | gunicorn/run | AzureML Container Runtime Information 2022-08-22T17:05:02,161963207+00:00 | gunicorn/run | ############################################### 2022-08-22T17:05:02,168970479+00:00 | gunicorn/run | 2022-08-22T17:05:02,174364834+00:00 | gunicorn/run | 2022-08-22T17:05:02,187280665+00:00 | gunicorn/run | AzureML image information: openmpi4.1.0-ubuntu20.04, Materialization Build:20220708.v2 2022-08-22T17:05:02,188930082+00:00 | gunicorn/run | 2022-08-22T17:05:02,190557998+00:00 | gunicorn/run |
Görüntünün derleme tarihi, gösterimin
Materialization Build
ardından görünür. Yukarıdaki örnekte, görüntü sürümü veya 8 Temmuz 2022'dir20220708
. Bu örnekteki görüntü Flask 2 ile uyumludur.Kapsayıcı günlüğünüzde benzer bir ileti görmüyorsanız, görüntünüz güncel değildir ve güncelleştirilmelidir. İşlem Birleşik Cihaz Mimarisi (CUDA) görüntüsü kullanıyorsanız ve daha yeni bir görüntü bulamıyorsanız, görüntünüzün AzureML Kapsayıcıları'nda kullanım dışı olup olmadığını denetleyin. Kullanım dışı bırakılan görüntüler için belirlenmiş değiştirmeler bulabilirsiniz.
Sunucuyu çevrimiçi uç noktayla kullanıyorsanız, günlükleri Azure Machine Learning stüdyosu Uç Noktalar sayfasındaki Günlükler'de de bulabilirsiniz.
SDK v1 ile dağıtım yaparsanız ve dağıtım yapılandırmanızda açıkça bir görüntü belirtmezseniz, sunucu paketi yerel SDK araç takımınızla eşleşen bir sürümle uygular openmpi4.1.0-ubuntu20.04
. Ancak, yüklenen sürüm görüntünün kullanılabilir en son sürümü olmayabilir.
SDK sürüm 1.43 için sunucu paket sürümünü varsayılan olarak yükler openmpi4.1.0-ubuntu20.04:20220616
, ancak bu paket sürümü SDK 1.43 ile uyumlu değildir. Dağıtımınız için en son SDK'yi kullandığınızdan emin olun.
Görüntüyü güncelleştiremiyorsanız, veya girdilerini ortam dosyanıza sabitleyerek azureml-defaults==1.43
azureml-inference-server-http~=0.4.13
geçici olarak sorundan kaçınabilirsiniz. Bu girdiler sunucuyu ile flask 1.0.x
eski sürümü yüklemeye yönlendirir.
Sunucu başlatma sırasında ImportError veya ModuleNotFoundError
Sunucu başlatma sırasında , jinja2
, markupsafe
veya ModuleNotFoundError
gibi opencensus
belirli modüllerde veya click
ile karşılaşabilirsinizImportError
. Aşağıdaki örnekte hata iletisi gösterilmektedir:
ImportError: cannot import name 'Markup' from 'jinja2'
İçeri aktarma ve modül hataları, Flask bağımlılığını uyumlu bir sürüme sabitlemeyen sunucunun 0.4.10 veya önceki sürümlerini kullandığınızda oluşur. Sorunu önlemek için sunucunun daha sonraki bir sürümünü yükleyin.
Diğer yaygın sorunları çözme
Diğer yaygın çevrimiçi uç nokta sorunları conda yükleme ve otomatik ölçeklendirme ile ilgilidir.
Conda yükleme sorunları
MLflow dağıtımıyla ilgili sorunlar genellikle conda.yml dosyasında belirtilen kullanıcı ortamının yüklenmesiyle ilgili sorunlardan kaynakılır.
Conda yükleme sorunlarının hatalarını ayıklamak için aşağıdaki adımları deneyin:
- 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.
- mlflow conda dosyasını komutuyla
conda env create -n userenv -f <CONDA_ENV_FILENAME>
yerel olarak yükleyin. - Yerel olarak hatalar varsa, yeniden dağıtmadan önce conda ortamını çözmeyi ve işlevsel bir ortam oluşturmayı deneyin.
- Kapsayıcı yerel olarak çözümlense bile kilitleniyorsa, dağıtım için kullanılan SKU boyutu çok küçük olabilir.
- Conda paketi yüklemesi çalışma zamanında gerçekleşir, bu nedenle SKU boyutu conda.yml ortam dosyasındaki tüm paketleri barındıramayacak kadar küçükse kapsayıcı kilitlenebilir.
- Standard_F4s_v2 VM iyi bir başlangıç SKU boyutudur, ancak conda dosyasının belirttiği bağımlılıklara bağlı olarak daha büyük VM'lere ihtiyacınız olabilir.
- Kubernetes çevrimiçi uç noktaları için Kubernetes kümesi en az dört vCPU çekirdeğine ve 8 GB belleğe sahip olmalıdır.
Otomatik ölçeklendirme sorunları
Otomatik ölçeklendirmeyle ilgili sorun yaşıyorsanız bkz . Azure İzleyici otomatik ölçeklendirme sorunlarını giderme.
Kubernetes çevrimiçi uç noktaları için Azure Machine Learning çıkarım yönlendiricisi, Kubernetes kümesindeki tüm model dağıtımları için otomatik ölçeklendirmeyi işleyen bir ön uç bileşenidir. Daha fazla bilgi için bkz . Kubernetes çıkarım yönlendirmesini otomatik ölçeklendirme.