Megosztás a következőn keresztül:


Az Azure Machine Learning-bővítmény hibaelhárítása

Ebből a cikkből megtudhatja, hogyan háríthatja el az Azure Machine Learning-bővítmények AKS-ben vagy Arc-kompatibilis Kubernetesben való üzembe helyezésével kapcsolatos gyakori problémákat.

Azure Machine Learning-bővítmény telepítése

Az Azure Machine Learning-bővítmény helm-diagramként jelenik meg, és a Helm V3 telepíti. Az Azure Machine Learning-bővítmény összes összetevője telepítve van a névtérben azureml . A bővítmény állapotának ellenőrzéséhez az alábbi parancsokkal ellenőrizheti.

# 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-bővítmény üzembehelyezési hibáinak elhárítása

Hiba: nem használható fel újra már használatban lévő név

Ez a hiba azt jelenti, hogy a megadott bővítménynév már létezik. Ha az Azure Machine Learning bővítmény használja a nevet, körülbelül egy órát kell várnia, és újra kell próbálkoznia. Ha a nevet más helm-diagramok használják, más nevet kell használnia. Futtassa helm list -Aa a fürt összes helm-diagramját.

Hiba: a Helm-diagram korábbi művelete még folyamatban van

Várjon körülbelül egy órát, és próbálkozzon újra az ismeretlen művelet befejezése után.

Hiba: nem lehet létrehozni új tartalmat az azureml névtérben, mert folyamatban van a leállítása

Ez a hiba akkor fordul elő, ha egy eltávolítási művelet nem fejeződik be, és aktiválódott egy másik telepítési művelet. Az az k8s-extension show parancs futtatásával ellenőrizheti a bővítmény kiépítési állapotát, és győződjön meg arról, hogy a bővítmény eltávolítása megtörtént, mielőtt más műveleteket hajtana végre.

Hiba: a letöltés sikertelen, a diagram útvonala nem található

Ez a hiba akkor fordul elő, ha helytelen bővítményverziót adott meg. Győződjön meg arról, hogy a megadott verzió létezik. Ha a legújabb verziót szeretné használni, nem kell megadnia --version .

Hiba: nem importálható az aktuális kiadásba: érvénytelen tulajdonú metaadatok

Ez a hiba azt jelenti, hogy ütközés van a meglévő fürterőforrások és az Azure Machine Learning-bővítmény között. A teljes hibaüzenet a következő szöveghez hasonló lehet:

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"

A probléma megoldásához kövesse az alábbi lépéseket.

  • Ellenőrizze, hogy ki birtokolja a problémás erőforrásokat, és hogy az erőforrás törölhető vagy módosítható-e.

  • Ha az erőforrást csak az Azure Machine Learning-bővítmény használja, és törölhető, manuálisan is hozzáadhat címkéket a probléma megoldásához. Az előző hibaüzenetet példaként véve a következő parancsokat futtathatja:

    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>"
    

    Ha a címkéket és a széljegyzeteket az erőforrásra állítja, az azt jelenti, hogy a Helm kezeli az Azure Machine Learning-bővítmény tulajdonában lévő erőforrást.

  • Ha az erőforrást a fürt más összetevői is használják, és nem módosíthatók. Az Azure Machine Learning-bővítmény üzembe helyezéséhez tekintse meg, hogy van-e konfigurációs beállítás az ütközési erőforrás letiltásához.

Bővítményre vonatkozó HealthCheck

Ha a telepítés sikertelen volt, és a fenti hibaüzenetek egyikét sem találta el, a beépített állapot-ellenőrzési feladattal átfogó ellenőrzést végezhet a bővítményen. Az Azure Machine Learning-bővítmény egy HealthCheck feladatot tartalmaz a fürt felkészültségének előzetes ellenőrzésére a bővítmény telepítésekor, frissítésekor vagy törlésekor. A HealthCheck feladat egy jelentést ad ki, amelyet egy névtérben azureml elnevezett arcml-healthcheck konfigurációtérképen ment a rendszer. A hibakódok és a jelentés lehetséges megoldásai a HealthCheck hibakódjában találhatók.

Futtassa ezt a parancsot a HealthCheck jelentés lekéréséhez,

kubectl describe configmap -n azureml arcml-healthcheck

Az állapot-ellenőrzés a bővítmény telepítésekor, frissítésekor vagy törlésekor aktiválódik. Az állapot-ellenőrzési jelentés több részből pre-installáll, pre-rollbackpre-upgrade és pre-delete.

  • Ha a bővítmény telepítése sikertelen volt, vizsgálja meg pre-install a következőt pre-delete: .
  • Ha a bővítmény frissítése sikertelen volt, tekintse meg pre-upgrade a következőt pre-rollback: .
  • Ha a bővítmény törlése sikertelen volt, tekintse meg a következőt pre-delete:

Ha támogatást kér, javasoljuk, hogy futtassa a következő parancsot, és küldje el nekünk ahealthcheck.logs fájlt, mivel ez megkönnyítheti a probléma jobb megtalálását.

kubectl logs healthcheck -n azureml

A HealthCheck hibakódja

Ez a táblázat bemutatja, hogyan háríthatja el a HealthCheck jelentés által visszaadott hibakódokat.

Hibakód Hibaüzenet Leírás
E40001 LOAD_BALANCER_NOT_SUPPORT A terheléselosztó nem támogatott a fürtben. Konfigurálnia kell a terheléselosztót a fürtben, vagy meg kell fontolnia a beállítását inferenceRouterServiceType nodePort.clusterIP
E40002 INSUFFICIENT_NODE Engedélyezte, inferenceRouterHA hogy legalább három csomópontot igényeljön a fürtben. Tiltsa le a HA-t, ha háromnál kevesebb csomópontja van.
E40003 INTERNAL_LOAD_BALANCER_NOT_SUPPORT Jelenleg csak az AKS támogatja a belső terheléselosztót, és csak a típust azure támogatjuk. Ne állítsa be internalLoadBalancerProvider , ha nincs AKS-fürtje.
E40007 INVALID_SSL_SETTING Az SSL-kulcs vagy -tanúsítvány érvénytelen. A CNAME-nek kompatibilisnek kell lennie a tanúsítvánnyal.
E45002 PROMETHEUS_CONFLICT A telepített Prometheus operátor ütközik a meglévő Prometheus-operátorral. További információ: Prometheus operátor
E45003 BAD_NETWORK_CONNECTIVITY Meg kell felelnie a hálózati követelményeknek.
E45004 AZUREML_FE_ROLE_CONFLICT Az Azure Machine Learning-bővítmény nem támogatott az örökölt AKS-ben. Az Azure Machine Learning-bővítmény telepítéséhez törölnie kell az örökölt azureml-fe összetevőket.
E45005 AZUREML_FE_DEPLOYMENT_CONFLICT Az Azure Machine Learning-bővítmény nem támogatott az örökölt AKS-ben. Az Azure Machine Learning-bővítmény telepítéséhez az alábbi parancsot kell futtatnia az űrlap alatt az örökölt azureml-fe összetevők törléséhez. Erről itt olvashat bővebben.

Parancsok az AKS-fürt örökölt azureml-fe összetevőinek törléséhez:

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

Nyílt forráskódú összetevők integrálása

Az Azure Machine Learning-bővítmény néhány nyílt forráskód összetevőt használ, például a Prometheus Operatort, a Vulkánütemezőt és a DCGM-exportőrt. Ha a Kubernetes-fürt már telepített néhányat, a következő szakaszokból megtudhatja, hogy a meglévő összetevők integrálhatók-e az Azure Machine Learning-bővítménysel.

Prometheus operátor

A Prometheus operátor egy nyílt forráskód keretrendszer, amely segít a metrikamonitorozási rendszer kiépítésében a Kubernetesben. Az Azure Machine Learning-bővítmény a Prometheus operátort is használja a feladatok erőforrás-kihasználtságának figyeléséhez.

Ha a fürt más szolgáltatás által telepített Prometheus operátorral rendelkezik, megadhatja installPromOp=false , hogy letiltsa a Prometheus operátort az Azure Machine Learning bővítményben, hogy elkerülje a két Prometheus-operátor közötti ütközést. Ebben az esetben a meglévő prometheus operátor kezeli az összes Prometheus-példányt. Annak érdekében, hogy a Prometheus megfelelően működjön, az alábbi dolgokra kell figyelni, amikor letiltja a Prometheus operátort az Azure Machine Learning bővítményben.

  1. Ellenőrizze, hogy a Prometheus operátor felügyeli-e a prometheus-t az Azureml-névtérben. Bizonyos esetekben a Prometheus operátor csak bizonyos névterek figyelésére van beállítva. Ha igen, ellenőrizze, hogy az azureml-névtér szerepel-e az engedélyezési listán. További információ: parancsjelölők.
  2. Ellenőrizze, hogy a Kubelet-service engedélyezve van-e a Prometheus operátorban. A Kubelet-szolgáltatás a kubelet összes végpontját tartalmazza. További információ: parancsjelölők. És azt is meg kell győződnie, hogy a Kubelet-service rendelkezik címkévelk8s-app=kubelet.
  3. Hozza létre a ServiceMonitort a kubelet-service szolgáltatáshoz. Futtassa a következő parancsot a lecserélt változókkal:
    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-exportőr

A Dcgm-exporter az NVIDIA által a GPU-metrikák gyűjtésére ajánlott hivatalos eszköz. Integráltuk az Azure Machine Learning bővítménybe. Alapértelmezés szerint azonban a dcgm-exportőr nincs engedélyezve, és a rendszer nem gyűjt GPU-metrikákat. Az engedélyezéshez megadhatja installDcgmExporter a true jelzőt. Mivel ez az NVIDIA hivatalos eszköze, lehet, hogy már telepítve van a GPU-fürtön. Ha igen, beállíthatja installDcgmExporter false és követheti a lépéseket, hogy integrálja a dcgm-exportőrt az Azure Machine Learning-bővítménybe. Egy másik dolog, amit érdemes megjegyezni, hogy a dcgm-exportőr lehetővé teszi a felhasználó számára, hogy konfigurálja, hogy mely metrikákat tegye elérhetővé. Az Azure Machine Learning-bővítmény esetében győződjön meg arról, hogy DCGM_FI_DEV_GPU_UTILDCGM_FI_DEV_FB_FREE a metrikák és DCGM_FI_DEV_FB_USED a metrikák elérhetők.

  1. Győződjön meg arról, hogy sikeresen telepítette az Aureml-bővítményt és a dcgm-exportőrt. A Dcgm-exporter dcgm-exporter helm chart vagy Gpu-operator helm chart használatával telepíthető

  2. Ellenőrizze, hogy van-e szolgáltatás a dcgm-exportőr számára. Ha nem létezik, vagy nem tudja, hogyan kell ellenőrizni, futtassa a következő parancsot a létrehozáshoz.

    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
    
  3. Ellenőrizze, hogy az előző lépés szolgáltatása megfelelően van-e beállítva

    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
    
  4. Állítsa be a ServiceMonitort, hogy elérhetővé tegye a dcgm-exporter szolgáltatást az Azure Machine Learning-bővítményben. Futtassa a következő parancsot, és néhány percen belül érvénybe lép.

    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
    

Vulkánütemező

Ha a fürtben már telepítve van a vulkáncsomag, beállíthatja installVolcano=false, hogy a bővítmény ne telepítse a vulkánütemezőt. A vulkánütemező és a vulkánvezérlő szükséges a betanítási feladatok beküldéséhez és ütemezéséhez.

Az Azure Machine Learning bővítmény által használt vulkánütemező konfigurációja a következő:

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

Ugyanezeket a konfigurációs beállításokat kell használnia, és le kell tiltania job/validate a webhookot a vulkánbeléptetésben, ha a vulkán verziója 1,6-nál alacsonyabb, hogy az Azure Machine Learning betanítási számítási feladatai megfelelően teljesíthessenek.

A fürt automatikus skálázását támogató vulkánütemező-integráció

Ahogy ebben a szálban is szó volt róla, a banda beépülő modul nem működik jól a fürt automatikus skálázójával (CA) és az AKS-ben található csomópontok automatikus skálázásával.

Ha az Azure Machine Learning bővítményhez tartozó vulkánt használja a beállításon installVolcano=truekeresztül, a bővítmény alapértelmezés szerint egy ütemező konfigurációval rendelkezik, amely konfigurálja a banda beépülő modult a feladat holtpontjának elkerülése érdekében. Ezért az AKS-fürtben lévő automatikus fürtméretező (CA) nem támogatott a bővítmény által telepített vulkánnal.

Ebben az esetben, ha azt szeretné, hogy az AKS-fürt automatikus skálázása normálisan működjön, konfigurálhatja ezt a volcanoScheduler.schedulerConfigMap paramétert a bővítmény frissítésével, és megadhat egy egyéni konfigurációt , amely nem tartalmazza a gang vulkánütemezőjét, például:

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

Ha ezt a konfigurációt az AKS-fürtben szeretné használni, kövesse az alábbi lépéseket:

  1. Hozzon létre egy konfigurációtérképfájlt a névtérben azureml a fenti konfigurációval. Ez a névtér általában az Azure Machine Learning bővítmény telepítésekor jön létre.
  2. A bővítménykonfigurációban állítsa be volcanoScheduler.schedulerConfigMap=<configmap name> ezt a konfigurációtérképet. A bővítmény telepítésekor pedig ki kell hagynia az erőforrás-ellenőrzést a konfigurálással amloperator.skipResourceValidation=true. Például:
    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>
    

Feljegyzés

Mivel a banda beépülő modul el van távolítva, lehetséges, hogy a holtpont akkor történik, amikor a vulkán ütemezi a munkát.

  • A helyzet elkerülése érdekében használhatja ugyanazt a példánytípust a feladatok között.

Előfordulhat, hogy az Azure Machine Learning bővítmény által megadott alapértelmezetttől eltérő ütemező-konfiguráció használata nem támogatott teljes mértékben. Legyen óvatos.

Vegye figyelembe, hogy le kell tiltania job/validate webhook a vulkán belépés, ha a vulkán verziója alacsonyabb, mint 1.6.

Bejövő Nginx-vezérlő

Az Azure Machine Learning bővítmény telepítése alapértelmezés szerint egy bejövő nginx vezérlőosztályt k8s.io/ingress-nginx tartalmaz. Ha már rendelkezik bejövő nginx-vezérlővel a fürtben, a telepítési hiba elkerülése érdekében egy másik vezérlőosztályt kell használnia.

Két lehetőség áll rendelkezésre:

  • Módosítsa a meglévő vezérlőosztályt másra, mint k8s.io/ingress-nginxa .
  • Az alábbi példák követésével hozzon létre vagy frissítse az Azure Machine Learning-bővítményt egy egyéni vezérlőosztálysal, amely eltér az Önétől.

Ha például egyéni vezérlőosztálysal szeretné létrehozni a bővítményt:

az ml extension create --config nginxIngress.controller="k8s.io/amlarc-ingress-nginx"

A bővítmény frissítése egyéni vezérlőosztálysal:

az ml extension update --config nginxIngress.controller="k8s.io/amlarc-ingress-nginx"

Az Azure Machine Learning-bővítménysel telepített Nginx bejövőforgalom-vezérlő memóriahiányos (OOM) hibák miatt összeomlik

Tünet

Az Azure Machine Learning-bővítménysel telepített nginx bejövőforgalom-vezérlő memóriahiány (OOM) miatt akkor is összeomlik, ha nincs számítási feladat. A vezérlőnaplók nem tartalmaznak hasznos információkat a probléma diagnosztizálásához.

Lehetséges ok

Ez a probléma akkor fordulhat elő, ha az nginx bejövőforgalom-vezérlő egy sok CPU-val rendelkező csomóponton fut. Alapértelmezés szerint az nginx bejövőforgalom-vezérlő a processzorok számának megfelelően generálja a feldolgozói folyamatokat, ami több erőforrást is igénybe vehet, és OOM-hibákat okozhat a több CPU-val rendelkező csomópontokon. Ez egy ismert probléma , amelyet a GitHubon jelentettek

Resolution (Osztás)

A probléma megoldásához a következőket teheti:

  • Módosítsa a feldolgozói folyamatok számát a bővítmény paraméterrel való telepítésével nginxIngress.controllerConfig.worker-processes=8.
  • Növelje a memóriakorlátot a paraméterrel nginxIngress.resources.controller.limits.memory=<new limit>.

A számítási feladatok hatékony optimalizálása érdekében győződjön meg arról, hogy ezt a két paramétert az adott csomópont specifikációinak és számítási feladatainak megfelelően kell módosítania.

Következő lépések