帮助改进此页面
要帮助改进本用户指南,请选择位于每个页面右侧窗格中的在 GitHub 上编辑此页面链接。
在 Amazon EKS 上管理 Neuron 设备
AWS Trainium 和 AWS Inferentia 是由 AWS 专门设计的机器学习芯片。Amazon EKS 支持两种在 EKS 集群中管理 Neuron 设备的机制:Neuron DRA 驱动程序和 Neuron Kubernetes 设备插件。
对于在 Kubernetes 1.34 或更高版本上运行的 EKS 集群上的新部署,建议使用 Neuron DRA 驱动程序。Neuron DRA 驱动程序提供拓扑感知分配、连接设备子集调度、逻辑 NeuronCore(LNC)配置以及 UltraServer 多节点分配,无需自定义调度器扩展。Neuron 设备插件仍受支持。
Neuron DRA 驱动程序与 Neuron 设备插件
| 功能 | Neuron DRA 驱动程序 | Neuron 设备插件 |
|---|---|---|
|
最低 Kubernetes 版本 |
1.34 |
所有 EKS 支持的 Kubernetes 版本 |
|
Karpenter 和 EKS Auto Mode |
不支持 |
支持 |
|
EKS 优化型 AMI 支持 |
AL2023 |
AL2023、Bottlerocket |
|
设备发布方式 |
通过 |
以整数计数形式发布 |
|
连接的设备子集 |
使用拓扑约束分配 1、4、8 或 16 个已连接 Neuron 设备的子集 |
需要 Neuron 调度器扩展 |
|
LNC 配置 |
通过 |
需要在 EC2 启动模板中预配置 |
|
基于属性的选择 |
使用 CEL 表达式按实例类型、驱动程序版本等属性筛选设备 |
不支持 |
安装 Neuron DRA 驱动程序
Neuron DRA 驱动程序将 Neuron 设备作为名称为 DeviceClass、标识为 neuron.aws.com 的 ResourceSlice 对象进行发布。该驱动程序以 DaemonSet 形式运行,并自动发现 Neuron 设备及其拓扑属性。
有关 Neuron DRA 驱动程序的详细信息,请参阅 Neuron DRA 文档
目前不支持将 Neuron DRA 驱动程序与 Bottlerocket 结合使用。
先决条件
-
一个运行 Kubernetes 1.34 或更高版本的 Amazon EKS 集群。
-
具有 AWS Trainium 或 Inferentia2 实例类型的节点。
-
在命令行环境中安装 Helm,有关更多信息,请参阅安装 Helm 说明。
-
kubectl配置为与您的集群通信,更多信息,请参阅 安装或更新 kubectl。
过程
重要
请勿在运行 Neuron 设备插件的节点上安装 Neuron DRA 驱动程序。这两种机制不能在同一节点上共存。有关更新,请参阅上游 Kubernetes KEP–5004
-
使用 Helm 安装 Neuron DRA 驱动程序。
helm upgrade --install neuron-helm-chart oci://public.ecr.aws/neuron/neuron-helm-chart \ --namespace neuron-dra-driver \ --create-namespace \ --set "devicePlugin.enabled=false" \ --set "npd.enabled=false" \ --set "draDriver.enabled=true"默认情况下,该驱动程序以 DaemonSet 形式部署在
neuron-dra-driver命名空间中,并具有DeviceClassneuron.aws.com -
验证 DRA 驱动程序 DaemonSet 正在运行。
kubectl get ds -n neuron-dra-driver neuron-dra-driver-kubelet-pluginNAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE neuron-dra-driver-kubelet-plugin 1 1 1 1 1 <none> 60s -
验证
DeviceClass是否已创建:kubectl get deviceclass neuron.aws.comNAME AGE neuron.aws.com 60s -
验证是否为您的节点发布了
ResourceSlice对象。kubectl get resourceslice
有关 ResourceSlice 可用对象属性的信息,请参阅 Neuron DRA 文档
在容器组(pod)中请求 Neuron 设备
要使用 DRA 驱动程序请求 Neuron 设备,请创建一个引用 neuron.aws.com DeviceClass 的 ResourceClaimTemplate,并在您的容器组(pod)规约中引用它。
以下示例请求 trn2.48xlarge 实例上的所有 Neuron 设备:
apiVersion: resource.k8s.io/v1 kind: ResourceClaimTemplate metadata: name: all-neurons spec: spec: devices: requests: - name: neurons exactly: deviceClassName: neuron.aws.com selectors: - cel: expression: "device.attributes['neuron.aws.com'].instanceType == 'trn2.48xlarge'" allocationMode: All --- apiVersion: v1 kind: Pod metadata: name: neuron-workload spec: containers: - name: app ... resources: claims: - name: neurons resourceClaims: - name: neurons resourceClaimTemplateName: all-neurons
分配连接的设备子集
Neuron DRA 驱动程序可以分配连接的 Neuron 设备子集,无需 Neuron 调度器扩展matchAttribute 约束来确保设备已连接。
以下示例请求 4 个连接的 Neuron 设备:
apiVersion: resource.k8s.io/v1 kind: ResourceClaimTemplate metadata: name: 1x4-connected-neurons spec: spec: devices: requests: - name: neurons exactly: deviceClassName: neuron.aws.com allocationMode: ExactCount count: 4 selectors: - cel: expression: "device.attributes['neuron.aws.com'].instanceType == 'trn2.48xlarge'" constraints: - requests: ["neurons"] matchAttribute: "resource.aws.com/devicegroup4_id"
连接子集支持的 matchAttribute 值为 resource.aws.com/devicegroup1_id、resource.aws.com/devicegroup4_id、resource.aws.com/devicegroup8_id 和 resource.aws.com/devicegroup16_id。
配置逻辑 NeuronCore(LNC)
Neuron DRA 驱动程序通过 ResourceClaimTemplate 参数支持每工作负载的逻辑 NeuronCore 配置。这样就无需在 EC2 启动模板中预配置 LNC。
以下示例请求将 LNC 设置为 1 的所有 Neuron 设备:
apiVersion: resource.k8s.io/v1 kind: ResourceClaimTemplate metadata: name: all-neurons-lnc-1 spec: spec: devices: requests: - name: neurons exactly: deviceClassName: neuron.aws.com selectors: - cel: expression: "device.attributes['neuron.aws.com'].instanceType == 'trn2.48xlarge'" allocationMode: All config: - requests: ["neurons"] opaque: driver: neuron.aws.com parameters: apiVersion: neuron.aws.com/v1 kind: NeuronConfig logicalNeuronCore: 1
安装 Neuron Kubernetes 设备插件
Neuron Kubernetes 设备插件将 Neuron 设备发布为 aws.amazon.com/neuron 扩展资源,将 NeuronCore 发布为 aws.amazon.com/neuroncore 扩展资源。您需要在容器的资源请求和限制中请求 Neuron 设备。
先决条件
-
一个 Amazon EKS 集群。
-
为 AWS Trainium 或 AWS Inferentia 实例安装了主机级组件的节点。如果使用 EKS AL2023 加速型 AMI 或 EKS Bottlerocket AMI,则已包含这些组件。
-
在命令行环境中安装 Helm,有关更多信息,请参阅安装 Helm 说明。
-
kubectl配置为与您的集群通信,更多信息,请参阅 安装或更新 kubectl。
过程
-
使用 Helm 安装 Neuron Kubernetes 设备插件。
helm upgrade --install neuron-helm-chart oci://public.ecr.aws/neuron/neuron-helm-chart \ --set "npd.enabled=false" -
验证 Neuron 设备插件 DaemonSet 是否正在运行。
kubectl get ds -n kube-system neuron-device-pluginNAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE neuron-device-plugin 1 1 1 1 1 <none> 60s -
验证节点是否具有可分配的 Neuron 设备。
kubectl get nodes "-o=custom-columns=NAME:.metadata.name,NeuronDevice:.status.allocatable.aws\.amazon\.com/neuron,NeuronCore:.status.allocatable.aws\.amazon\.com/neuroncore"NAME NeuronDevice NeuronCore ip-192-168-47-173.us-west-2.compute.internal 1 2
使用测试容器组(pod)验证 Neuron 设备
您可以通过在测试容器组(pod)中运行 neuron-ls 工具来验证 Neuron 设备是否可访问。
-
使用以下内容创建名为
neuron-ls.yaml的文件。此清单会启动安装了neuron-ls工具的 Neuron Monitor容器。 apiVersion: v1 kind: Pod metadata: name: neuron-ls spec: restartPolicy: Never containers: - name: neuron-container image: public.ecr.aws/g4h4h0b5/neuron-monitor:1.0.0 command: ["/bin/sh"] args: ["-c", "neuron-ls"] resources: limits: aws.amazon.com/neuron: 1 tolerations: - key: "aws.amazon.com/neuron" operator: "Exists" effect: "NoSchedule" -
运用该清单。
kubectl apply -f neuron-ls.yaml -
容器组(pod)运行完成后,查看其日志。
kubectl logs neuron-ls示例输出如下。
instance-type: inf2.xlarge instance-id: ... +--------+--------+--------+---------+ | NEURON | NEURON | NEURON | PCI | | DEVICE | CORES | MEMORY | BDF | +--------+--------+--------+---------+ | 0 | 2 | 32 GB | 00:1f.0 | +--------+--------+--------+---------+
注意
当使用 Neuron 设备插件时,在具有多个 Neuron 设备(如 trn2.48xlarge)的实例上进行连续设备分配需要 Neuron Kubernetes 调度器扩展
有关将 Neuron 设备与 Amazon EKS 结合使用的更多信息,请参阅在 EKS 上运行的 Neuron 文档