在 Amazon EKS 上管理 Neuron 设备 - Amazon EKS

帮助改进此页面

要帮助改进本用户指南,请选择位于每个页面右侧窗格中的在 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

设备发布方式

通过 ResourceSlice 对象发布丰富属性,包括设备 ID、实例类型、拓扑、驱动程序版本和 EFA 就近性

以整数计数形式发布 aws.amazon.com/neuronaws.amazon.com/neuroncore 扩展资源

连接的设备子集

使用拓扑约束分配 1、4、8 或 16 个已连接 Neuron 设备的子集

需要 Neuron 调度器扩展以实现连续设备分配

LNC 配置

通过 ResourceClaimTemplate 参数进行每工作负载的逻辑 NeuronCore 配置(LNC=1 或 LNC=2)

需要在 EC2 启动模板中预配置

基于属性的选择

使用 CEL 表达式按实例类型、驱动程序版本等属性筛选设备

不支持

安装 Neuron DRA 驱动程序

Neuron DRA 驱动程序将 Neuron 设备作为名称为 DeviceClass、标识为 neuron.aws.comResourceSlice 对象进行发布。该驱动程序以 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

  1. 使用 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 命名空间中,并具有 DeviceClass neuron.aws.com

  2. 验证 DRA 驱动程序 DaemonSet 正在运行。

    kubectl get ds -n neuron-dra-driver neuron-dra-driver-kubelet-plugin
    NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE neuron-dra-driver-kubelet-plugin 1 1 1 1 1 <none> 60s
  3. 验证 DeviceClass 是否已创建:

    kubectl get deviceclass neuron.aws.com
    NAME AGE neuron.aws.com 60s
  4. 验证是否为您的节点发布了 ResourceSlice 对象。

    kubectl get resourceslice

有关 ResourceSlice 可用对象属性的信息,请参阅 Neuron DRA 文档

在容器组(pod)中请求 Neuron 设备

要使用 DRA 驱动程序请求 Neuron 设备,请创建一个引用 neuron.aws.com DeviceClassResourceClaimTemplate,并在您的容器组(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 调度器扩展。支持的子集大小为 1、4、8 或 16 个设备。使用带有拓扑组 ID 的 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_idresource.aws.com/devicegroup4_idresource.aws.com/devicegroup8_idresource.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

过程

  1. 使用 Helm 安装 Neuron Kubernetes 设备插件。

    helm upgrade --install neuron-helm-chart oci://public.ecr.aws/neuron/neuron-helm-chart \ --set "npd.enabled=false"
  2. 验证 Neuron 设备插件 DaemonSet 是否正在运行。

    kubectl get ds -n kube-system neuron-device-plugin
    NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE neuron-device-plugin 1 1 1 1 1 <none> 60s
  3. 验证节点是否具有可分配的 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 设备是否可访问。

  1. 使用以下内容创建名为 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"
  2. 运用该清单。

    kubectl apply -f neuron-ls.yaml
  3. 容器组(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 DRA 驱动程序通过拓扑约束自动处理此问题。

有关将 Neuron 设备与 Amazon EKS 结合使用的更多信息,请参阅在 EKS 上运行的 Neuron 文档