Інформація про дані Платона.
Вертикальний пошук і штучний інтелект.

Можливість спостереження з відкритим кодом для вузлів AWS Inferentia в кластерах Amazon EKS | Веб-сервіси Amazon

Дата:

Останні розробки в машинному навчанні (ML) призвели до все більших моделей, деякі з яких потребують сотень мільярдів параметрів. Незважаючи на те, що вони потужніші, навчання та висновки на цих моделях потребують значних обчислювальних ресурсів. Незважаючи на доступність розширених розподілених навчальних бібліотек, зазвичай для завдань навчання та логічного висновку потрібні сотні прискорювачів (графічні процесори або спеціальні чіпи ML, як-от AWS Trainium та AWS Inferentia), а отже, десятки чи сотні випадків.

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

Ця публікація проведе вас через Шаблон спостережуваності з відкритим кодом для AWS Inferentia, який показує вам, як контролювати продуктивність мікросхем ML, що використовуються в Послуга Amazon Elastic Kubernetes (Amazon EKS) кластер з вузлами площини даних на основі Обчислювальна хмара Amazon Elastic (Amazon EC2) екземпляри типу Інф1 та Інф2.

Візерунок є частиною AWS CDK Observability Accelerator, набір впевнених модулів, які допоможуть вам налаштувати спостережуваність для кластерів Amazon EKS. AWS CDK Observability Accelerator організовано навколо шаблонів, які є повторно використовуваними одиницями для розгортання кількох ресурсів. Набір інструментів спостережуваності з відкритим кодом шаблонів Grafana під керуванням 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, шаблон розгортає AWS нейрон плагін пристрою.

Метрики надаються Amazon Managed Service for Prometheus neuron-monitor DaemonSet, який розгортає мінімальний контейнер із Нейронні інструменти встановлено. Зокрема, neuron-monitor DaemonSet запускає neuron-monitor команда передана в neuron-monitor-prometheus.py супровідний сценарій (обидві команди є частиною контейнера):

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

Команда використовує такі компоненти:

  • neuron-monitor збирає показники та статистику з додатків Neuron, запущених у системі, і передає зібрані дані на stdout у Формат 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. Отримайте ідентифікатори будь-якої існуючої робочої області Grafana, керованої Amazon:
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

Доступ до секрету матиме надбудова External Secrets, і він стане доступним як рідний секрет Kubernetes у кластері EKS.

Завантажте середовище AWS CDK

Першим кроком до будь-якого розгортання AWS CDK є завантаження середовища. Ви використовуєте cdk bootstrap команду в CLI AWS CDK, щоб підготувати середовище (поєднання облікового запису AWS і регіону AWS) із ресурсами, потрібними AWS CDK для виконання розгортань у цьому середовищі. Завантаження AWS CDK потрібне для кожної комбінації облікового запису та регіону, тому, якщо ви вже завантажили AWS CDK у регіоні, вам не потрібно повторювати процес завантаження.

cdk bootstrap aws://$ACCOUNT_ID/$AWS_REGION

Розгорніть рішення

Щоб розгорнути рішення, виконайте наведені нижче дії.

  1. Клонуйте cdk-aws-observability-accelerator репозиторій і встановіть пакети залежностей. Це сховище містить код 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, і перейдіть до Панелі панель. Ви повинні побачити інформаційну панель з назвою Нейрон / Монітор.

Щоб побачити деякі цікаві показники на інформаційній панелі 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 Operator і Flux завжди працюють разом, щоб синхронізувати ваші інформаційні панелі з Git. Якщо ви випадково видалите свої інформаційні панелі, їх буде повторно налаштовано автоматично.

Прибирати

Ви можете видалити весь стек AWS CDK за допомогою такої команди:

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

Висновок

У цій публікації ми показали вам, як запровадити спостережливість за допомогою інструментів з відкритим вихідним кодом у кластер EKS, що містить площину даних, на якій працюють екземпляри EC2 Inf1. Ми почали з вибору оптимізованого для Amazon EKS прискореного AMI для вузлів площини даних, який включає середовище виконання контейнера 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. Щоб дізнатися більше про Neuron, зверніться до Документація AWS Neuron.


Про автора

Ріккардо Фрешкі є старшим архітектором рішень в AWS, який займається модернізацією додатків. Він тісно співпрацює з партнерами та клієнтами, щоб допомогти їм трансформувати свої ІТ-ландшафти на шляху до хмари AWS шляхом рефакторингу існуючих програм і створення нових.

spot_img

Остання розвідка

spot_img

Зв'яжіться з нами!

Привіт! Чим я можу вам допомогти?