Inteligencia de datos de Platón.
Búsqueda vertical y Ai.

Observabilidad de código abierto para nodos de AWS Inferentia dentro de clústeres de Amazon EKS | Servicios web de Amazon

Fecha:

Los avances recientes en el aprendizaje automático (ML) han dado lugar a modelos cada vez más grandes, algunos de los cuales requieren cientos de miles de millones de parámetros. Aunque son más potentes, el entrenamiento y la inferencia sobre esos modelos requieren importantes recursos computacionales. A pesar de la disponibilidad de bibliotecas de capacitación distribuidas avanzadas, es común que los trabajos de capacitación e inferencia necesiten cientos de aceleradores (GPU o chips de aprendizaje automático especialmente diseñados, como tren de AWS y Inferencia de AWS), y por lo tanto decenas o cientos de instancias.

En dichos entornos distribuidos, la observabilidad tanto de las instancias como de los chips ML se vuelve clave para ajustar el rendimiento del modelo y optimizar los costos. Las métricas permiten a los equipos comprender el comportamiento de las cargas de trabajo y optimizar la asignación y utilización de recursos, diagnosticar anomalías y aumentar la eficiencia general de la infraestructura. Para los científicos de datos, la utilización y saturación de los chips ML también son relevantes para la planificación de la capacidad.

Esta publicación lo guía a través del Patrón de observabilidad de código abierto para AWS Inferentia, que le muestra cómo monitorear el rendimiento de los chips ML, utilizados en un Servicio Amazon Elastic Kubernetes (Amazon EKS), con nodos de plano de datos basados ​​en Nube informática elástica de Amazon (Amazon EC2) instancias de tipo Inf1 y Inf2.

El patrón es parte del Acelerador de observabilidad de AWS CDK, un conjunto de módulos obstinados que le ayudarán a establecer la observabilidad de los clústeres de Amazon EKS. El Acelerador de observabilidad de AWS CDK está organizado en torno a patrones, que son unidades reutilizables para implementar múltiples recursos. El conjunto de patrones de observabilidad de código abierto instrumenta la observabilidad con Grafana gestionado por Amazon tableros de instrumentos, un Distribución de AWS para OpenTelemetry recopilador para recopilar métricas, y Servicio administrado de Amazon para Prometheus para almacenarlos

Resumen de la solución

El siguiente diagrama ilustra la arquitectura de la solución.

Esta solución implementa un clúster de Amazon EKS con un grupo de nodos que incluye instancias Inf1.

El tipo de AMI del grupo de nodos es AL2_x86_64_GPU, que usa el AMI de Amazon Linux acelerada optimizada para Amazon EKS. Además de la configuración de AMI estándar optimizada para Amazon EKS, la AMI acelerada incluye la Tiempo de ejecución de NeuronX.

Para acceder a los chips ML de Kubernetes, el patrón implementa el AWS neurona complemento del dispositivo.

Las métricas están expuestas a Amazon Managed Service for Prometheus mediante el neuron-monitor DaemonSet, que implementa un contenedor mínimo, con el Herramientas neuronales instalado. Específicamente, el neuron-monitor DaemonSet ejecuta el neuron-monitor comando canalizado al neuron-monitor-prometheus.py script complementario (ambos comandos son parte del contenedor):

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

El comando utiliza los siguientes componentes:

  • neuron-monitor recopila métricas y estadísticas de las aplicaciones Neuron que se ejecutan en el sistema y transmite los datos recopilados a la salida estándar en Formato JSON
  • neuron-monitor-prometheus.py Mapea y expone los datos de telemetría del formato JSON al formato compatible con Prometheus.

Los datos se visualizan en Amazon Managed Grafana mediante el panel correspondiente.

El resto de la configuración para recopilar y visualizar métricas con Amazon Managed Service for Prometheus y Amazon Managed Grafana es similar a la utilizada en otros patrones basados ​​en código abierto, que se incluyen en el AWS Observability Accelerator for CDK Repositorio de GitHub.

Requisitos previos

Necesita lo siguiente para completar los pasos de esta publicación:

Configurar el entorno

Complete los siguientes pasos para configurar su entorno:

  1. Abra una ventana de terminal y ejecute los siguientes comandos:
export AWS_REGION=<YOUR AWS REGION>
export ACCOUNT_ID=$(aws sts get-caller-identity --query 'Account' --output text)

  1. Recupere los ID del espacio de trabajo de cualquier espacio de trabajo de Amazon Managed Grafana existente:
aws grafana list-workspaces

El siguiente es nuestro resultado de muestra:

{
  "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. Asigne los valores de id y endpoint a las siguientes variables de entorno:
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 necesita incluir https://.

  1. Cree una clave API de Grafana desde el espacio de trabajo de 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. Establecer un secreto en Gerente de sistemas de AWS:
aws ssm put-parameter --name "/cdk-accelerator/grafana-api-key" 
--type "SecureString" 
--value $AMG_API_KEY 
--region $AWS_REGION

El complemento Secretos externos accederá al secreto y estará disponible como un secreto nativo de Kubernetes en el clúster EKS.

Arranque el entorno AWS CDK

El primer paso para cualquier implementación de AWS CDK es iniciar el entorno. tu usas el cdk bootstrap en la CLI de AWS CDK para preparar el entorno (una combinación de cuenta de AWS y región de AWS) con los recursos requeridos por AWS CDK para realizar implementaciones en ese entorno. El arranque de AWS CDK es necesario para cada combinación de cuenta y región, por lo que si ya inició AWS CDK en una región, no necesita repetir el proceso de arranque.

cdk bootstrap aws://$ACCOUNT_ID/$AWS_REGION

Implementar la solución

Complete los siguientes pasos para implementar la solución:

  1. Clona el Acelerador de observabilidad cdk-aws repositorio e instalar los paquetes de dependencia. Este repositorio contiene código AWS CDK v2 escrito en TypeScript.
git clone https://github.com/aws-observability/cdk-aws-observability-accelerator.git
cd cdk-aws-observability-accelerator

Se espera que la configuración real de los archivos JSON del panel de Grafana se especifique en el contexto de AWS CDK. Necesitas actualizar context existentes cdk.json archivo, ubicado en el directorio actual. La ubicación del tablero está especificada por el fluxRepository.values.GRAFANA_NEURON_DASH_URL parámetro, y neuronNodeGroup se utiliza para establecer el tipo de instancia, el número y Tienda de bloques elásticos de Amazon (Amazon EBS) tamaño utilizado para los nodos.

  1. Ingrese el siguiente fragmento en cdk.json, reemplazando 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
    }
  }

Puede reemplazar el tipo de instancia Inf1 con Inf2 y cambiar el tamaño según sea necesario. Para verificar la disponibilidad en su región seleccionada, ejecute el siguiente comando (modificar Values como veas conveniente):

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

  1. Instale las dependencias del proyecto:
npm install

  1. Ejecute los siguientes comandos para implementar el patrón de observabilidad de código abierto:
make build
make pattern single-new-eks-inferentia-opensource-observability deploy

Validar la solución

Complete los siguientes pasos para validar la solución:

  1. Ejecute el update-kubeconfig dominio. Debería poder obtener el comando del mensaje de salida del comando anterior:
aws eks update-kubeconfig --name single-new-eks-inferentia-opensource... --region <your region> --role-arn arn:aws:iam::xxxxxxxxx:role/single-new-eks-....

  1. Verifique los recursos que creó:
kubectl get pods -A

La siguiente captura de pantalla muestra nuestro resultado de muestra.

  1. Asegúrese de que el neuron-device-plugin-daemonset DaemonSet se está ejecutando:
kubectl get ds neuron-device-plugin-daemonset --namespace kube-system

El siguiente es nuestro resultado esperado:

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

  1. Confirma que el neuron-monitor DaemonSet se está ejecutando:
kubectl get ds neuron-monitor --namespace kube-system

El siguiente es nuestro resultado esperado:

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

  1. Para verificar que los dispositivos y núcleos de Neuron estén visibles, ejecute el neuron-ls y neuron-top comandos de, por ejemplo, su módulo de monitoreo de neuronas (puede obtener el nombre del módulo de la salida de kubectl get pods -A):
kubectl exec -it {your neuron-monitor pod} -n kube-system -- /bin/bash -c "neuron-ls"

La siguiente captura de pantalla muestra nuestro resultado esperado.

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

La siguiente captura de pantalla muestra nuestro resultado esperado.

Visualice datos utilizando el panel de Grafana Neuron

Inicie sesión en su espacio de trabajo de Amazon Managed Grafana y navegue hasta Cuadros de mando panel. Deberías ver un panel llamado Neurona / Monitor.

Para ver algunas métricas interesantes en el panel de Grafana, aplicamos el siguiente manifiesto:

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

Esta es una carga de trabajo de muestra que compila el modelo torchvision ResNet50 y ejecuta inferencias repetitivas en un bucle para generar datos de telemetría.

Para verificar que el pod se implementó correctamente, ejecute el siguiente código:

kubectl get pods

Deberías ver un pod llamado pytorch-inference-resnet50.

Después de unos minutos, mirando hacia el Neurona / Monitor panel, debería ver las métricas recopiladas similares a las siguientes capturas de pantalla.

Grafana Operador y Flux siempre trabajan juntos para sincronizar sus paneles con Git. Si elimina sus paneles por accidente, se reaprovisionarán automáticamente.

Limpiar

Puede eliminar toda la pila de AWS CDK con el siguiente comando:

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

Conclusión

En esta publicación, le mostramos cómo introducir la observabilidad, con herramientas de código abierto, en un clúster EKS que presenta un plano de datos que ejecuta instancias EC2 Inf1. Comenzamos seleccionando la AMI acelerada optimizada para Amazon EKS para los nodos del plano de datos, que incluye el tiempo de ejecución del contenedor Neuron y proporciona acceso a los dispositivos AWS Inferentia y Trainium Neuron. Luego, para exponer los núcleos y dispositivos de Neuron a Kubernetes, implementamos el complemento del dispositivo Neuron. La recopilación y el mapeo reales de datos de telemetría en un formato compatible con Prometheus se lograron a través de neuron-monitor y neuron-monitor-prometheus.py. Las métricas se obtuvieron de Amazon Managed Service for Prometheus y se muestran en el panel de Neuron de Amazon Managed Grafana.

Le recomendamos que explore patrones de observabilidad adicionales en el Acelerador de observabilidad de AWS para CDK Repositorio de GitHub. Para obtener más información sobre Neuron, consulte la Documentación de AWS Neuron.


Sobre la autora

Ricardo Freschi es arquitecto sénior de soluciones en AWS y se centra en la modernización de aplicaciones. Trabaja en estrecha colaboración con socios y clientes para ayudarlos a transformar sus entornos de TI en su viaje hacia la nube de AWS mediante la refactorización de aplicaciones existentes y la creación de otras nuevas.

punto_img

Información más reciente

punto_img

Habla con nosotros!

¡Hola! ¿Le puedo ayudar en algo?