准备任务YAML

如果用户不使用Ascend Docker Runtime组件,Ascend Device Plugin只会帮助用户挂载“/dev”目录下的设备。其他目录(如“/usr”)用户需要自行修改YAML文件,挂载对应的驱动目录和文件。容器内挂载路径和宿主机路径保持一致。

因为Atlas 200I SoC A1 核心板场景不支持Ascend Docker Runtime,用户也无需修改YAML文件。

操作步骤

  1. 下载YAML文件。

    表1 任务类型与硬件型号对应YAML文件

    任务类型

    硬件型号

    YAML名称

    获取链接

    Volcano调度的Deployment任务

    Atlas 200I SoC A1 核心板

    infer-deploy-310p-1usoc.yaml

    获取YAML

    其他类型推理节点

    infer-deploy.yaml

    获取YAML

    Volcano Job任务

    Atlas 800I A2 推理服务器

    A200I A2 Box 异构组件

    Atlas 800I A3 超节点服务器

    infer-vcjob-910.yaml

    获取YAML

    Ascend Job任务

    推理服务器(插Atlas 300I Duo 推理卡

    pytorch_multinodes_acjob_infer_310p_with_ranktable.yaml

    获取YAML

    Atlas 800I A2 推理服务器

    A200I A2 Box 异构组件

    Atlas 800I A3 超节点服务器

    pytorch_multinodes_acjob_infer_{xxx}b_with_ranktable.yaml

    获取YAML

  2. 将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 推理服务器A200I A2 Box 异构组件Atlas 800I A3 超节点服务器:huawei.com/Ascend910:芯片数量

    静态vNPU调度:取值为1。只能使用一个NPU下的vNPU。

    Atlas 推理系列产品非混插模式:

    huawei.com/Ascend310P-Y: 1

    huawei.com/Ascend310P-4c.3cpu: 1

    请求的NPU或vNPU类型(只能请求一种类型)、数量,请根据实际修改。requests和limits下,芯片的名字和数量需保持一致。

    说明:
    • Atlas 推理系列产品非混插模式支持静态vNPU调度。
    • 推理服务器(插Atlas 300I 推理卡)和Atlas 推理系列产品混插模式不支持静态vNPU调度。
    • Y取值可参考静态虚拟化章节中的虚拟化实例模板与虚拟设备类型关系表的对应产品的“vNPU类型”列。

      以vNPU类型Ascend310P-4c.3cpu为例,Y取值为4c.3cpu,不包括前面的Ascend310P。

    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请求的昇腾AI处理器个数不超过4,使用同一张Atlas 300I 推理卡上的昇腾AI处理器
    • chip:按昇腾AI处理器调度,请求的芯片个数不超过单个节点的最大值。

    -

    schedulerName

    volcano

    如果切换调度器,需要将之前调度的任务都释放。

    以下参数仅支持推理服务器(插Atlas 300I Duo 推理卡)使用:

    duo

    • true:使用Atlas 300I Duo 推理卡
    • false:不使用Atlas 300I Duo 推理卡

    推理卡类型。

    npu-310-strategy

    • card:按推理卡调度,request请求的昇腾AI处理器个数不超过2,使用同一张Atlas 300I Duo 推理卡上的昇腾AI处理器
    • chip:按昇腾AI处理器调度,请求的昇腾AI处理器个数不超过单个节点的最大值。

    -

    distributed

    • true:使用分布式推理。使用chip模式时,必须将任务调度到整张Atlas 300I Duo 推理卡。若任务需要的昇腾AI处理器数量为单数时,使用单个昇腾AI处理器的部分,将优先调度到剩余昇腾AI处理器数量为1的Atlas 300I Duo 推理卡上。
    • false:使用非分布式推理。使用chip模式时,请求的昇腾AI处理器个数不超过单个节点的最大值。
      说明:
      • 无论是否为分布式推理,card模式的调度策略不变。
      • 当distributed为true时,只支持单机多卡;当distributed为false时,只支持多机多卡。
      • 当distributed为true时,不支持Deployment任务。

    是否使用分布式推理。

    以下参数仅支持Atlas 800I A2 推理服务器A200I A2 Box 异构组件Atlas 800I A3 超节点服务器使用:

    nodeSelector

    module-{xxx}b-8

    运行推理任务的节点类型。

    以下参数仅acjob任务使用:

    ring-controller.atlas

    • Atlas 800I A2 推理服务器A200I A2 Box 异构组件:ascend-{xxx}b
    • 推理服务器(插Atlas 300I Duo 推理卡):ascend-310P

    芯片类型。

    schedulerName

    默认值为“volcano”,用户需根据自身情况填写

    Ascend Operator启用“gang”调度时所选择的调度器。

    minAvailable

    默认值为任务总副本数

    Ascend Operator启用“gang”调度生效时,且调度器为Volcano时,任务运行总副本数。

    queue

    默认值为“default”,用户需根据自身情况填写

    Ascend Operator启用“gang”调度生效时,且调度器为Volcano时,任务所属队列。

    (可选)successPolicy

    • 默认值为空,若用户不填写该参数,则默认取空值。
    • AllWorkers

    表明任务成功的前提。空值代表只需要一个Pod成功,整个任务判定为成功。取值为“AllWorkers”表示所有Pod都成功,任务才判定为成功代表。

    container.name

    ascend

    容器的名称必须是“ascend”

    (可选)ports

    若用户未进行设置,系统默认填写以下参数:

    • name: ascendjob-port
    • containerPort: 2222

    分布式训练集合通信端口。“name”取值只能为“ascendjob-port”“containerPort”用户可根据实际情况设置,若未进行设置则采用默认端口2222。

  3. 根据实际需求,选择YAML示例并进行如下修改。

    • 使用整卡调度特性,参考本配置。以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保持一致
              resources:
                requests:
                  huawei.com/Ascend310: 1                   # 申请的芯片数量
                limits:
                  huawei.com/Ascend310: 1
      ...
    • 使用整卡调度特性,参考本配置。以pytorch_multinodes_acjob_infer_310p_with_ranktable.yaml为例,在推理服务器(插Atlas 300I Duo 推理卡)节点创建一个分布式推理任务,并且启用了调度策略,示例如下。修改完成后直接执行步骤4
      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  # 共享存储或者本地存储路径,请根据实际情况修改
      ...
    • 使用整卡调度特性,参考本配置。以infer-deploy.yaml为例,在Atlas 推理系列产品节点(非Atlas 200I SoC A1 核心板Atlas 300I Duo 推理卡节点)创建一个不使用混插模式的单卡推理任务,示例如下。修改完成后直接执行步骤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']               # 需要和下面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
    • 使用静态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的值一致
      ...

  4. 挂载权重文件。

    ...
                  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文件中的说明进行下载。

  5. 修改示例YAML中容器启动命令,如下加粗部分所示,如果没有则添加“command”字段。

    ...
          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:
    ...