Azure Machine Learning uzantısı sorunlarını giderme
Bu makalede AKS veya Arc özellikli Kubernetes'inizde Azure Machine Learning uzantısı dağıtımında karşılaşabileceğiniz yaygın sorunları gidermeyi öğreneceksiniz.
Azure Machine Learning uzantısı nasıl yüklenir?
Azure Machine Learning uzantısı helm grafiği olarak yayınlanır ve Helm V3 tarafından yüklenir. Azure Machine Learning uzantısının tüm bileşenleri ad alanına azureml
yüklenir. Uzantı durumunu denetlemek için aşağıdaki komutları kullanabilirsiniz.
# get the extension status
az k8s-extension show --name <extension-name>
# check status of all pods of Azure Machine Learning extension
kubectl get pod -n azureml
# get events of the extension
kubectl get events -n azureml --sort-by='.lastTimestamp'
Azure Machine Learning uzantısı dağıtım hatasını giderme
Hata: Hala kullanımda olan bir ad yeniden kullanılamıyor
Bu hata, belirttiğiniz uzantı adının zaten var olduğu anlamına gelir. Ad Azure Machine Learning uzantısı tarafından kullanılıyorsa, yaklaşık bir saat beklemeniz ve yeniden denemeniz gerekir. Ad diğer helm chart’ları tarafından kullanılıyorsa başka bir ad kullanmanız gerekir. Komutunu çalıştırarak helm list -Aa
kümenizdeki tüm helm grafiklerini listeleyin.
Hata: Helm grafiği için önceki işlem devam ediyor
Bilinmeyen işlem tamamlandıktan sonra yaklaşık bir saat beklemeniz ve yeniden denemeniz gerekir.
Hata: sonlandırıldığı için azureml ad alanında yeni içerik oluşturulamıyor
Kaldırma işlemi tamamlanmadığında ve başka bir yükleme işlemi tetiklendiğinde bu hata oluşur. az k8s-extension show
komutunu çalıştırarak uzantının sağlama durumunu denetleyebilirsiniz ve diğer eylemleri gerçekleştirmeden önce uzantının kaldırıldığından emin olabilirsiniz.
Hata: Grafik yolu bulunamadı ve indirilemedi
Bu hata, yanlış bir uzantı sürümü belirttiğinizde oluşur. Belirtilen sürümün mevcut olduğundan emin olmanız gerekir. En son sürümü kullanmak istiyorsanız, belirtmeniz --version
gerekmez.
Hata: geçerli sürüme aktarılamıyor: geçersiz sahiplik meta verileri
Bu hata, mevcut küme kaynaklarıyla Azure Machine Learning uzantısı arasında çakışma olduğu anlamına gelir. Tam hata iletisi aşağıdaki metin gibi olabilir:
CustomResourceDefinition "jobs.batch.volcano.sh" in namespace "" exists and cannot be imported into the current release: invalid ownership metadata; label validation error: missing key "app.kubernetes.io/managed-by": must be set to "Helm"; annotation validation error: missing key "meta.helm.sh/release-name": must be set to "amlarc-extension"; annotation validation error: missing key "meta.helm.sh/release-namespace": must be set to "azureml"
Sorunu azaltmak için aşağıdaki adımları kullanın.
Sorunlu kaynaklara kimin sahip olduğunu ve kaynağın silinip silinemediğini veya değiştirilip değiştirilmediğini denetleyin.
Kaynak yalnızca Azure Machine Learning uzantısı tarafından kullanılıyorsa ve silinebiliyorsa, sorunu azaltmak için etiketleri el ile ekleyebilirsiniz. Önceki hata iletisini örnek olarak alarak komutları aşağıdaki gibi çalıştırabilirsiniz:
kubectl label crd jobs.batch.volcano.sh "app.kubernetes.io/managed-by=Helm" kubectl annotate crd jobs.batch.volcano.sh "meta.helm.sh/release-namespace=azureml" "meta.helm.sh/release-name=<extension-name>"
Kaynağa etiketleri ve ek açıklamaları ayarlaması, helm'in Azure Machine Learning uzantısına ait kaynağı yönettiği anlamına gelir.
Kaynak, kümenizdeki diğer bileşenler tarafından da kullanıldığında ve değiştirilemediğinde. Çakışma kaynağını devre dışı bırakmak için bir yapılandırma ayarı olup olmadığını görmek için Azure Machine Learning uzantısını dağıtma konusuna bakın.
Uzantı için HealthCheck
Yükleme başarısız olduğunda ve yukarıdaki hata iletilerinden herhangi birine isabet etmediğinde, uzantı üzerinde kapsamlı bir denetim yapmak için yerleşik sistem durumu denetimi işini kullanabilirsiniz. Azure machine learning uzantısı, uzantıyı yüklemeye, güncelleştirmeye veya silmeye çalıştığınızda küme hazırlığınızı önceden denetleyebileceğiniz bir HealthCheck
iş içerir. HealthCheck işi, ad alanında adlı arcml-healthcheck
bir yapılandırma haritasına azureml
kaydedilen bir rapor oluşturur. Rapor için hata kodları ve olası çözümler HealthCheck Hata Kodu'nda listelenir.
HealthCheck raporunu almak için bu komutu çalıştırın,
kubectl describe configmap -n azureml arcml-healthcheck
Uzantıyı her yüklediğinizde, güncelleştirdiğinizde veya sildiğinizde sistem durumu denetimi tetiklenir. Sistem durumu denetimi raporu, çeşitli bölümleri pre-install
, pre-rollback
pre-upgrade
ve pre-delete
ile yapılandırılmıştır.
- Uzantı yüklenemediyse ve
pre-delete
içinepre-install
bakmalısınız. - Uzantı güncelleştirilmezse ve
pre-rollback
içinepre-upgrade
bakmanız gerekir. - Uzantı silinemediyse, içine
pre-delete
bakmanız gerekir.
Destek istediğinizde, aşağıdaki komutu çalıştırmanızı ve sorunu daha iyi bulmamızı kolaylaştırabileceği için healthcheck.logs
dosyasını bize göndermenizi öneririz.
kubectl logs healthcheck -n azureml
HealthCheck Hata Kodu
Bu tabloda, HealthCheck raporu tarafından döndürülen hata kodlarıyla ilgili sorunları giderme adımları gösterilmektedir.
Hata Kodu | Hata İletisi | Açıklama |
---|---|---|
E40001 | LOAD_BALANCER_NOT_SUPPORT | Yük dengeleyici kümenizde desteklenmez. Kümenizdeki yük dengeleyiciyi yapılandırmanız veya veya clusterIP olarak ayarlamayı inferenceRouterServiceType nodePort göz önünde bulundurmanız gerekir. |
E40002 | INSUFFICIENT_NODE | Kümenizde en az üç düğüm gerektiren bir etkinleştirdiniz inferenceRouterHA . Üçten az düğüm varsa HA'yi devre dışı bırakın. |
E40003 | INTERNAL_LOAD_BALANCER_NOT_SUPPORT | Şu anda yalnızca AKS iç yük dengeleyiciyi destekler ve biz yalnızca türünü destekleriz azure . AKS kümeniz yoksa ayarlamayın internalLoadBalancerProvider . |
E40007 | INVALID_SSL_SETTING | SSL anahtarı veya sertifikası geçerli değil. CNAME sertifikayla uyumlu olmalıdır. |
E45002 | PROMETHEUS_CONFLICT | Yüklü Prometheus İşleci mevcut Prometheus operatörünüzle çakışıyor. Daha fazla bilgi için bkz. Prometheus işleci |
E45003 | BAD_NETWORK_CONNECTIVITY | Ağ gereksinimlerini karşılamanız gerekir. |
E45004 | AZUREML_FE_ROLE_CONFLICT | Azure Machine Learning uzantısı eski AKS'de desteklenmez. Azure Machine Learning uzantısını yüklemek için eski azureml-fe bileşenlerini silmeniz gerekir. |
E45005 | AZUREML_FE_DEPLOYMENT_CONFLICT | Azure Machine Learning uzantısı eski AKS'de desteklenmez. Azure Machine Learning uzantısını yüklemek için bu formun altındaki komutu çalıştırarak eski azureml-fe bileşenlerini silmeniz gerekir. Burada daha fazla ayrıntı bulabilirsiniz. |
AKS kümesindeki eski azureml-fe bileşenlerini silme komutları:
kubectl delete sa azureml-fe
kubectl delete clusterrole azureml-fe-role
kubectl delete clusterrolebinding azureml-fe-binding
kubectl delete svc azureml-fe
kubectl delete svc azureml-fe-int-http
kubectl delete deploy azureml-fe
kubectl delete secret azuremlfessl
kubectl delete cm azuremlfeconfig
Açık kaynak bileşenlerinin entegrasyonu
Azure Machine Learning uzantısı Prometheus Operatörü, Volkan Zamanlayıcı ve DCGM ihracatçısı gibi bazı açık kaynak bileşenlerini kullanır. Kubernetes kümesinde bunlardan bazıları zaten yüklüyse, mevcut bileşenlerinizi Azure Machine Learning uzantısıyla tümleştirmek için aşağıdaki bölümleri okuyabilirsiniz.
Prometheus işleci
Prometheus işleci, kubernetes'te ölçüm izleme sistemi oluşturmaya yardımcı olan bir açık kaynak çerçevesidir. Azure Machine Learning uzantısı, işlerin kaynak kullanımını izlemeye yardımcı olmak için Prometheus işlecini de kullanır.
Kümede başka bir hizmet tarafından yüklenmiş Prometheus işleci varsa, iki Prometheus işleci arasında çakışma yaşanmasını önlemek için Azure Machine Learning uzantısında Prometheus işlecini devre dışı bırakabilirsiniz installPromOp=false
.
Bu durumda, mevcut prometheus işleci tüm Prometheus örneklerini yönetir. Prometheus'un düzgün çalıştığından emin olmak için Azure Machine Learning uzantısında prometheus işlecini devre dışı bırakırken aşağıdakilere dikkat edilmesi gerekir.
- azureml ad alanında prometheus'un Prometheus işleci tarafından yönetilip yönetilmediğini denetleyin. Bazı senaryolarda prometheus işleci yalnızca belirli ad alanlarını izleyecek şekilde ayarlanır. Öyleyse, azureml ad alanının izin verilenler listesinde olduğundan emin olun. Daha fazla bilgi için bkz . komut bayrakları.
- prometheus işlecinde kubelet-service'in etkinleştirilip etkinleştirilmediğini denetleyin. Kubelet-service, kubelet'in tüm uç noktalarını içerir. Daha fazla bilgi için bkz . komut bayrakları. Ayrıca kubelet-service'in bir etiketi
k8s-app=kubelet
olduğundan da emin olmanız gerekir. - kubelet-service için ServiceMonitor oluşturun. Değiştirilen değişkenlerle aşağıdaki komutu çalıştırın:
cat << EOF | kubectl apply -f - apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: name: prom-kubelet namespace: azureml labels: release: "<extension-name>" # Please replace to your Azure Machine Learning extension name spec: endpoints: - port: https-metrics scheme: https path: /metrics/cadvisor honorLabels: true tlsConfig: caFile: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt insecureSkipVerify: true bearerTokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token relabelings: - sourceLabels: - __metrics_path__ targetLabel: metrics_path jobLabel: k8s-app namespaceSelector: matchNames: - "<namespace-of-your-kubelet-service>" # Please change this to the same namespace of your kubelet-service selector: matchLabels: k8s-app: kubelet # Please make sure your kubelet-service has a label named k8s-app and it's value is kubelet EOF
DCGM ihracatçısı
Dcgm-exporter , GPU ölçümlerini toplamak için NVIDIA tarafından önerilen resmi araçtır. Bunu Azure Machine Learning uzantısıyla tümleştirdik. Ancak varsayılan olarak dcgm-exporter etkin değildir ve GPU ölçümleri toplanmaz. Etkinleştirmek için true
bayrağını belirtebilirsinizinstallDcgmExporter
. NVIDIA'nın resmi aracı olduğundan, GPU kümenizde zaten yüklü olabilir. Bu durumda, dcgm-exporter'ınızı Azure Machine Learning uzantısıyla tümleştirmek için öğesini ayarlayabilir installDcgmExporter
false
ve adımları izleyebilirsiniz. Dikkate alınması gereken bir diğer nokta da dcgm-exporter'ın kullanıcının hangi ölçümleri kullanıma sunması için yapılandırma yapmasına izin verdiğidir. Azure Machine Learning uzantısı için ve DCGM_FI_DEV_FB_FREE
DCGM_FI_DEV_FB_USED
ölçümlerinin kullanıma sunulduğuna emin olunDCGM_FI_DEV_GPU_UTIL
.
Aureml uzantısının ve dcgm-exporter uygulamasının başarıyla yüklendiğinden emin olun. Dcgm-exporter, Dcgm-exporter helm chart veya Gpu-operator helm chart tarafından yüklenebilir
dcgm-exporter için bir hizmet olup olmadığını denetleyin. Yoksa veya nasıl denetlendiğini bilmiyorsanız, aşağıdaki komutu çalıştırarak bir komut oluşturun.
cat << EOF | kubectl apply -f - apiVersion: v1 kind: Service metadata: name: dcgm-exporter-service namespace: "<namespace-of-your-dcgm-exporter>" # Please change this to the same namespace of your dcgm-exporter labels: app.kubernetes.io/name: dcgm-exporter app.kubernetes.io/instance: "<extension-name>" # Please replace to your Azure Machine Learning extension name app.kubernetes.io/component: "dcgm-exporter" annotations: prometheus.io/scrape: 'true' spec: type: "ClusterIP" ports: - name: "metrics" port: 9400 # Please replace to the correct port of your dcgm-exporter. It's 9400 by default targetPort: 9400 # Please replace to the correct port of your dcgm-exporter. It's 9400 by default protocol: TCP selector: app.kubernetes.io/name: dcgm-exporter # Those two labels are used to select dcgm-exporter pods. You can change them according to the actual label on the service app.kubernetes.io/instance: "<dcgm-exporter-helm-chart-name>" # Please replace to the helm chart name of dcgm-exporter EOF
Önceki adımda hizmetin doğru ayarlandığını denetleyin
kubectl -n <namespace-of-your-dcgm-exporter> port-forward service/dcgm-exporter-service 9400:9400 # run this command in a separate terminal. You will get a lot of dcgm metrics with this command. curl http://127.0.0.1:9400/metrics
Azure Machine Learning uzantısında dcgm-exporter hizmetini kullanıma açmak için ServiceMonitor'ı ayarlayın. Aşağıdaki komutu çalıştırın ve birkaç dakika içinde geçerli olur.
cat << EOF | kubectl apply -f - apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: name: dcgm-exporter-monitor namespace: azureml labels: app.kubernetes.io/name: dcgm-exporter release: "<extension-name>" # Please replace to your Azure Machine Learning extension name app.kubernetes.io/component: "dcgm-exporter" spec: selector: matchLabels: app.kubernetes.io/name: dcgm-exporter app.kubernetes.io/instance: "<extension-name>" # Please replace to your Azure Machine Learning extension name app.kubernetes.io/component: "dcgm-exporter" namespaceSelector: matchNames: - "<namespace-of-your-dcgm-exporter>" # Please change this to the same namespace of your dcgm-exporter endpoints: - port: "metrics" path: "/metrics" EOF
Volkan Zamanlayıcı
Kümenizde yanardağ paketi zaten yüklüyse , uzantısının volkan zamanlayıcısını yüklememesi için ayarlayabilirsiniz installVolcano=false
. Volkan zamanlayıcı ve volkan kontrolörü, eğitim işi gönderimi ve zamanlama için gereklidir.
Azure Machine Learning uzantısı tarafından kullanılan volkan zamanlayıcı yapılandırması şöyledir:
volcano-scheduler.conf: |
actions: "enqueue, allocate, backfill"
tiers:
- plugins:
- name: task-topology
- name: priority
- name: gang
- name: conformance
- plugins:
- name: overcommit
- name: drf
- name: predicates
- name: proportion
- name: nodeorder
- name: binpack
Azure Machine Learning eğitim iş yüklerinin düzgün bir şekilde çalışabilmesi için bu yapılandırma ayarlarını kullanmanız ve yanardağ sürümünüz 1.6'dan düşükse yanardağ erişiminde web kancasını devre dışı bırakmanız job/validate
gerekir.
Küme otomatik ölçeklendiricisini destekleyen volkan zamanlayıcı tümleştirmesi
Bu yazışmada açıklandığı gibi, çete eklentisi küme otomatik ölçeklendiricisi (CA) ve AKS'deki düğüm otomatik ölçeklendiricisi ile iyi çalışmıyor.
Ayarı installVolcano=true
aracılığıyla Azure Machine Learning uzantısıyla birlikte gelen volkanı kullanırsanız, uzantının varsayılan olarak çete eklentisini iş kilitlenmesini önlemek için yapılandıran bir zamanlayıcı yapılandırması vardır. Bu nedenle AKS kümesindeki küme otomatik ölçeklendiricisi (CA), uzantı tarafından yüklenen yanardağ ile desteklenmeyecektir.
Bu durumda AKS kümesi otomatik ölçeklendiricisinin normal şekilde çalışabileceğini tercih ederseniz, uzantıyı güncelleştirerek bu volcanoScheduler.schedulerConfigMap
parametreyi yapılandırabilir ve buna hiçbir çete volkan zamanlayıcısının özel bir yapılandırmasını belirtebilirsiniz, örneğin:
volcano-scheduler.conf: |
actions: "enqueue, allocate, backfill"
tiers:
- plugins:
- name: sla
arguments:
sla-waiting-time: 1m
- plugins:
- name: conformance
- plugins:
- name: drf
- name: predicates
- name: proportion
- name: nodeorder
- name: binpack
Aks kümenizde bu yapılandırmayı kullanmak için aşağıdaki adımları izlemeniz gerekir:
- Ad alanında yukarıdaki yapılandırmayla bir yapılandırma
azureml
haritası dosyası oluşturun. Bu ad alanı genellikle Azure Machine Learning uzantısını yüklediğinizde oluşturulur. - Bu yapılandırma haritasını uygulamak için uzantı yapılandırmasında ayarlayın
volcanoScheduler.schedulerConfigMap=<configmap name>
. Uzantıyı yapılandırarakamloperator.skipResourceValidation=true
yüklerken kaynak doğrulamasını atlamanız gerekir. Örneğin:az k8s-extension update --name <extension-name> --config volcanoScheduler.schedulerConfigMap=<configmap name> amloperator.skipResourceValidation=true --cluster-type managedClusters --cluster-name <your-AKS-cluster-name> --resource-group <your-RG-name>
Not
Çete eklentisi kaldırıldığından, volkan işi zamanladığında kilitlenme olasılığı vardır.
- Bu durumu önlemek için işlerde aynı örnek türünü kullanabilirsiniz.
Azure Machine Learning uzantısı tarafından sağlanan varsayılan yapılandırma dışında bir zamanlayıcı yapılandırmasının kullanılması tam olarak desteklenmeyebilir. Dikkatli olun.
Yanardağ sürümünüz 1.6'dan düşükse yanardağ girişinde web kancasını devre dışı bırakmanız job/validate
gerektiğini unutmayın.
Giriş Nginx denetleyicisi
Azure Machine Learning uzantısı yüklemesi varsayılan olarak k8s.io/ingress-nginx
bir giriş nginx denetleyici sınıfıyla birlikte gelir. Kümenizde zaten bir giriş nginx denetleyicisi varsa, yükleme hatasını önlemek için farklı bir denetleyici sınıfı kullanmanız gerekir.
İki seçeneğiniz vardır:
- Mevcut denetleyici sınıfınızı dışında
k8s.io/ingress-nginx
bir şeyle değiştirin. - Aşağıdaki örnekleri izleyerek Azure Machine Learning uzantımızı sizinkilerden farklı bir özel denetleyici sınıfıyla oluşturun veya güncelleştirin.
Örneğin, uzantıyı özel denetleyici sınıfıyla oluşturmak için:
az ml extension create --config nginxIngress.controller="k8s.io/amlarc-ingress-nginx"
Uzantıyı özel denetleyici sınıfıyla güncelleştirmek için:
az ml extension update --config nginxIngress.controller="k8s.io/amlarc-ingress-nginx"
Azure Machine Learning uzantısıyla yüklenen Nginx giriş denetleyicisi, yetersiz bellek (OOM) hataları nedeniyle kilitleniyor
Belirti
Azure Machine Learning uzantısıyla yüklenen nginx giriş denetleyicisi, iş yükü olmadığında bile bellek yetersiz (OOM) hataları nedeniyle kilitleniyor. Denetleyici günlükleri, sorunu tanılamak için herhangi bir yararlı bilgi göstermez.
Olası Neden
Nginx giriş denetleyicisi birçok CPU'ya sahip bir düğümde çalışıyorsa bu sorun oluşabilir. Varsayılan olarak, nginx giriş denetleyicisi çalışan işlemlerini CPU sayısına göre oluşturur ve bu da daha fazla kaynak tüketebilir ve daha fazla CPU'ya sahip düğümlerde OOM hatalarına neden olabilir. Bu, GitHub'da bildirilen bilinen bir sorundur
Çözünürlük
Bu sorunu gidermek için şunları yapabilirsiniz:
- uzantısını parametresiyle
nginxIngress.controllerConfig.worker-processes=8
yükleyerek çalışan işlemlerinin sayısını ayarlayın. - parametresini
nginxIngress.resources.controller.limits.memory=<new limit>
kullanarak bellek sınırını artırın.
İş yüklerinizi etkili bir şekilde iyileştirmek için bu iki parametreyi belirli düğüm belirtimlerinize ve iş yükü gereksinimlerinize göre ayarladığınızdan emin olun.