昇腾社区首页
中文
注册

动态虚拟化

使用动态虚拟化前,需要提前了解表1中的相关使用说明。

使用说明

表1 场景说明

场景

说明

通用说明

分配的芯片信息会在pod的annotation中体现出来,关于pod annotation的详细说明请参见Pod annotation中的huawei.com/npu-core、huawei.com/AscendReal参数。

同一时刻,只能下发相同虚拟化模板的任务。

动态分配vNPU时,经MindCluster调度,将优先占满剩余算力最少的物理NPU。

目前任务的每个pod请求的NPU数量为1个。

特性支持的场景

支持多副本,但多副本中的每个pod都必须使用vNPU。

支持K8s的机制,如亲和性等。

支持芯片故障和节点故障的重调度。具体参考推理卡故障恢复推理卡故障重调度章节。

特性不支持的场景

不支持不同芯片在一个任务内混用。

任务运行过程中,不支持卸载Volcano

K8s场景会自动创建与销毁vNPU,不能与Docker场景的操作混用。

进行动态虚拟化的节点不能对芯片的CPU进行过设置。详情请参考《Atlas 中心推理卡 25.0.RC1 npu-smi 命令参考》中的“信息查询>查询所有芯片的AI CPU、control CPU和data CPU数量章节。

Atlas 推理系列产品(8个AI Core)使用说明

任务请求的AI Core数量,为vNPU时,按实际填写1、2、4;整张物理NPU时,需要为8以及8的倍数。

默认需要容器以root用户启动,若需要以普通用户运行推理任务,需要参考使用动态虚拟化时,以普通用户运行推理业务容器失败章节进行操作。

vNPU动态创建和销毁仅在Atlas 推理系列产品上有效,并且需要配套Volcano使用。

表2 虚拟化实例模板与虚拟设备类型关系表

NPU类型

虚拟化实例模板

vNPU类型

具体虚拟设备名称(以vNPU ID100、物理卡ID0为例)

Atlas 推理系列产品(8个AI Core)

vir01

Ascend310P-1c

Ascend310P-1c-100-0

vir02

Ascend310P-2c

Ascend310P-2c-100-0

vir04

Ascend310P-4c

Ascend310P-4c-100-0

vir02_1c

Ascend310P-2c.1cpu

Ascend310P-2c.1cpu-100-0

vir04_3c

Ascend310P-4c.3cpu

Ascend310P-4c.3cpu-100-0

vir04_3c_ndvpp

Ascend310P-4c.3cpu.ndvpp

Ascend310P-4c.3cpu.ndvpp-100-0

vir04_4c_dvpp

Ascend310P-4c.4cpu.dvpp

Ascend310P-4c.4cpu.dvpp-100-0

使用前提

  1. 需要先获取“Ascend-docker-runtime_{version}_linux-{arch}.run”,安装容器引擎插件。
  2. 参见安装部署章节,完成各组件的安装。

    虚拟化实例涉及到需要修改相关参数的集群调度组件VolcanoAscend Device Plugin,请按如下要求修改并使用对应的yaml安装部署。

    1. Ascend Device Plugin参数修改及启动说明。

      虚拟化实例启动参数说明如下:

      表3 Ascend Device Plugin启动参数

      参数

      类型

      默认值

      说明

      -volcanoType

      bool

      false

      是否使用Volcano进行调度,如使用动态虚拟化,需要设置为true。

      -presetVirtualDevice

      bool

      true

      静态虚拟化功能开关,目前支持Atlas 训练系列产品、和Atlas 推理系列产品,且值只能为true。

      如使用动态虚拟化,需要设置为false。目前支持Atlas 推理系列产品的动态虚拟化,需要同步开启Volcano使用。

      yaml启动说明如下:

      K8s集群中存在使用Atlas 推理系列产品节点,需要在device-plugin-310P-volcano-v7.0.RC1中将“presetVirtualDevice”字段修改为“false”(协同Volcano使用,支持NPU虚拟化,yaml默认关闭动态虚拟化)。
      ...
      args: [ "device-plugin  -useAscendDocker=true -volcanoType=true -presetVirtualDevice=false
                 -logFile=/var/log/mindx-dl/devicePlugin/devicePlugin.log -logLevel=0" ]
      ...
    2. Volcano参数修改及启动说明。

      Volcano部署文件“volcano-v{version}.yaml”中,需要配置“presetVirtualDevice”的值为“false”

      ...
      data:
        volcano-scheduler.conf: |
          actions: "enqueue, allocate, backfill"
          tiers:
          - plugins:
            - name: priority
            - name: gang
            - name: conformance
            - name: volcano-npu-v7.0.RC1_linux-aarch64
          - plugins:
            - name: drf
            - name: predicates
            - name: proportion
            - name: nodeorder
            - name: binpack
          configurations:
           ...
            - name: init-params
              arguments: {"grace-over-time":"900","presetVirtualDevice":"false"}  # 开启动态虚拟化,presetVirtualDevice的值需要设置为false
      ...

使用方法

创建推理任务时,需要在创建yaml文件时,修改如下配置。以Atlas 推理系列产品使用为例。

resources中设定的requests和limits资源类型,申请一个AI Core,应修改为huawei.com/npu-core。以deployment部署方式为例:
apiVersion: apps/v1
kind: Deployment
metadata:
  name: deploy-with-volcano
  labels:
    app: tf
  namespace: vnpu
spec:
  replicas: 1
  selector:
    matchLabels:
      app: tf
  template:
    metadata:
      labels:
        app: tf
        ring-controller.atlas: ascend-310P  # 参见"虚拟化实例任务yaml中label说明"。
        fault-scheduling: "grace"           # 重调度所使用的label
        vnpu-dvpp: "yes"                    # 参见"虚拟化实例任务yaml中label说明"。
        vnpu-level: "low"                   # 参见"虚拟化实例任务yaml中label说明"。
    spec:
      schedulerName: volcano  # 需要使用MindCluster的调度器Volcano
      nodeSelector:
        host-arch: huawei-arm
      containers:
        - image: ubuntu:18.04   # 示例镜像
          imagePullPolicy: IfNotPresent
          name: tf
          command:
          - "/bin/bash"
          - "-c"
          args: [ "客户自己的运行脚本"  ]
          resources:
            requests:
              huawei.com/npu-core: 1        # 使用静态虚拟化的vir01模板动态虚拟化NPU
            limits:
              huawei.com/npu-core: 1        # 数值与requests一致。
 ....
表4 虚拟化实例任务yaml中label说明

key

value

说明

vnpu-level

low

低配,默认值,选择最低配置的“虚拟化实例模板”。

high

性能优先。

在集群资源充足的情况下,将选择尽量高配的虚拟化实例模板;在整个集群资源已使用过多的情况下,如大部分物理NPU都已使用,每个物理NPU只剩下小部分AI Core,不足以满足高配虚拟化实例模板时,将使用相同AI Core数量下较低配置的其他模板。具体选择请参考表5

vnpu-dvpp

yes

该pod使用DVPP。

no

该pod不使用DVPP。

null

默认值。不关注是否使用DVPP。

ring-controller.atlas

ascend-310P

任务使用Atlas 推理系列产品的标识。

vnpu-level和vnpu-dvpp的选择结果,具体请参见表5
  • 表中“降级”表示AI Core满足的情况下,其他资源不够(如AI CPU)时,模板会选择同AI Core下的其他满足资源要求的模板。如在只剩一颗芯片上只有2个AI Core,1个AI CPU时,vir02模板会降级为vir02_1c。
  • 表中“选择模板”中的值来源于虚拟化模板Atlas 推理系列产品、的“虚拟化实例模板”取值。
  • 表中“vnpu-level”列的“其他值”表示除去“low”“high”后的任意取值。
  • 整卡(core的请求数量为8的倍数)场景下vnpu-dvpp与vnpu-level可以取任意值。
表5 dvpp和level作用结果表

产品型号

AI Core请求数量

vnpu-dvpp

vnpu-level

是否降级

选择模板

Atlas 推理系列产品(8个AI Core)

1

null

任意值

-

vir01

2

null

low/其他值

-

vir02_1c

high

vir02

vir02_1c

4

yes

low/其他值

-

vir04_4c_dvpp

no

vir04_3c_ndvpp

null

vir04_3c

yes

high

-

vir04_4c_dvpp

no

vir04_3c_ndvpp

null

vir04

vir04_3c

8或8的倍数

任意值

任意值

-

-

注:

如果是Atlas 推理系列产品(8个AI Core),必须申请AI Core数量为8或8的倍数。

上表中对于芯片虚拟化(非整卡),vnpu-dvpp的值只能为表中对应的值,其他值会导致任务不能下发。