更新时间:2025-08-27 GMT+08:00
NPU芯级独占调度
NPU芯级独占调度是指在调度NPU资源时,以NPU芯卡为单位进行资源分配的调度策略。每个Pod在运行时会独占一个或多个完整的NPU芯片,不会与其他任务共享NPU芯片的计算资源。使用NPU芯级独占调度存在以下优势:
- 性能稳定:独占整个物理NPU芯片,可以有效避免多任务竞争带来的资源抖动,保障模型训练/推理的稳定性和一致性。
- 提升训练效率:对于大规模模型或计算密集型任务,芯级独占调度可以避免上下文切换和带宽干扰,从而提升训练效率和吞吐能力。
本文将进一步为您介绍如何使用NPU芯级调度。
前提条件
- 已创建NPU类型节点,具体请参见创建节点。
- 已安装CCE AI套件(Ascend NPU)插件,具体请参见CCE AI套件(Ascend NPU)。
创建NPU芯级独占调度工作负载
创建NPU芯级独占调度工作负载时,支持使用控制台和kubectl命令行的方式,具体如下:
- 使用kubectl连接集群。
- 执行以下命令,创建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值需要保持一致。
- nodeSelector:可选参数,表示节点选择器。指定该参数后,可为当前负载绑定特定类型的NPU资源,使Pod调度至具备相应资源的节点。若未指定,系统将自动为Pod分配可用的NPU节点。
- 执行以下命令,创建工作负载。
kubectl apply -f npu-app.yaml
回显结果如下,则说明工作负载已创建。
deployment.apps/npu-test created
- 执行以下命令,查看已创建的Pod名称。
kubectl get pod -n default
回显结果如下:
NAME READY STATUS RESTARTS AGE npu-test-6bdb4d7cb-pmtc2 1/1 Running 0 21s
- 执行以下命令,登录容器内部。
kubectl -n default exec -it npu-test-6bdb4d7cb-pmtc2 -c container-0 -- /bin/bash
- 在容器内执行以下命令,查看NPU是否分配成功。
npu-smi info
由回显结果可知,该容器已挂载Chip ID为13的NPU芯片。
NPU故障隔离
CCE AI套件(Ascend NPU)插件支持检测NPU卡的健康状态。当设备处于不健康状态时,插件会将设备健康状态上报至Kubelet,Kubelet会自动将不健康设备从可用列表中剔除,对应的NPU资源将无法被调度。当设备恢复健康状态时,插件会重新上报健康状态,使设备在CCE中恢复可用。