如果用户不使用Ascend Docker Runtime组件,Ascend Device Plugin只会帮助用户挂载“/dev”目录下的设备。其他目录(如“/usr”)用户需要自行修改YAML文件,挂载对应的驱动目录和文件。容器内挂载路径和宿主机路径保持一致。
因为Atlas 200I SoC A1 核心板场景不支持Ascend Docker Runtime,用户也无需修改YAML文件。
任务类型 |
硬件型号 |
YAML名称 |
获取链接 |
---|---|---|---|
Volcano调度的Deployment任务 |
Atlas 200I SoC A1 核心板 |
infer-deploy-310p-1usoc.yaml |
|
其他类型推理节点 |
infer-deploy.yaml |
||
Volcano Job任务 |
Atlas 800I A2 推理服务器 A200I A2 Box 异构组件 Atlas 800I A3 超节点服务器 |
infer-vcjob-910.yaml |
|
Ascend Job任务 |
推理服务器(插Atlas 300I Duo 推理卡) |
pytorch_multinodes_acjob_infer_310p_with_ranktable.yaml |
|
Atlas 800I A2 推理服务器 A200I A2 Box 异构组件 Atlas 800I A3 超节点服务器 |
pytorch_multinodes_acjob_infer_{xxx}b_with_ranktable.yaml |
参数 |
取值 |
说明 |
---|---|---|
image |
- |
推理镜像名称,请根据实际修改(用户在制作镜像章节制作的镜像名称)。 |
replicas |
整数 |
运行的任务副本数量。通常情况一般为1。 |
requests |
整卡调度:
静态vNPU调度:取值为1。只能使用一个NPU下的vNPU。 Atlas 推理系列产品非混插模式: huawei.com/Ascend310P-Y: 1 如huawei.com/Ascend310P-4c.3cpu: 1 |
请求的NPU或vNPU类型(只能请求一种类型)、数量,请根据实际修改。requests和limits下,芯片的名字和数量需保持一致。 说明:
|
limits |
限制请求的NPU或vNPU类型(只能请求一种类型)、数量,请根据实际修改。 limits需要和requests的芯片名称和数量需保持一致。 |
|
(可选)host-arch |
Arm环境:huawei-arm x86_64环境:huawei-x86 |
需要运行推理任务的节点架构,请根据实际修改。Atlas 200I SoC A1 核心板节点仅支持huawei-arm。 |
servertype |
soc |
服务器类型。
|
metadata.annotations['huawei.com/AscendXXX'] |
XXX表示芯片的型号,支持的取值为910,310和310P。取值需要和环境上实际的芯片类型保持一致。 |
Ascend Docker Runtime会获取该参数值,用于给容器挂载相应类型的NPU。 说明:
该参数只支持使用Volcano调度器的整卡调度特性。使用静态vNPU调度、动态vNPU调度和其他调度器的用户需要删除示例YAML中该参数的相关字段。 |
以下参数仅支持推理服务器(插Atlas 300I 推理卡)使用: |
||
npu-310-strategy |
|
- |
schedulerName |
volcano |
如果切换调度器,需要将之前调度的任务都释放。 |
以下参数仅支持推理服务器(插Atlas 300I Duo 推理卡)使用: |
||
duo |
|
推理卡类型。 |
npu-310-strategy |
|
- |
distributed |
|
是否使用分布式推理。 |
以下参数仅支持Atlas 800I A2 推理服务器、A200I A2 Box 异构组件、Atlas 800I A3 超节点服务器使用: |
||
nodeSelector |
module-{xxx}b-8 |
运行推理任务的节点类型。 |
以下参数仅acjob任务使用: |
||
ring-controller.atlas |
|
芯片类型。 |
schedulerName |
默认值为“volcano”,用户需根据自身情况填写 |
Ascend Operator启用“gang”调度时所选择的调度器。 |
minAvailable |
默认值为任务总副本数 |
Ascend Operator启用“gang”调度生效时,且调度器为Volcano时,任务运行总副本数。 |
queue |
默认值为“default”,用户需根据自身情况填写 |
Ascend Operator启用“gang”调度生效时,且调度器为Volcano时,任务所属队列。 |
(可选)successPolicy |
|
表明任务成功的前提。空值代表只需要一个Pod成功,整个任务判定为成功。取值为“AllWorkers”表示所有Pod都成功,任务才判定为成功代表。 |
container.name |
ascend |
容器的名称必须是“ascend”。 |
(可选)ports |
若用户未进行设置,系统默认填写以下参数:
|
分布式训练集合通信端口。“name”取值只能为“ascendjob-port”,“containerPort”用户可根据实际情况设置,若未进行设置则采用默认端口2222。 |
特性名称 |
操作参考 |
---|---|
整卡调度 |
|
在Atlas 推理系列产品(非Atlas 200I SoC A1 核心板和Atlas 300I Duo 推理卡)上创建单卡任务 |
|
静态vNPU调度 |
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保持一致 resources: requests: huawei.com/Ascend310: 1 # 申请的芯片数量 limits: huawei.com/Ascend310: 1 ...
apiVersion: mindxdl.gitee.com/v1 kind: AscendJob metadata: name: default-infer-test labels: ... app: infers npu-310-strategy: chip # 按按昇腾AI处理器调度 distributed: "true" # 分布式推理 duo: "true" # 使用Atlas 300I Duo 推理卡 ring-controller.atlas: ascend-310P # 标识任务使用的芯片的产品类型 framework: pytorch # 框架类型 spec: schedulerName: volcano #当Ascend Operator组件的启动参数enableGangScheduling为true时生效 runPolicy: schedulingPolicy: minAvailable: 2 # 任务总副本数 queue: default # 任务所属队列 successPolicy: AllWorkers # 任务成功的前提 replicaSpecs: Master: replicas: 1 # 任务副本数 ... spec: nodeSelector: servertype: Ascend310P containers: - name: ascend # 必须为ascend,不能修改 image: ubuntu:18.04 # 根据实际情况修改镜像名称 ... - name: ASCEND_VISIBLE_DEVICES valueFrom: fieldRef: fieldPath: metadata.annotations['huawei.com/Ascend310P'] # 给容器挂载相应类型的芯片 ... ports: # 分布式训练集合通信端口 - containerPort: 2222 name: ascendjob-port resources: limits: huawei.com/Ascend310P: 1 # 申请的芯片数量 requests: huawei.com/Ascend310P: 1 #与limits取值一致 volumeMounts: ... - name: ranktable mountPath: /user/serverid/devindex/config ... volumes: ... - name: ranktable hostPath: path: /user/mindx-dl/ranktable/default.default-infer-test ... Worker: ... spec: containers: - name: ascend #必须为ascend,不能修改 image: ubuntu:18.04 # 根据实际情况修改镜像名称 env: ... - name: ASCEND_VISIBLE_DEVICES valueFrom: fieldRef: fieldPath: metadata.annotations['huawei.com/Ascend310P'] # 给容器挂载相应类型的芯片 ... ports: # 分布式训练集合通信端口 - containerPort: 2222 name: ascendjob-port resources: limits: huawei.com/Ascend310P: 1 # 申请的芯片数 requests: huawei.com/Ascend310P: 1 #与limits取值一致 volumeMounts: ... # 可选,使用Ascend Operator组件为PyTorch框架生成RankTable文件,需要新增以下加粗字段,设置容器中hccl.json文件保存路径 - name: ranktable mountPath: /user/serverid/devindex/config ... volumes: ... # 可选,使用Ascend Operator组件为PyTorch框架生成RankTable文件,需要新增以下加粗字段,设置hccl.json文件保存路径 - name: ranktable hostPath: path: /user/mindx-dl/ranktable/default.default-infer-test # 共享存储或者本地存储路径,请根据实际情况修改 ...
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”标签的节点上。
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 ...
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'] # 需要和下面resources.requests保持一致 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
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的值一致 ...
... ports: # 分布式训练集合通信端口 - containerPort: 2222 name: ascendjob-port resources: limits: huawei.com/Ascend310P: 1 # 申请的芯片数 requests: huawei.com/Ascend310P: 1 # 与limits取值一致 volumeMounts: ... # 权重文件挂载路径 - name: weights mountPath: /path-to-weights ... volumes: ... # 权重文件挂载路径 - name: weights hostPath: path: /path-to-weights # 共享存储或者本地存储路径,请根据实际情况修改 ...
/path-to-weights为模型权重,需要用户自行准备。mindie镜像可以参考镜像中$ATB_SPEED_HOME_PATH/examples/models/llama3/README.md文件中的说明进行下载。
... containers: - image: ubuntu-infer:v1 ... command: ["/bin/bash", "-c", "cd $ATB_SPEED_HOME_PATH; python examples/run_pa.py --model_path /path-to-weights"] resources: requests: ...