Генеративный анализ данных

Наблюдение с открытым исходным кодом для узлов AWS Inferentia в кластерах Amazon EKS | Веб-сервисы Amazon

Дата:

Недавние разработки в области машинного обучения (МО) привели к созданию все более крупных моделей, некоторые из которых требуют сотен миллиардов параметров. Хотя они более мощные, обучение и выводы на основе этих моделей требуют значительных вычислительных ресурсов. Несмотря на доступность расширенных распределенных библиотек обучения, для задач обучения и вывода обычно требуются сотни ускорителей (графические процессоры или специальные микросхемы машинного обучения, такие как AWS Трениум и Вывод AWS), а значит, десятки или сотни экземпляров.

В таких распределенных средах наблюдаемость как экземпляров, так и чипов машинного обучения становится ключом к точной настройке производительности модели и оптимизации затрат. Метрики позволяют командам понимать поведение рабочей нагрузки и оптимизировать распределение и использование ресурсов, диагностировать аномалии и повышать общую эффективность инфраструктуры. Для специалистов по обработке данных использование и насыщенность чипов ML также важны для планирования мощности.

Этот пост проведет вас через Шаблон наблюдаемости с открытым исходным кодом для AWS Inferentia, в котором показано, как отслеживать производительность чипов ML, используемых в Амазон Эластик Кубернетес Сервис (Amazon EKS) кластер с узлами плоскости данных на основе Эластичное вычислительное облако Amazon (Amazon EC2) экземпляры типа INF1 и INF2.

Узор является частью Ускоритель наблюдения AWS CDK, набор специализированных модулей, которые помогут вам настроить наблюдаемость для кластеров Amazon EKS. AWS CDK Observability Accelerator организован на основе шаблонов, которые представляют собой повторно используемые блоки для развертывания нескольких ресурсов. Набор шаблонов наблюдаемости с открытым исходным кодом обеспечивает наблюдаемость с помощью Графана под управлением Amazon приборные панели, Дистрибутив AWS для OpenTelemetry сборщик для сбора метрик и Управляемый сервис Amazon для Prometheus хранить их.

Обзор решения

Следующая диаграмма иллюстрирует архитектуру решения.

В этом решении развертывается кластер Amazon EKS с группой узлов, включающей экземпляры Inf1.

Тип AMI группы узлов: AL2_x86_64_GPU, который использует Amazon EKS оптимизирован для ускорения Amazon Linux AMI. В дополнение к стандартной конфигурации AMI, оптимизированной для Amazon EKS, ускоренная конфигурация AMI включает Среда выполнения NeuronX.

Для доступа к чипам ML из Kubernetes шаблон развертывает АВС Нейрон плагин устройства.

Метрики предоставляются управляемому сервису Amazon для Prometheus neuron-monitor DaemonSet, который развертывает минимальный контейнер с Нейронные инструменты установлен. В частности, neuron-monitor DaemonSet запускает neuron-monitor команда передается в neuron-monitor-prometheus.py сопутствующий скрипт (обе команды являются частью контейнера):

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

Команда использует следующие компоненты:

  • neuron-monitor собирает метрики и статистику из приложений Neuron, работающих в системе, и передает собранные данные на стандартный вывод в Формат JSON
  • neuron-monitor-prometheus.py отображает и предоставляет данные телеметрии из формата JSON в формат, совместимый с Prometheus.

Данные визуализируются в Amazon Managed Grafana с помощью соответствующей информационной панели.

Остальная часть настройки для сбора и визуализации метрик с помощью Amazon Managed Service for Prometheus и Amazon Managed Grafana аналогична той, которая используется в других шаблонах на основе открытого исходного кода, которые включены в AWS Observability Accelerator for CDK Репозиторий GitHub.

Предпосылки

Для выполнения шагов, описанных в этом посте, вам потребуется следующее:

Настройте среду

Выполните следующие шаги, чтобы настроить среду:

  1. Откройте окно терминала и выполните следующие команды:
export AWS_REGION=<YOUR AWS REGION>
export ACCOUNT_ID=$(aws sts get-caller-identity --query 'Account' --output text)

  1. Получите идентификаторы рабочей области любого существующего рабочего пространства Amazon Managed Grafana:
aws grafana list-workspaces

Ниже приведен пример вывода:

{
  "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. Присвойте значения id и endpoint к следующим переменным среды:
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 необходимо включить https://.

  1. Создайте ключ API Grafana в рабочей области Grafana, управляемой Amazon:
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. Установить секрет в Менеджер систем AWS:
aws ssm put-parameter --name "/cdk-accelerator/grafana-api-key" 
--type "SecureString" 
--value $AMG_API_KEY 
--region $AWS_REGION

Доступ к этому секрету будет осуществляться с помощью надстройки «Внешние секреты», и он будет доступен как собственный секрет Kubernetes в кластере EKS.

Загрузите среду AWS CDK.

Первым шагом к развертыванию любого AWS CDK является начальная загрузка среды. Вы используете cdk bootstrap Команда в интерфейсе командной строки AWS CDK для подготовки среды (сочетания учетной записи AWS и региона AWS) с ресурсами, необходимыми AWS CDK для выполнения развертываний в этой среде. Загрузка AWS CDK необходима для каждой комбинации учетной записи и региона, поэтому, если вы уже загрузили AWS CDK в регионе, вам не нужно повторять процесс загрузки.

cdk bootstrap aws://$ACCOUNT_ID/$AWS_REGION

Разверните решение

Выполните следующие шаги для развертывания решения:

  1. Клонировать cdk-aws-observability-ускоритель репозиторий и установите пакеты зависимостей. Этот репозиторий содержит код AWS CDK v2, написанный на TypeScript.
git clone https://github.com/aws-observability/cdk-aws-observability-accelerator.git
cd cdk-aws-observability-accelerator

Ожидается, что фактические настройки для файлов JSON панели мониторинга Grafana будут указаны в контексте AWS CDK. Вам нужно обновить context в cdk.json файл, расположенный в текущем каталоге. Расположение приборной панели определяется fluxRepository.values.GRAFANA_NEURON_DASH_URL параметр и neuronNodeGroup используется для установки типа экземпляра, номера и Магазин эластичных блоков Amazon (Amazon EBS), используемый для узлов.

  1. Введите следующий фрагмент в cdk.json, заменяя 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
    }
  }

Вы можете заменить тип экземпляра Inf1 на Inf2 и изменить размер по мере необходимости. Чтобы проверить доступность в выбранном вами регионе, выполните следующую команду (измените Values как вы считаете нужным):

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

  1. Установите зависимости проекта:
npm install

  1. Выполните следующие команды, чтобы развернуть шаблон наблюдаемости с открытым исходным кодом:
make build
make pattern single-new-eks-inferentia-opensource-observability deploy

Проверить решение

Выполните следующие шаги для проверки решения:

  1. Запустите update-kubeconfig команда. Вы сможете получить команду из выходного сообщения предыдущей команды:
aws eks update-kubeconfig --name single-new-eks-inferentia-opensource... --region <your region> --role-arn arn:aws:iam::xxxxxxxxx:role/single-new-eks-....

  1. Проверьте созданные вами ресурсы:
kubectl get pods -A

На следующем снимке экрана показан пример вывода.

  1. Убедитесь в том, neuron-device-plugin-daemonset DaemonSet работает:
kubectl get ds neuron-device-plugin-daemonset --namespace kube-system

Ниже приводится наш ожидаемый результат:

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

  1. Подтвердите, что neuron-monitor DaemonSet работает:
kubectl get ds neuron-monitor --namespace kube-system

Ниже приводится наш ожидаемый результат:

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

  1. Чтобы убедиться, что устройства и ядра Neuron видны, запустите команду neuron-ls и neuron-top команды, например, от вашего модуля нейрон-монитора (вы можете получить имя модуля из вывода kubectl get pods -A):
kubectl exec -it {your neuron-monitor pod} -n kube-system -- /bin/bash -c "neuron-ls"

На следующем снимке экрана показан ожидаемый результат.

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

На следующем снимке экрана показан ожидаемый результат.

Визуализируйте данные с помощью панели инструментов Grafana Neuron.

Войдите в свою рабочую область Grafana, управляемую Amazon, и перейдите к Dashboards панель. Вы должны увидеть панель мониторинга с именем Нейрон/Монитор.

Чтобы увидеть некоторые интересные метрики на панели управления Grafana, мы применим следующий манифест:

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

Это пример рабочей нагрузки, которая компилирует модель torchvision ResNet50 и выполняет повторяющийся вывод в цикле для создания данных телеметрии.

Чтобы убедиться, что модуль был успешно развернут, запустите следующий код:

kubectl get pods

Вы должны увидеть модуль с именем pytorch-inference-resnet50.

Через несколько минут, заглянув в Нейрон/Монитор панели мониторинга, вы должны увидеть собранные показатели, подобные следующим снимкам экрана.

Grafana Оператор и Flux всегда работают вместе, чтобы синхронизировать ваши информационные панели с Git. Если вы случайно удалите панели мониторинга, они будут автоматически восстановлены.

Убирать

Вы можете удалить весь стек AWS CDK с помощью следующей команды:

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

Заключение

В этом посте мы показали, как внедрить возможность наблюдения с помощью инструментов с открытым исходным кодом в кластер EKS с плоскостью данных, на которой работают экземпляры EC2 Inf1. Мы начали с выбора ускоренного AMI, оптимизированного для Amazon EKS, для узлов плоскости данных, который включает среду выполнения контейнера Neuron, обеспечивающую доступ к устройствам AWS Inferentia и Trainium Neuron. Затем, чтобы предоставить доступ к ядрам и устройствам Neuron для Kubernetes, мы развернули плагин устройства Neuron. Фактический сбор и преобразование данных телеметрии в формат, совместимый с Prometheus, был достигнут с помощью neuron-monitor и neuron-monitor-prometheus.py. Метрики были получены из Amazon Managed Service для Prometheus и отображены на информационной панели Neuron в Amazon Managed Grafana.

Мы рекомендуем вам изучить дополнительные шаблоны наблюдаемости в разделе AWS Observability Accelerator для CDK Репозиторий GitHub. Дополнительную информацию о Нейроне см. Документация по AWS Neuron.


Об авторе

Риккардо Фрески — старший архитектор решений в AWS, специализирующийся на модернизации приложений. Он тесно сотрудничает с партнерами и клиентами, помогая им трансформировать свои ИТ-ландшафты на пути к облаку AWS путем рефакторинга существующих приложений и создания новых.

Spot_img

Последняя разведка

Spot_img