更新时间:2025-08-27 GMT+08:00

NPU芯级独占调度

NPU芯级独占调度是指在调度NPU资源时,以NPU芯卡为单位进行资源分配的调度策略。每个Pod在运行时会独占一个或多个完整的NPU芯片,不会与其他任务共享NPU芯片的计算资源。使用NPU芯级独占调度存在以下优势:

  • 性能稳定:独占整个物理NPU芯片,可以有效避免多任务竞争带来的资源抖动,保障模型训练/推理的稳定性和一致性。
  • 提升训练效率:对于大规模模型或计算密集型任务,芯级独占调度可以避免上下文切换和带宽干扰,从而提升训练效率和吞吐能力。

本文将进一步为您介绍如何使用NPU芯级调度。

前提条件

创建NPU芯级独占调度工作负载

创建NPU芯级独占调度工作负载时,支持使用控制台和kubectl命令行的方式,具体如下:

  1. 登录CCE控制台,单击集群名称进入集群。在左侧导航栏单击“工作负载”,右上角单击“创建工作负载”。
  2. “容器配置 > 基本信息 >NPU配额”中选择“芯级独占调度”。选择“芯级独占调度”后,请在下方选择申请的芯片类型和个数,系统将根据该信息为容器分配对应NPU资源。

    图1 NPU芯级独占调度

  3. 其他参数请参考创建工作负载进行配置,参数配置完成后,在右下角单击“创建工作负载”。待工作负载变为运行中后,则表示创建成功。
  1. 使用kubectl连接集群。
  2. 执行以下命令,创建YAML文件,用于创建一个使用NPU芯级独占调度的工作负载。

    vim npu-app.yaml

    文件内容如下:

    kind: Deployment
    apiVersion: apps/v1
    metadata:
      name: npu-test
      namespace: default
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: npu-test
      template:
        metadata:
          labels:
            app: npu-test
        spec:
          nodeSelector:      # 可选参数,指定该参数后,可为当前负载绑定特定类型的NPU资源,使Pod调度至具备相应资源的节点
            accelerator/huawei-npu: ascend-310
          containers:
            - name: container-0
              image: nginx:perl
              env:
              - name: LD_LIBRARY_PATH  # 配置环境变量,用于指定动态链接库的搜索路径,确保在运行与NPU相关的应用时,系统能够正确加载所需的动态库文件。
                value: "/usr/local/HiAI/driver/lib64:/usr/local/Ascend/driver/lib64/common:/usr/local/Ascend/driver/lib64/driver:/usr/local/Ascend/driver/lib64"
              resources:
                limits:
                  cpu: 250m
                  huawei.com/ascend-310: '1' 
                  memory: 512Mi
                requests:
                  cpu: 250m
                  huawei.com/ascend-310: '1'
                  memory: 512Mi        
          imagePullSecrets:
          - name: default-secret
    • nodeSelector:可选参数,表示节点选择器。指定该参数后,可为当前负载绑定特定类型的NPU资源,使Pod调度至具备相应资源的节点。若未指定,系统将自动为Pod分配可用的NPU节点。

      您可以通过以下命令查询节点的标签:

      kubectl get node -L accelerator/huawei-npu

      回显结果如下,加粗部分即为对应标签值:

      NAME           STATUS   ROLES    AGE     VERSION                                    HUAWEI-NPU
      10.100.2.59    Ready    <none>   2m18s   v1.19.10-r0-CCE21.11.1.B006-21.11.1.B006   ascend-310
    • 容器支持选择以下类型NPU芯片。如YAML文件所示,您可以在resources.limits中指定对应的芯片类型和芯片个数,芯片个数必须为正整数。
      • 昇腾Snt3:由huawei.com/ascend-310字段表示。
      • 昇腾Snt9:由huawei.com/ascend-1980字段表示,使用该类型芯片时需提前安装Volcano插件,具体请参见Volcano调度器

        指定NPU芯片数量时,requests和limits值需要保持一致。

  3. 执行以下命令,创建工作负载。

    kubectl apply -f npu-app.yaml

    回显结果如下,则说明工作负载已创建。

    deployment.apps/npu-test created

  4. 执行以下命令,查看已创建的Pod名称。

    kubectl get pod -n default

    回显结果如下:

    NAME                      READY   STATUS    RESTARTS   AGE
    npu-test-6bdb4d7cb-pmtc2   1/1     Running   0          21s

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

    kubectl -n default exec -it npu-test-6bdb4d7cb-pmtc2 -c container-0 -- /bin/bash

  6. 在容器内执行以下命令,查看NPU是否分配成功。

    npu-smi info

    由回显结果可知,该容器已挂载Chip ID为13的NPU芯片

NPU故障隔离

CCE AI套件(Ascend NPU)插件支持检测NPU卡的健康状态。当设备处于不健康状态时,插件会将设备健康状态上报至Kubelet,Kubelet会自动将不健康设备从可用列表中剔除,对应的NPU资源将无法被调度。当设备恢复健康状态时,插件会重新上报健康状态,使设备在CCE中恢复可用。

相关文档

  • 如果需要使用NPU虚拟化功能,请参见NPU虚拟化
  • 如果需要对NPU指标进行监控,请参见NPU监控