文档首页/ 云容器引擎 CCE/ 用户指南/ 调度/ NPU调度/ NPU虚拟化/ 自动实现NPU虚拟化(算力切分)
更新时间:2025-08-27 GMT+08:00

自动实现NPU虚拟化(算力切分)

在CCE中,通过CCE AI套件(Ascend NPU)插件的ascend-vnpu-manager组件可以实现节点池粒度的NPU虚拟化,以生成虚拟NPU(vNPU),从而实现资源的高效利用。启用NPU虚拟化功能后,系统会根据配置中指定的模板,对节点池内的NPU芯片进行自动切分,从而实现标准化、批量化的虚拟化部署。

前提条件

  • 集群中已安装CCE AI套件(Ascend NPU)插件,且版本在2.1.63以上,具体安装步骤请参见CCE AI套件(Ascend NPU)
  • NPU节点上已安装NPU驱动,且驱动版本在23.0.1及以上。
    1. 卸载原有NPU驱动,具体步骤请参见NPU驱动卸载
    2. 进入固件与驱动,选择对应产品型号,下载23.0.1及以上版本的驱动安装包(软件包格式为run)。
    3. 下载安装包后,请阅读用户必读了解NPU安装相关限制和要求,并参考安装驱动(适用于.run格式)中的步骤进行安装。

约束与限制

仅Snt3P3和Snt9B3芯片支持使用ascend-vnpu-manager进行虚拟化管理。

Snt9B3的虚拟化能力处于实验性阶段,模型算子的覆盖范围仍在不断完善。为保障模型算子的正常运行,建议您在部署前进行任务兼容性验证。如果经过验证,任务可以在Snt9B3的vNPU上运行,则可以使用CCE的算力切分管理能力进行NPU虚拟化配置的应用、更改与销毁。

配置NPU虚拟化

开启NPU虚拟化功能前,需要将对应节点池中的NPU负载排空,具体请参见节点排水

  1. 登录CCE控制台,单击集群名称进入集群,在左侧选择“配置中心”。
  2. 切换至“异构资源配置”页签,开启“NPU虚拟化”,仅支持配置节点池级别的NPU虚拟化。
  3. “NPU虚拟化配置 ”中单击“添加”,并配置以下参数。参数配置完成后,系统将根据“虚拟化实例组合”对节点池中的NPU芯片进行自动切分。

    某条配置删除后,不会触发对应节点上的管理动作,只有在虚拟化实例组合新增和更改的时候才会触发。即删除某条配置后,该节点池的vNPU资源配置并未消失,需要在虚拟化实例组合更换为all-disabled才能将该节点的vNPU配置删除。

    表1 NPU虚拟化配置

    参数

    说明

    节点池

    请选择需要虚拟化的节点池,暂不支持对default节点池进行配置。

    芯片类型

    请选择需要进行虚拟化的芯片类型,目前仅支持对昇腾Snt3P3和昇腾Snt9B3类型的芯片进行虚拟化。

    虚拟化实例组合

    CCE已提供多种NPU虚拟化模板组合,可以根据需求选择不同的组合,以满足使用要求。进行节点池的虚拟化实例组合的更改前,请先将对应节点池中的NPU与vNPU负载排空。

    将鼠标悬浮于组合名称之上,可以查看对应的模板名称和数量等信息。例如,all-disabled表示不进行NPU虚拟化,all-7vir01表示将节点池中的对应类型的NPU芯片皆切分成7个模板为vir01的vNPU。关于NPU虚拟化模板的更多信息,请参见NPU虚拟化模板

    如果您需要为多个节点池和NPU芯片配置NPU虚拟化,请单击“添加”,继续添加。

  4. 上述配置完成后,在页面右下角单击“确认配置”。在“确认配置”的弹窗中,单击“保存”。保存后,CCE AI套件(Ascend NPU)插件将自动在符合条件的节点中部署ascend-vnpu-manager组件。该组件将自动监听global-vnpu-configs(ConfigMap)的内容变化,并根据内容触发vNPU管理动作。
  5. NPU虚拟化配置完成后,您可以通过ascend-vnpu-manager的日志验证NPU虚拟化是否配置成功。

    在左侧导航栏中选择“插件中心”,在右侧找到CCE AI套件(Ascend NPU)插件,单击“插件详情”,切换至“实例列表”,找到对应节点的ascend-vnpu-manager的Pod实例。在右侧操作列单击“更多 > 日志”

    • 若日志中存在以下信息,则说明当前节点NPU虚拟化配置成功。
      图1 验证NPU虚拟化是否成功
    • 若日志中存在“Error: error applying VNPU configuration: failed to apply func on device1, err: NPU1 has VNPU in use ...”等信息,则说明节点已存在NPU负载或vNPU负载,NPU虚拟化无法配置,您可以通过以下方式进行解决:

      在对应节点中清空NPU负载或vNPU负载后,删除对应的ascend-vnpu-manager的Pod实例。待该ascend-vnpu-manager的Pod实例重启且状态变为运行中后,当前节点的NPU虚拟化功能将正常使用。

使用vNPU

您可以采取两种方式为容器指定vNPU资源,即控制台方式和kubectl命令行方式。

  1. 登录CCE控制台,单击集群名称进入集群。在左侧导航栏单击“工作负载”,右上角单击“创建工作负载”。
  2. “容器配置 > 基本信息 >NPU配额”中选择算力拆分,在虚拟化模板的下拉列表中选择需要的虚拟化模板。此处虚拟化模板名称为“Ascend-芯片类型-虚拟化实例模板”,例如ascend-310-vir01表示昇腾Snt3芯片中以vir01为模板的vNPU。选择模板后,CCE将按照虚拟化模板为容器分配vNPU资源。

    表2 虚拟化模板

    参数

    说明

    虚拟化模板

    提供已配置模板未配置模板,具体如下:

    • 已配置:在“配置中心 > 异构资源配置”中已配置的虚拟化模板,可以直接使用。
    • 未配置:在“配置中心 > 异构资源配置”中暂未配置的虚拟化模板,无法直接使用。如果选择未配置模板,工作负载将因资源不足而创建失败。此时,请在“NPU虚拟化配置 ”中配置相关模板,具体操作请参见配置NPU虚拟化。配置完成后,该负载将自动调度成功。

  3. 其他参数请参考创建工作负载进行配置。参数配置完成后,在右下角单击“创建工作负载”。待工作负载变为运行中后,则表示创建成功。

在创建vNPU之后,工作负载可以通过YAML格式申请vNPU资源,从而实现资源的高效管理和灵活配置。如果需要使用Volcano调度器,则需要安装1.12.1及以上版本的Volcano调度器插件。

  1. 依次执行以下命令,创建工作负载,并申请一个vir02模板的vNPU资源。

    1. 执行以下命令,创建名为vnpu-worker的YAML文件。
      vim vnpu-worker.yaml

      文件内容如下,容器中只支持申请NPU资源或者vNPU资源,二者不可以同时使用

      使用vNPU资源时,需确保该vNPU资源已存在。如果该vNPU资源未创建,则会报错,例如“0/2 nodes are available: 2 Insufficient huawei.com/ascend-310-2c”。

      kind: Deployment
      apiVersion: apps/v1
      metadata:
        name: vnpu-test
        namespace: default
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: vnpu-test
        template:
          metadata:
            labels:
              app: vnpu-test
          spec:
            schedulerName: kube-scheduler    # 该工作负载需要使用volcano调度器时,则需要安装volcano插件,且版本在1.12.1及以上
            containers:
              - name: container-0
                image: nginx:latest
                resources:
                  limits:
                    cpu: 250m
                    huawei.com/ascend-310-2c: '1'   # 表示申请的vNPU资源,固定为1
                    memory: 512Mi
                  requests:
                    cpu: 250m
                    huawei.com/ascend-310-2c: '1'   # 固定为1
                    memory: 512Mi
      • 容器只支持申请一个vNPU资源,因此requests和limits里的vNPU资源数量固定为1。
      • 指定的vNPU资源请在节点中提前创建,且保证资源充足。当vNPU资源不足时,会出现类似“0/2 nodes are available: 2 Insufficient huawei.com/ascend-310-2c.”的报错。
      • huawei.com/ascend-310-2c表示申请vNPU资源名称,不同产品和模板对应的vNPU资源名称不同,具体映射关系如下:
        表3 vNPU资源名称

        产品类型

        虚拟化模板

        vNPU资源名称

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

        vir01

        huawei.com/ascend-310-1c

        vir02

        huawei.com/ascend-310-2c

        vir02_1c

        huawei.com/ascend-310-2c.1cpu

        vir04

        huawei.com/ascend-310-4c

        vir04_3c

        huawei.com/ascend-310-4c.3cpu

        vir04_3c_ndvpp

        huawei.com/ascend-310-4c.3cpu.ndvpp

        vir04_4c_dvpp

        huawei.com/ascend-310-4c.4cpu.dvpp

        Ascend训练系列产品(30或32个AI Core)

        vir16

        huawei.com/ascend-1980-16c

        vir08

        huawei.com/ascend-1980-8c

        vir04

        huawei.com/ascend-1980-4c

        vir02

        huawei.com/ascend-1980-2c

        vir10_3c_32g

        huawei.com/ascend-1980-10c.3cpu.32g

        vir05_1c_16g

        huawei.com/ascend-1980-5c.1cpu.16g

    2. 执行以下命令,创建上述工作负载。
      kubectl apply -f vnpu-worker.yaml

      回显结果如下:

      deployment/vnpu-test created
    3. 执行以下命令,查看Pod是否运行成功。
      kubectl get pod | grep vnpu-test

      回显结果如下,则说明工作负载中的Pod运行成功。

      vnpu-test-6658cd795b-rx76t      1/1     Running     0       59m

  2. 执行以下命令,登录容器内部。

    kubectl -n default exec -it vnpu-test-6658cd795b-rx76t -c container-0 -- /bin/bash

  3. 在容器内依次执行以下命令,查看vNPU是否挂载成功。

    1. 执行以下命令,配置环境变量,用于指定动态链接库的搜索路径,确保在运行与NPU相关的应用时,系统能够正确加载所需的动态库文件。
      export LD_LIBRARY_PATH=/usr/local/HiAI/driver/lib64:/usr/local/Ascend/driver/lib64/common:/usr/local/Ascend/driver/lib64/driver:/usr/local/Ascend/driver/lib64 
    2. 执行以下命令,查看容器挂载的NPU信息,以确认是否成功挂载vNPU资源。
      npu-smi info

      由回显结果可知,该容器已挂载设备ID为104的NPU卡中的vNPU,且虚拟化模板为vir02

      +--------------------------------------------------------------------------------------------------------+
      | npu-smi 24.1.rc2.3                               Version: 24.1.rc2.3                                   |
      +-------------------------------+-----------------+------------------------------------------------------+
      | NPU     Name                  | Health          | Power(W)     Temp(C)           Hugepages-Usage(page) |
      | Chip    Device                | Bus-Id          | AICore(%)    Memory-Usage(MB)                        |
      +===============================+=================+======================================================+
      | 104     xxx             | OK              | NA           54                0     / 0             |
      | 0       0                     | 0000:00:0D.0    | 0            445  / 5381                             |
      +===============================+=================+======================================================+
      +-------------------------------+-----------------+------------------------------------------------------+
      | NPU     Chip                  | Process id      | Process name             | Process memory(MB)        |
      +===============================+=================+======================================================+
      | No running processes found in NPU 104                                                                  |
      +===============================+=================+======================================================+

关闭NPU虚拟化

  1. 登录CCE控制台,单击集群名称进入集群,在左侧选择“配置中心”,切换至“异构资源配置”页签。
  2. 对已启用NPU虚拟化的节点执行vNPU负载排空操作,具体请参见节点排水
  3. “NPU虚拟化配置”中,将所有节点池的虚拟化实例组合设置为“all-disabled”,右下角单击“确认配置”。在“确认配置”的弹窗中,单击“保存”。此时,系统将自动清除节点上的NPU虚拟化实例。
  4. 在“异构资源配置”页签,关闭NPU虚拟化。在弹窗中单击“确定”,并在右下角单击“确认配置”。在“确认配置”的弹窗中,单击“保存”。此时,系统将清除已有的虚拟化配置,并自动删除ascend-vnpu-manager的Pod实例。

相关文档

如果需要对NPU相关指标进行监控,请参见NPU监控