Inteligența datelor Platon.
Căutare verticală și Ai.

Observabilitate open source pentru nodurile AWS Inferentia din clusterele Amazon EKS | Amazon Web Services

Data:

Evoluțiile recente în învățarea automată (ML) au condus la modele din ce în ce mai mari, dintre care unele necesită sute de miliarde de parametri. Deși sunt mai puternice, instruirea și inferența asupra acestor modele necesită resurse de calcul semnificative. În ciuda disponibilității bibliotecilor de instruire distribuite avansate, este obișnuit ca locurile de muncă de instruire și inferență să aibă nevoie de sute de acceleratoare (GPU-uri sau cipuri ML create special, cum ar fi AWS Trainium și Inferentia AWS), și prin urmare zeci sau sute de instanțe.

În astfel de medii distribuite, observabilitatea atât a instanțelor, cât și a cipurilor ML devine cheia pentru reglarea fină a performanței modelului și optimizarea costurilor. Metricurile permit echipelor să înțeleagă comportamentul sarcinii de lucru și să optimizeze alocarea și utilizarea resurselor, să diagnosticheze anomaliile și să mărească eficiența generală a infrastructurii. Pentru oamenii de știință de date, utilizarea și saturația cipurilor ML sunt, de asemenea, relevante pentru planificarea capacității.

Această postare vă ghidează prin Model de observabilitate open source pentru AWS Inferentia, care vă arată cum să monitorizați performanța cipurilor ML, utilizate într-un Serviciul Amazon Elastic Kubernetes cluster (Amazon EKS), cu noduri de date bazate pe Cloud Elastic de calcul Amazon (Amazon EC2) instanțe de tip Inf1 și Inf2.

Modelul face parte din AWS CDK Observability Accelerator, un set de module cu opinii care să vă ajute să setați observabilitatea pentru clusterele Amazon EKS. AWS CDK Observability Accelerator este organizat în jurul modelelor, care sunt unități reutilizabile pentru implementarea mai multor resurse. Setul de modele de observabilitate open source instrumentează observabilitatea cu Grafana gestionată de Amazon tablouri de bord, an AWS Distro pentru OpenTelemetry colector pentru a colecta valori și Serviciul gestionat Amazon pentru Prometheus pentru a le depozita.

Prezentare generală a soluțiilor

Următoarea diagramă ilustrează arhitectura soluției.

Această soluție implementează un cluster Amazon EKS cu un grup de noduri care include instanțe Inf1.

Tipul AMI al grupului de noduri este AL2_x86_64_GPU, care folosește Amazon EKS optimizat accelerat Amazon Linux AMI. Pe lângă configurația standard AMI optimizată pentru Amazon EKS, AMI accelerată include Timpul de rulare NeuronX.

Pentru a accesa cipurile ML din Kubernetes, modelul implementează AWS Neuron plugin pentru dispozitiv.

Valorile sunt expuse la Amazon Managed Service pentru Prometheus de către neuron-monitor DaemonSet, care implementează un container minim, cu Instrumente pentru neuroni instalat. Mai exact, cel neuron-monitor DaemonSet rulează neuron-monitor comanda introdusă în neuron-monitor-prometheus.py script însoțitor (ambele comenzi fac parte din container):

neuron-monitor | neuron-monitor-prometheus.py --port <port>

Comanda folosește următoarele componente:

  • neuron-monitor colectează valori și statistici de la aplicațiile Neuron care rulează pe sistem și transmite datele colectate către stdout în Format JSON
  • neuron-monitor-prometheus.py mapează și expune datele de telemetrie din formatul JSON în format compatibil cu Prometheus

Datele sunt vizualizate în Amazon Managed Grafana prin tabloul de bord corespunzător.

Restul configurației pentru a colecta și vizualiza valorile cu Amazon Managed Service pentru Prometheus și Amazon Managed Grafana este similară cu cea utilizată în alte modele bazate pe sursă deschisă, care sunt incluse în AWS Observability Accelerator for CDK Depozitul GitHub.

Cerințe preliminare

Aveți nevoie de următoarele pentru a parcurge pașii din această postare:

Configurați mediul înconjurător

Parcurgeți următorii pași pentru a vă configura mediul:

  1. Deschideți o fereastră de terminal și executați următoarele comenzi:
export AWS_REGION=<YOUR AWS REGION>
export ACCOUNT_ID=$(aws sts get-caller-identity --query 'Account' --output text)

  1. Preluați ID-urile spațiului de lucru ale oricărui spațiu de lucru Amazon Managed Grafana existent:
aws grafana list-workspaces

Următorul este exemplul nostru de rezultat:

{
  "workspaces": [
    {
      "authentication": {
        "providers": [
          "AWS_SSO"
        ]
      },
      "created": "2023-06-07T12:23:56.625000-04:00",
      "description": "accelerator-workspace",
      "endpoint": "g-XYZ.grafana-workspace.us-east-2.amazonaws.com",
      "grafanaVersion": "9.4",
      "id": "g-XYZ",
      "modified": "2023-06-07T12:30:09.892000-04:00",
      "name": "accelerator-workspace",
      "notificationDestinations": [
        "SNS"
      ],
      "status": "ACTIVE",
      "tags": {}
    }
  ]
}

  1. Atribuiți valorile lui id și endpoint la următoarele variabile de mediu:
export COA_AMG_WORKSPACE_ID="<<YOUR-WORKSPACE-ID, similar to the above g-XYZ, without quotation marks>>"
export COA_AMG_ENDPOINT_URL="<<https://YOUR-WORKSPACE-URL, including protocol (i.e. https://), without quotation marks, similar to the above https://g-XYZ.grafana-workspace.us-east-2.amazonaws.com>>"

COA_AMG_ENDPOINT_URL trebuie să includă https://.

  1. Creați o cheie API Grafana din spațiul de lucru Amazon Managed Grafana:
export AMG_API_KEY=$(aws grafana create-workspace-api-key 
--key-name "grafana-operator-key" 
--key-role "ADMIN" 
--seconds-to-live 432000 
--workspace-id $COA_AMG_WORKSPACE_ID 
--query key 
--output text)

  1. Stabilește un secret în Manager sistem AWS:
aws ssm put-parameter --name "/cdk-accelerator/grafana-api-key" 
--type "SecureString" 
--value $AMG_API_KEY 
--region $AWS_REGION

Secretul va fi accesat de suplimentul External Secrets și va fi disponibil ca secret nativ Kubernetes în clusterul EKS.

Bootstrap mediul AWS CDK

Primul pas către orice implementare AWS CDK este bootstrap-ul mediului. Folosești cdk bootstrap comandă în AWS CDK CLI pentru a pregăti mediul (o combinație de cont AWS și Regiunea AWS) cu resursele necesare AWS CDK pentru a realiza implementări în acel mediu. Bootstrapping-ul AWS CDK este necesar pentru fiecare combinație de cont și regiune, așa că dacă ați încărcat deja AWS CDK într-o regiune, nu trebuie să repetați procesul de bootstrapping.

cdk bootstrap aws://$ACCOUNT_ID/$AWS_REGION

Implementați soluția

Parcurgeți următorii pași pentru a implementa soluția:

  1. Clonați cdk-aws-observability-accelerator depozit și instalați pachetele de dependență. Acest depozit conține cod AWS CDK v2 scris în TypeScript.
git clone https://github.com/aws-observability/cdk-aws-observability-accelerator.git
cd cdk-aws-observability-accelerator

Se așteaptă ca setările reale pentru fișierele JSON de tablou de bord Grafana să fie specificate în contextul AWS CDK. Trebuie să actualizați context în cdk.json fișier, aflat în directorul curent. Locația tabloului de bord este specificată de fluxRepository.values.GRAFANA_NEURON_DASH_URL parametru și neuronNodeGroup este folosit pentru a seta tipul instanței, numărul și Magazin Amazon Elastic Block (Amazon EBS) dimensiune utilizată pentru noduri.

  1. Introduceți următorul fragment în cdk.json, înlocuind context:
"context": {
    "fluxRepository": {
      "name": "grafana-dashboards",
      "namespace": "grafana-operator",
      "repository": {
        "repoUrl": "https://github.com/aws-observability/aws-observability-accelerator",
        "name": "grafana-dashboards",
        "targetRevision": "main",
        "path": "./artifacts/grafana-operator-manifests/eks/infrastructure"
      },
      "values": {
        "GRAFANA_CLUSTER_DASH_URL" : "https://raw.githubusercontent.com/aws-observability/aws-observability-accelerator/main/artifacts/grafana-dashboards/eks/infrastructure/cluster.json",
        "GRAFANA_KUBELET_DASH_URL" : "https://raw.githubusercontent.com/aws-observability/aws-observability-accelerator/main/artifacts/grafana-dashboards/eks/infrastructure/kubelet.json",
        "GRAFANA_NSWRKLDS_DASH_URL" : "https://raw.githubusercontent.com/aws-observability/aws-observability-accelerator/main/artifacts/grafana-dashboards/eks/infrastructure/namespace-workloads.json",
        "GRAFANA_NODEEXP_DASH_URL" : "https://raw.githubusercontent.com/aws-observability/aws-observability-accelerator/main/artifacts/grafana-dashboards/eks/infrastructure/nodeexporter-nodes.json",
        "GRAFANA_NODES_DASH_URL" : "https://raw.githubusercontent.com/aws-observability/aws-observability-accelerator/main/artifacts/grafana-dashboards/eks/infrastructure/nodes.json",
        "GRAFANA_WORKLOADS_DASH_URL" : "https://raw.githubusercontent.com/aws-observability/aws-observability-accelerator/main/artifacts/grafana-dashboards/eks/infrastructure/workloads.json",
        "GRAFANA_NEURON_DASH_URL" : "https://raw.githubusercontent.com/aws-observability/aws-observability-accelerator/main/artifacts/grafana-dashboards/eks/neuron/neuron-monitor.json"
      },
      "kustomizations": [
        {
          "kustomizationPath": "./artifacts/grafana-operator-manifests/eks/infrastructure"
        },
        {
          "kustomizationPath": "./artifacts/grafana-operator-manifests/eks/neuron"
        }
      ]
    },
     "neuronNodeGroup": {
      "instanceClass": "inf1",
      "instanceSize": "2xlarge",
      "desiredSize": 1, 
      "minSize": 1, 
      "maxSize": 3,
      "ebsSize": 512
    }
  }

Puteți înlocui tipul instanței Inf1 cu Inf2 și puteți modifica dimensiunea după cum este necesar. Pentru a verifica disponibilitatea în Regiunea selectată, rulați următoarea comandă (modificare Values dupa cum crezi de cuviinta):

aws ec2 describe-instance-type-offerings 
--filters Name=instance-type,Values="inf1*" 
--query "InstanceTypeOfferings[].InstanceType" 
--region $AWS_REGION

  1. Instalați dependențele proiectului:
npm install

  1. Rulați următoarele comenzi pentru a implementa modelul de observabilitate open source:
make build
make pattern single-new-eks-inferentia-opensource-observability deploy

Validați soluția

Parcurgeți următorii pași pentru a valida soluția:

  1. Pornește update-kubeconfig comanda. Ar trebui să puteți obține comanda din mesajul de ieșire al comenzii anterioare:
aws eks update-kubeconfig --name single-new-eks-inferentia-opensource... --region <your region> --role-arn arn:aws:iam::xxxxxxxxx:role/single-new-eks-....

  1. Verificați resursele pe care le-ați creat:
kubectl get pods -A

Următoarea captură de ecran arată rezultatul nostru exemplu.

  1. Asigurați-vă că neuron-device-plugin-daemonset DaemonSet rulează:
kubectl get ds neuron-device-plugin-daemonset --namespace kube-system

Următoarele sunt rezultatele așteptate:

NAME                             DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
neuron-device-plugin-daemonset   1         1         1       1            1           <none>          2h

  1. Confirmați că neuron-monitor DaemonSet rulează:
kubectl get ds neuron-monitor --namespace kube-system

Următoarele sunt rezultatele așteptate:

NAME             DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
neuron-monitor   1         1         1       1            1           <none>          2h

  1. Pentru a verifica dacă dispozitivele și nucleele Neuron sunt vizibile, rulați neuron-ls și neuron-top comenzi de la, de exemplu, podul de monitorizare a neuronilor (puteți obține numele podului din rezultatul kubectl get pods -A):
kubectl exec -it {your neuron-monitor pod} -n kube-system -- /bin/bash -c "neuron-ls"

Următoarea captură de ecran arată rezultatul așteptat.

kubectl exec -it {your neuron-monitor pod} -n kube-system -- /bin/bash -c "neuron-top"

Următoarea captură de ecran arată rezultatul așteptat.

Vizualizați datele folosind tabloul de bord Grafana Neuron

Conectați-vă la spațiul dvs. de lucru Amazon Managed Grafana și navigați la Tablourile de bord panou. Ar trebui să vedeți un tablou de bord numit Neuron / Monitor.

Pentru a vedea câteva valori interesante pe tabloul de bord Grafana, aplicăm următorul manifest:

curl https://raw.githubusercontent.com/aws-observability/aws-observability-accelerator/main/artifacts/k8s-deployment-manifest-templates/neuron/pytorch-inference-resnet50.yml | kubectl apply -f -

Acesta este un exemplu de încărcare de lucru care compilează fișierul modelul torchvision ResNet50 și rulează inferențe repetitive într-o buclă pentru a genera date de telemetrie.

Pentru a verifica că podul a fost implementat cu succes, rulați următorul cod:

kubectl get pods

Ar trebui să vedeți un pod numit pytorch-inference-resnet50.

După câteva minute, uitându-mă în Neuron / Monitor tabloul de bord, ar trebui să vedeți valorile adunate similare cu următoarele capturi de ecran.

Grafana Operator și Flux lucrează întotdeauna împreună pentru a vă sincroniza tablourile de bord cu Git. Dacă ștergeți tablourile de bord din întâmplare, acestea vor fi reprovizionate automat.

A curăța

Puteți șterge întreaga stivă AWS CDK cu următoarea comandă:

make pattern single-new-eks-inferentia-opensource-observability destroy

Concluzie

În această postare, v-am arătat cum să introduceți observabilitatea, cu instrumente open source, într-un cluster EKS cu un plan de date care rulează instanțe EC2 Inf1. Am început prin a selecta AMI-ul accelerat optimizat pentru Amazon EKS pentru nodurile planului de date, care include durata de rulare a containerului Neuron, oferind acces la dispozitivele AWS Inferentia și Trainium Neuron. Apoi, pentru a expune nucleele și dispozitivele Neuron la Kubernetes, am implementat pluginul pentru dispozitivul Neuron. Colectarea și maparea efectivă a datelor de telemetrie în format compatibil cu Prometheus a fost realizată prin neuron-monitor și neuron-monitor-prometheus.py. Valorile au fost obținute de la Amazon Managed Service pentru Prometheus și afișate pe tabloul de bord Neuron al Amazon Managed Grafana.

Vă recomandăm să explorați modele de observabilitate suplimentare în AWS Observability Accelerator pentru CDK Repoziție GitHub. Pentru a afla mai multe despre Neuron, consultați Documentația AWS Neuron.


Despre autor

Riccardo Freschi este arhitect senior de soluții la AWS, concentrându-se pe modernizarea aplicațiilor. El lucrează îndeaproape cu partenerii și clienții pentru a-i ajuta să-și transforme peisajul IT în călătoria lor către AWS Cloud prin refactorizarea aplicațiilor existente și construind altele noi.

spot_img

Ultimele informații

spot_img

Chat cu noi

Bună! Cu ce ​​​​vă pot ajuta?