准备任务yaml
如果用户不使用Ascend Docker Runtime组件,Ascend Device Plugin只会帮助用户挂载“/dev”目录下的设备。其他目录(如“/usr”)用户需要自行修改yaml文件,挂载对应的驱动目录和文件。容器内挂载路径和宿主机路径保持一致。
因为Atlas 200I SoC A1 核心板场景不支持Ascend Docker Runtime,用户也无需修改yaml文件。
操作步骤
- 下载yaml文件。
- 将yaml文件上传至管理节点任意目录,并参考表2修改示例yaml文件。
表2 yaml文件参数说明 参数
取值
说明
image
-
推理镜像名称,请根据实际修改(用户在制作镜像章节制作的镜像名称)。
replicas
整数
运行的任务副本数量。通常情况一般为1。
requests
整卡调度:
- 推理服务器(插Atlas 300I 推理卡):
huawei.com/Ascend310: 芯片数量
- Atlas 推理系列产品非混插模式:
huawei.com/Ascend310P: 芯片数量
- Atlas 推理系列产品混插模式:
- huawei.com/Ascend310P-V: 芯片数量
- huawei.com/Ascend310P-VPro: 芯片数量
- huawei.com/Ascend310P-IPro: 芯片数量
- Atlas 800I A2 推理服务器:huawei.com/Ascend910:芯片数量
如:huawei.com/Ascend310: 1
静态vNPU调度:取值为1。只能使用一个NPU下的vNPU。
Atlas 推理系列产品非混插模式:
huawei.com/Ascend310P-Y: 1
如huawei.com/Ascend310P-4c.3cpu: 1
请求的NPU或vNPU类型(只能请求一种类型)、数量,请根据实际修改。
limits
限制请求的NPU或vNPU类型(只能请求一种类型)、数量,请根据实际修改。
limits需要和requests的芯片名称和数量需保持一致。
(可选)host-arch
Arm环境:huawei-arm
x86_64环境:huawei-x86
需要运行推理任务的节点架构,请根据实际修改。Atlas 200I SoC A1 核心板节点仅支持huawei-arm。
servertype
soc
服务器类型。
- 调度到Atlas 200I SoC A1 核心板节点上,必须要加上此配置,并参考“infer-310p-1usoc.yaml”文件进行目录挂载。
- 其他类型节点不需要此参数。
metadata.annotations['huawei.com/AscendXXX']
XXX表示芯片的型号,支持的取值为910,310和310P。取值需要和环境上实际的芯片类型保持一致。
Ascend Docker Runtime会获取该参数值,用于给容器挂载相应类型的NPU。
说明:该参数只支持使用Volcano调度器的整卡调度特性。使用静态vNPU调度、动态vNPU调度和其他调度器的用户需要删除示例yaml中该参数的相关字段。
以下参数仅支持推理服务器(插Atlas 300I 推理卡)使用:
npu-310-strategy
- card:按卡调度,request请求的芯片个数不超过4,请求的芯片数量会调度到同一张卡上。
- chip:按芯片调度,请求的芯片个数不超过单个节点的最大值。
-
schedulerName
volcano
如果切换调度器,需要将之前调度的任务都释放。
以下参数仅支持Atlas 800I A2 推理服务器使用:
nodeSelector
module-{xxx}b-8
运行推理任务的节点类型。
- 推理服务器(插Atlas 300I 推理卡):
- 根据实际需求,选择yaml示例并进行如下修改。
表3 操作示例 特性名称
操作参考
整卡调度
静态vNPU调度
- 使用整卡调度特性,参考本配置。以infer-deploy.yaml为例,在推理服务器(插Atlas 300I 推理卡)节点创建一个单卡推理任务,并且启用了调度策略,示例如下。修改完成后直接执行步骤4。
apiVersion: apps/v1 kind: Deployment ... spec: template: metadata: labels: app: infers host-arch: huawei-arm npu-310-strategy: card # 按卡调度 ... spec: schedulerName: volcano # 此时调度器必须为volcano nodeSelector: host-arch: huawei-arm # 可选值,根据实际情况填写 ... containers: - image: ubuntu-infer:v1 ... env: - name: ASCEND_VISIBLE_DEVICES # Ascend Docker Runtime会使用该字段 valueFrom: fieldRef: fieldPath: metadata.annotations['huawei.com/Ascend310'] # 给容器挂载相应类型的芯片 resources: requests: huawei.com/Ascend310: 1 # 申请的芯片数量 limits: huawei.com/Ascend310: 1 ... - 使用整卡调度特性,参考本配置。以infer-deploy.yaml为例,在Atlas 推理系列产品节点(非Atlas 200I SoC A1 核心板节点)创建一个不使用混插模式的单卡推理任务,示例如下。修改完成后直接执行步骤4。
apiVersion: apps/v1 kind: Deployment ... spec: template: metadata: labels: app: infers ... spec: affinity: # 本段表示不调度到Atlas 200I SoC A1 核心板节点 nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: servertype operator: NotIn values: - soc schedulerName: volcano nodeSelector: host-arch: huawei-arm ... containers: - image: ubuntu-infer:v1 ... env: - name: ASCEND_VISIBLE_DEVICES # Ascend Docker Runtime会使用该字段 valueFrom: fieldRef: fieldPath: metadata.annotations['huawei.com/Ascend310P'] # 给容器挂载相应类型的芯片 ... resources: requests: huawei.com/Ascend310P: 1 # 申请的芯片数量 limits: huawei.com/Ascend310P: 1 ...
因为Atlas 200I SoC A1 核心板节点需要挂载的目录和文件与其他类型节点不一致,为了避免推理失败,如果需要使用Atlas 推理系列产品芯片,且集群中有Atlas 200I SoC A1 核心板节点但是不希望调度到这类节点上,请在示例的yaml中增加“affinity”字段,表示不调度到有“servertype=soc”标签的节点上。
- 使用整卡调度特性,参考本配置。以infer-deploy-310p-1usoc.yaml为例,在Atlas 200I SoC A1 核心板节点(不支持混插模式)创建一个单卡推理任务,示例如下。修改完成后直接执行步骤4。
apiVersion: apps/v1 kind: Deployment ... spec: template: metadata: labels: app: infers ... spec: schedulerName: volcano nodeSelector: host-arch: huawei-arm servertype: soc # 该标签表示仅能调度到Atlas 200I SoC A1 核心板节点 ... containers: - image: ubuntu-infer:v1 ... env: - name: ASCEND_VISIBLE_DEVICES # Ascend Docker Runtime会使用该字段 valueFrom: fieldRef: fieldPath: metadata.annotations['huawei.com/Ascend310P'] # 给容器挂载相应类型的芯片 ... resources: requests: huawei.com/Ascend310P: 1 # 申请的芯片数量 limits: huawei.com/Ascend310P: 1 ... - 使用整卡调度特性,参考本配置。以infer-vcjob-910.yaml为例,在Atlas 800I A2 推理服务器上创建一个单卡推理任务,示例如下。修改完成后直接执行步骤4。
apiVersion: batch.volcano.sh/v1alpha1 kind: Job metadata: name: mindx-infer-test namespace: vcjob # 根据实际情况选择合适的命名空间 labels: ring-controller.atlas: ascend-{xxx}b fault-scheduling: "force" spec: ... template: metadata: labels: app: infer ring-controller.atlas: ascend-{xxx}b spec: containers: - image: infer_image:latest # 推理镜像名称,以实际情况为准 ... env: - name: ASCEND_VISIBLE_DEVICES # Ascend Docker Runtime会使用该字段 valueFrom: fieldRef: fieldPath: metadata.annotations['huawei.com/Ascend910'] # 给容器挂载相应类型的芯片 requests: huawei.com/Ascend910: 1 # 申请的芯片数量 limits: huawei.com/Ascend910: 1 # 必须与requests的值一致. volumeMounts: - name: localtime # 容器时间必须与主机时间一致 mountPath: /etc/localtime nodeSelector: host-arch: huawei-arm # 根据实际情况进行配置 accelerator-type: module-{xxx}b-8 # Atlas 800I A2 推理服务器 volumes: - name: localtime hostPath: path: /etc/localtime restartPolicy: OnFailure - 使用静态vNPU调度特性,参考本配置。以infer-deploy.yaml为例,在Atlas 推理系列产品节点(非Atlas 200I SoC A1 核心板节点)创建一个使用vNPU的推理任务,示例如下。修改完成后直接执行步骤4。
apiVersion: apps/v1 kind: Deployment ... spec: template: metadata: labels: app: infers ... spec: schedulerName: volcano nodeSelector: host-arch: huawei-arm ... containers: - image: ubuntu-infer:v1 ... # 静态vNPU调度暂不支持ASCEND_VISIBLE_DEVICES相关字段,需要删除以下加粗字段 env: - name: ASCEND_VISIBLE_DEVICES valueFrom: fieldRef: fieldPath: metadata.annotations['huawei.com/Ascend310P'] # 删除到此行 resources: requests: huawei.com/Ascend310P-2c: 1 # vNPU调度此处数量只能为1 limits: huawei.com/Ascend310P-2c: 1 # 必须与requests的值一致 ...
- 使用整卡调度特性,参考本配置。以infer-deploy.yaml为例,在推理服务器(插Atlas 300I 推理卡)节点创建一个单卡推理任务,并且启用了调度策略,示例如下。修改完成后直接执行步骤4。
- 修改示例yaml中容器启动命令,如下加粗部分所示,如果没有则添加“command”字段。
... containers: - image: ubuntu-infer:v1 ... command: ["/bin/bash", "-c", "test_model.sh"] resources: requests: ...