简化和扩展 Amazon EKS 上的机器学习工作负载监控
关键要点
AWS 宣布推出 Neuron Monitor 容器,以增强在 Amazon EKS 上监控 AWS Inferentia 和 AWS Trainium 芯片的能力。Neuron Monitor 容器简化了与 Prometheus 和 Grafana 等高级监控工具的整合,优化机器学习ML工作流。集成 CloudWatch Container Insights 提供更深入的分析和实时监控解决方案,使开发者能够更轻松地维护 ML 工作负载的性能和健康状态。AWS 很高兴地宣布推出 AWS Neuron Monitor 容器,这一创新工具旨在提升 AWS Inferentia 和 AWS Trainium 芯片在 Amazon Elastic Kubernetes Service (Amazon EKS) 上的监控能力。这一解决方案简化了高级监控工具如 Prometheus 和 Grafana的集成,使您能够使用 AWS AI 芯片更高效地设置和管理机器学习工作流。通过新的 Neuron Monitor 容器,您可以在熟悉的 Kubernetes 环境中可视化和优化 ML 应用程序的性能。Neuron Monitor 容器也可以在 Amazon Elastic Container Service (Amazon ECS) 上运行,但本文主要讨论 Amazon EKS 的部署。
除了 Neuron Monitor 容器外,CloudWatch Container Insights 的发布提供了进一步的好处。这一扩展提供了一种强大的监控解决方案,提供针对 Neuron 基础应用程序定制的深入见解和分析。有了 Container Insights,您现在可以访问更细粒度的数据和全面的分析,使开发者能够轻松维护 ML 工作负载的高性能和操作健康。
解决方案概述
Neuron Monitor 容器解决方案提供了一个全面的 ML 工作负载监控框架,使用 Neuron Monitor 的强大功能结合行业标准工具如 Prometheus, Grafana 和 Amazon CloudWatch。通过在 EKS 节点上部署 Neuron Monitor DaemonSet,开发者可以从 ML 工作负载 pod 中收集和分析性能指标。
典型流程中,Neuron Monitor 收集的指标与 Prometheus 集成,通过 Helm Chart 配置,以实现可扩展性和易管理性。此后,这些指标通过 Grafana 可视化,为您提供详细的应用性能洞察,以进行有效的故障排除和优化。
另外,指标也可以通过 CloudWatch 的 EKS 插件 或 Helm Chart 发送到 CloudWatch,以便在一个步骤中与 AWS 服务进行更深入的集成。该插件帮助自动发现来自 Amazon EC2 Trn1 和 Amazon EC2 Inf2 实例的 AWS Trainium 和 AWS Inferentia 芯片的关键健康指标,以及来自 Elastic Fabric Adapter 的指标,该网络接口用于 EC2 实例。此集成旨在更好地理解分布式深度学习算法的流量影响。
这种架构有许多优点:
优点针对 Container Insights 的高度针对性和有意监控罕见实时分析和更深入的 ML 工作负载性能可见性原生支持现有的 Amazon EKS 基础设施Neuron Monitor 在 Kubernetes 环境中提供灵活性和深度的监控。以下图示展示了解决方案架构:
Fig1 解决方案架构图
接下来的部分,我们将演示如何使用 Container Insights 进行增强的可观察性,以及如何设置 Prometheus 和 Grafana 来实现该解决方案。
配置 Container Insights 以增强可观察性
在此部分中,我们将逐步说明配置 Container Insights 的步骤。
设置 CloudWatch 可观察性 EKS 插件
请参考 安装 Amazon CloudWatch 可观察性 EKS 插件,按照说明在您的 EKS 集群中创建 amazoncloudwatchobservability 插件。此过程涉及直接在 CloudWatch 内部部署监控所需的资源。

设置插件后,请使用以下命令检查插件的健康状况:
aws eks describeaddon clustername ltvaluegt addonname amazoncloudwatchobservability
输出应包含以下属性值:
status ACTIVE
有关确认输出的详细信息,请参见 检索插件版本兼容性。
一旦插件激活,您就可以在 Container Insights 中直接查看指标。
查看 CloudWatch 指标
进入 Container Insights 控制台,您可以可视化与整个 Amazon EKS 环境相关的指标和遥测信息,包括 Neuron 设备指标。增强的 Container Insights 页面看起来类似于以下截图,提供有关您集群的高层次摘要,以及 kubestate 和 controlplane 的指标。Container Insights 仪表盘还显示集群状态和警报,以快速识别出 CPU、内存和 NeuronCores 的消耗情况,从而可以采取主动措施以避免性能影响。
Fig2 CloudWatch Container Insights 仪表盘
现成的性能仪表盘和故障排除用户界面为您提供多层次的 Neuron 指标查看,从聚合的集群级别到每个容器和每个 NeuronCore 级别。通过 Container Insights 的默认配置,您还可以将 Neuron 指标与基础设施的其他方面如 CPU、内存、磁盘、Elastic Fabric Adapter 设备等进行关联和对比。
在查看任何关键集群时,您可以看到 性能监控 仪表盘,以下截图所示。
Fig3 性能监控仪表盘视图
该监控仪表盘提供了多种性能分析视图,包括:
集群范围性能仪表盘视图:提供整个集群资源利用率的概览节点性能视图:可视化个别节点级别的指标Pod 性能视图:专注于 CPU、内存、网络等的 pod 级别指标容器性能视图:深入了解各个容器的使用指标这一着陆页现在已经增强了 Neuron 指标,包括前 10 个图形,帮助您即使在没有警报的情况下,也能识别出您环境中的不健康组件并采取积极措施,以避免应用程序性能受到影响。要深入分析此着陆页提供的内容,请参见 宣布针对 Amazon EKS 上的增强可观察性的 Amazon CloudWatch Container Insights。
Prometheus 和 Grafana
在此部分中,我们将逐步设置 Prometheus 和 Grafana。
前提条件
您应在 EKS 集群中设置了 AWS Inferentia 或 Trainium 工作节点。
设置 Neuron 监控容器
Neuron 监控容器托管在 Amazon ECR Public。虽然可以立即使用,但由于可能受到限流的影响,不建议在直接生产工作负载中使用。有关此信息及设置拉取缓存的更多信息,请参阅 Neuron Monitor 用户指南。对于生产环境,建议将 Neuron 监控容器复制到您的私人 Amazon Elastic Container Registry (Amazon ECR) 存储库中,以便有效地进行同步管理。
为 Neuron 监控设置 Kubernetes
您可以使用以下 YAML 配置片段在 Kubernetes 集群中设置 Neuron 监控。该设置包括一个 DaemonSet,用于在 neuronmonitor 名称空间中的每个适用节点上部署监控容器:
yamlapiVersion apps/v1kind DaemonSetmetadata name neuronmonitor namespace neuronmonitor labels app neuronmonitor version v1spec selector matchLabels app neuronmonitor template metadata labels app neuronmonitor version v1 spec affinity nodeAffinity requiredDuringSchedulingIgnoredDuringExecution nodeSelectorTerms matchExpressions key kubernetesio/os operator In values linux key nodekubernetesio/instancetype operator In values trn12xlarge trn132xlarge trn1n32xlarge inf1xlarge inf12xlarge inf16xlarge inf2xlarge inf28xlarge inf224xlarge inf248xlarge containers name neuronmonitor image publicecraws/neuron/neuronmonitor101 ports containerPort 8000 command /opt/bin/entrypointsh args port 8000 resources limits cpu 500m memory 256Mi requests cpu 256m memory 128Mi env name GOMEMLIMIT value 160MiB securityContext privileged true
要应用此 YAML 文件,请执行以下步骤:
将 ltIMAGEURIgt 替换为您在 ECR 存储库中 Neuron 监控容器镜像的 URI。使用 Kubernetes 命令行工具运行 YAML 文件,以下代码可以执行:bashkubectl apply f ltfilenamegtyaml
验证 Neuron Monitor 容器是否作为 DaemonSet 运行:bashkubectl get daemonset n neuronmonitor
设置 Amazon 托管的 Prometheus 服务
要在 EKS 集群中利用 Amazon 托管的 Prometheus 服务,首先需要配置 Prometheus 从 Neuron Monitor pods 收集指标并转发至托管服务。
Prometheus 需要在 EKS 集群中配置容器存储接口 (CSI)。您可以使用 eksctl 设置所需的组件。
创建一个具有适当权限的 AWS 身份和访问管理 (IAM) 服务账户:basheksctl create iamserviceaccount name ebscsicontrollersa namespace kubesystem cluster ltclusternamegt rolename ltrole namegt roleonly attachpolicyarn arnawsiamawspolicy/servicerole/AmazonEBSCSIDriverPolicy approve
安装 Amazon Elastic Block Store (Amazon EBS) CSI 驱动程序插件:basheksctl create addon name awsebscsidriver cluster ltclusternamegt serviceaccountrolearn ltrolearngt force
验证插件安装:basheksctl get addon name awsebscsidriver cluster ltclusternamegt
现在您准备好设置 Amazon 托管的 Prometheus 服务工作区。
使用 AWS 命令行界面 (AWS CLI) 创建一个工作区,并确认其活跃状态:bashaws amp createworkspace alias ltaliasgtaws amp listworkspaces alias ltaliasgt
按照 AWS 指南设置所需的服务角色,以便从 EKS 集群中摄取指标。这包括为 Prometheus 摄取创建一个 IAM 角色:bashaws iam getrole rolename ampiamproxyingestrole
接下来,您在 EKS 集群中使用 Helm Chart 安装 Prometheus,配置它从 Neuron Monitor 收集指标并转发到 Amazon 托管的 Prometheus 服务工作区。以下是一个 Helm chart yaml 文件示例,用于覆盖必要的配置:
yamlserviceAccounts server name ampiamproxyingestserviceaccount annotations eksamazonawscom/rolearn arnawsiamltaccountidgtrole/ampiamproxyingestroleserver remoteWrite url https//apsworkspacesltregiongtamazonawscom/workspaces/ltworkspaceidgt/api/v1/remotewrite sigv4 region uswest2 queueconfig maxsamplespersend 1000 maxshards 200 capacity 2500extraScrapeConfigs jobname neuronmonitorstats kubernetessdconfigs role pod relabelconfigs sourcelabels [metakubernetespodlabelapp] action keep regex neuronmonitor sourcelabels [metakubernetespodcontainerportnumber] action keep regex 8000
此文件包含以下关键部分:
serviceAccounts:配置用于 Prometheus 的服务账户,赋予其必要的 IAM 角色权限以摄取指标remoteWrite:指定将指标写入 Amazon 托管的 Prometheus 服务的终端,包含 AWS 区域特定的详细信息和批量写入配置extraScrapeConfigs:定义从 Neuron Monitor pods 收集指标的附加配置,包括根据标签选择 pods,并确保仅捕获相关指标
使用 Helm 命令在 EKS 集群中安装 Prometheus,并指定 yaml 文件:
bashhelm install prometheus prometheuscommunity/prometheus n prometheus createnamespace f valuesyaml
通过检查所有 Prometheus pods 是否运行来验证安装:bashkubectl get pods n prometheus
这确认了 Prometheus 正确设置为从 Neuron Monitor 容器收集指标并将其转发到 Amazon 托管的 Prometheus 服务。
飞鱼加速器使用教程集成 Amazon 托管的 Grafana
当 Prometheus 正常运行后,完成以下步骤:
设置 Amazon 托管的 Grafana。有关说明,请参见 快速入门 Amazon Managed Grafana。配置其使用 Amazon 托管的 Prometheus 服务作为数据源。有关详细信息,请参见 使用 AWS 数据源配置将 Amazon 托管的 Prometheus 服务添加为数据源。从 GitHub 导入示例 Neuron Monitor 仪表盘,快速可视化您的指标。以下截图显示了集成 Amazon 托管的 Grafana 的仪表盘。
Fig4 集成 Amazon 托管的 Grafana
清理工作
为了确保在此流程中创建的资源没有继续运行,请完成以下清理步骤:
删除 Amazon 托