Platon Data Intelligence.
Vertikal sökning & Ai.

Observerbarhet med öppen källkod för AWS Inferentia-noder inom Amazon EKS-kluster | Amazon webbtjänster

Datum:

Den senaste tidens utveckling inom maskininlärning (ML) har lett till allt större modeller, av vilka några kräver hundratals miljarder parametrar. Även om de är mer kraftfulla kräver utbildning och slutsatser om dessa modeller betydande beräkningsresurser. Trots tillgången till avancerade distribuerade utbildningsbibliotek är det vanligt att utbildnings- och slutledningsjobb behöver hundratals acceleratorer (GPU:er eller specialbyggda ML-chips som t.ex. AWS Trainium och AWS slutledning), och därför tiotals eller hundratals instanser.

I sådana distribuerade miljöer blir observerbarheten av både instanser och ML-chips nyckeln till finjustering av modellprestanda och kostnadsoptimering. Mätvärden gör det möjligt för team att förstå arbetsbelastningsbeteende och optimera resursallokering och resursutnyttjande, diagnostisera anomalier och öka den övergripande effektiviteten i infrastrukturen. För datavetare är ML-chips utnyttjande och mättnad också relevant för kapacitetsplanering.

Det här inlägget leder dig genom Öppen källkods observationsmönster för AWS Inferentia, som visar hur du övervakar prestandan för ML-chips, som används i en Amazon Elastic Kubernetes-tjänst (Amazon EKS) kluster, med dataplansnoder baserade på Amazon Elastic Compute Cloud (Amazon EC2) instanser av typen INF1 och INF2.

Mönstret är en del av AWS CDK observationsaccelerator, en uppsättning opinionsbildande moduler som hjälper dig att ställa in observerbarhet för Amazon EKS-kluster. AWS CDK Observability Accelerator är organiserad kring mönster, som är återanvändbara enheter för att distribuera flera resurser. Den öppna källkodsobservationsuppsättningen av mönster instrument observerbarhet med Amazon Managed Grafana instrumentpaneler, en AWS Distro för OpenTelemetry samlare för att samla in mätvärden, och Amazon Managed Service för Prometheus att lagra dem.

Lösningsöversikt

Följande diagram illustrerar lösningsarkitekturen.

Denna lösning distribuerar ett Amazon EKS-kluster med en nodgrupp som inkluderar Inf1-instanser.

AMI-typen för nodgruppen är AL2_x86_64_GPU, som använder Amazon EKS-optimerad accelererad Amazon Linux AMI. Förutom den vanliga Amazon EKS-optimerade AMI-konfigurationen, inkluderar den accelererade AMI NeuronX körtid.

För att komma åt ML-chippen från Kubernetes distribuerar mönstret AWS Neuron enhets plugin.

Mätvärden exponeras för Amazon Managed Service för Prometheus av neuron-monitor DaemonSet, som distribuerar en minimal behållare, med Neuronverktyg installerat. Närmare bestämt neuron-monitor DaemonSet kör neuron-monitor kommandot leds in i neuron-monitor-prometheus.py medföljande skript (båda kommandona är en del av behållaren):

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

Kommandot använder följande komponenter:

  • neuron-monitor samlar in mätvärden och statistik från Neuron-applikationerna som körs på systemet och strömmar insamlad data till stdout i JSON-format
  • neuron-monitor-prometheus.py mappar och exponerar telemetridata från JSON-format till Prometheus-kompatibelt format

Data visualiseras i Amazon Managed Grafana av motsvarande instrumentpanel.

Resten av installationen för att samla in och visualisera mätvärden med Amazon Managed Service för Prometheus och Amazon Managed Grafana liknar den som används i andra öppen källkodsbaserade mönster, som ingår i AWS Observability Accelerator for CDK GitHub-förvar.

Förutsättningar

Du behöver följande för att slutföra stegen i det här inlägget:

Ställ in miljön

Utför följande steg för att konfigurera din miljö:

  1. Öppna ett terminalfönster och kör följande kommandon:
export AWS_REGION=<YOUR AWS REGION>
export ACCOUNT_ID=$(aws sts get-caller-identity --query 'Account' --output text)

  1. Hämta arbetsyte-ID:n för alla befintliga Amazon Managed Grafana-arbetsyta:
aws grafana list-workspaces

Följande är vårt exempelutdata:

{
  "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. Tilldela värdena för id och endpoint till följande miljövariabler:
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 behöver inkludera https://.

  1. Skapa en Grafana API-nyckel från Amazon Managed Grafana-arbetsytan:
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. Skapa en hemlighet i AWS systemchef:
aws ssm put-parameter --name "/cdk-accelerator/grafana-api-key" 
--type "SecureString" 
--value $AMG_API_KEY 
--region $AWS_REGION

Hemligheten kommer att nås av External Secrets-tillägget och göras tillgänglig som en inbyggd Kubernetes-hemlighet i EKS-klustret.

Starta AWS CDK-miljön

Det första steget till en AWS CDK-distribution är att starta upp miljön. Du använder cdk bootstrap kommando i AWS CDK CLI för att förbereda miljön (en kombination av AWS-konto och AWS-region) med resurser som krävs av AWS CDK för att utföra distributioner i den miljön. AWS CDK-bootstrapping behövs för varje konto- och regionkombination, så om du redan har bootstrappat AWS CDK i en region, behöver du inte upprepa bootstrapping-processen.

cdk bootstrap aws://$ACCOUNT_ID/$AWS_REGION

Distribuera lösningen

Utför följande steg för att distribuera lösningen:

  1. Klona cdk-aws-observationsaccelerator repository och installera beroendepaketen. Det här arkivet innehåller AWS CDK v2-kod skriven i TypeScript.
git clone https://github.com/aws-observability/cdk-aws-observability-accelerator.git
cd cdk-aws-observability-accelerator

De faktiska inställningarna för Grafana dashboard JSON-filer förväntas specificeras i AWS CDK-kontexten. Du måste uppdatera context i cdk.json fil, som finns i den aktuella katalogen. Placeringen av instrumentbrädan anges av fluxRepository.values.GRAFANA_NEURON_DASH_URL parameter, och neuronNodeGroup används för att ställa in instanstyp, nummer och Amazon Elastic Block Store (Amazon EBS) storlek som används för noderna.

  1. Skriv in följande utdrag i cdk.json, byter ut 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
    }
  }

Du kan ersätta Inf1-instanstypen med Inf2 och ändra storleken efter behov. För att kontrollera tillgänglighet i din valda region, kör följande kommando (ändra Values som du tycker passar):

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

  1. Installera projektberoendena:
npm install

  1. Kör följande kommandon för att distribuera observerbarhetsmönstret med öppen källkod:
make build
make pattern single-new-eks-inferentia-opensource-observability deploy

Validera lösningen

Utför följande steg för att validera lösningen:

  1. Kör update-kubeconfig kommando. Du bör kunna hämta kommandot från utdatameddelandet från föregående kommando:
aws eks update-kubeconfig --name single-new-eks-inferentia-opensource... --region <your region> --role-arn arn:aws:iam::xxxxxxxxx:role/single-new-eks-....

  1. Verifiera resurserna du skapade:
kubectl get pods -A

Följande skärmdump visar vårt exempelutdata.

  1. Se till neuron-device-plugin-daemonset DaemonSet körs:
kubectl get ds neuron-device-plugin-daemonset --namespace kube-system

Följande är vår förväntade produktion:

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

  1. Bekräfta att neuron-monitor DaemonSet körs:
kubectl get ds neuron-monitor --namespace kube-system

Följande är vår förväntade produktion:

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

  1. För att verifiera att Neuron-enheterna och kärnorna är synliga, kör du neuron-ls och neuron-top kommandon från till exempel din neuron-monitor pod (du kan få poddens namn från utdata från kubectl get pods -A):
kubectl exec -it {your neuron-monitor pod} -n kube-system -- /bin/bash -c "neuron-ls"

Följande skärmdump visar vår förväntade produktion.

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

Följande skärmdump visar vår förväntade produktion.

Visualisera data med Grafana Neuron-instrumentpanelen

Logga in på din Amazon Managed Grafana-arbetsyta och navigera till Instrumentpaneler panel. Du bör se en instrumentpanel med namnet Neuron / Monitor.

För att se några intressanta mätvärden på Grafanas instrumentpanel tillämpar vi följande 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 -

Detta är ett exempel på en arbetsbelastning som kompilerar torchvision ResNet50 modell och kör repetitiv slutledning i en slinga för att generera telemetridata.

För att verifiera att podden har distribuerats framgångsrikt, kör följande kod:

kubectl get pods

Du bör se en pod som heter pytorch-inference-resnet50.

Efter några minuter, titta in i Neuron / Monitor instrumentpanelen, bör du se den insamlade statistiken som liknar följande skärmdumpar.

Grafana Operator och Flux arbetar alltid tillsammans för att synkronisera dina instrumentpaneler med Git. Om du raderar dina instrumentpaneler av misstag, kommer de att tillhandahållas om automatiskt.

Städa upp

Du kan ta bort hela AWS CDK-stacken med följande kommando:

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

Slutsats

I det här inlägget visade vi dig hur du introducerar observerbarhet, med verktyg med öppen källkod, i ett EKS-kluster med ett dataplan som kör EC2 Inf1-instanser. Vi började med att välja Amazon EKS-optimerad accelererad AMI för dataplansnoderna, som inkluderar Neuron container runtime, vilket ger åtkomst till AWS Inferentia och Trainium Neuron-enheter. Sedan, för att exponera Neuron-kärnorna och enheterna för Kubernetes, distribuerade vi Neuron-enhetsplugin. Själva insamlingen och kartläggningen av telemetridata till Prometheus-kompatibelt format uppnåddes via neuron-monitor och neuron-monitor-prometheus.py. Mätvärden hämtades från Amazon Managed Service för Prometheus och visades på Neuron-instrumentpanelen för Amazon Managed Grafana.

Vi rekommenderar att du utforskar ytterligare observerbarhetsmönster i AWS Observability Accelerator för CDK GitHub repo. För att lära dig mer om Neuron, se AWS Neuron-dokumentation.


Om författaren

Riccardo Freschi är Sr. Solutions Architect på AWS, med fokus på applikationsmodernisering. Han arbetar nära partners och kunder för att hjälpa dem att förvandla sina IT-landskap på sin resa till AWS-molnet genom att omstrukturera befintliga applikationer och bygga nya.

plats_img

Senaste intelligens

plats_img

Chatta med oss

Hallå där! Hur kan jag hjälpa dig?