昇腾 NPU 基础部署
本篇覆盖单机环境初始化(驱动 + CANN)、容器运行时配置、k8s device-plugin 与 npu-exporter 部署。
机器环境初始化
安装驱动和 CANN,参考:
- https://www.hiascend.com/document/detail/zh/mindx-dl/600/description/overview/dlug_description_001.html
- https://www.hiascend.com/document/detail/zh/canncommercial/80RC3/softwareinst/instg/instg_0000.html?Mode=PmIns&OS=Ubuntu&Software=cannToolKit
安装驱动时添加 --install-for-all。
查看机器设备:
npu-smi info
配置运行时
首先安装 docker 或 containerd。
配置 Ascend-docker-runtime 参考:https://www.hiascend.com/document/detail/zh/mindx-dl/600/clusterscheduling/clusterschedulingig/clusterschedulingig/dlug_installation_017.html
下载安装 Ascend-docker-runtime:https://gitee.com/ascend/mind-cluster/releases/tag/v6.0.0
chmod u+x Ascend-docker-runtime_6.0.0_linux-aarch64.run
./Ascend-docker-runtime_6.0.0_linux-aarch64.run --check
# 安装 docker 运行时
./Ascend-docker-runtime_6.0.0_linux-aarch64.run --install
# docker 重启
systemctl daemon-reload && systemctl restart docker
# docker info 查看默认运行时是否改为 ascend
# 或者安装 containerd 运行时
./Ascend-docker-runtime_6.0.0_linux-aarch64.run --install --install-scene=containerd
# 安装 containerd 运行时,指定 containerd 地址
./Ascend-docker-runtime_6.0.0_linux-aarch64.run --install --install-scene=containerd --config-file-path /etc/containerd/config.toml
# 查看 cgroup 版本
stat -fc %T /sys/fs/cgroup/
# 若回显为 tmpfs,表示当前为 cgroup v1 版本
# 若回显为 cgroup2fs,表示当前为 cgroup v2 版本
# 按照文档中 cgroup 版本类型,修改运行时
systemctl daemon-reload && systemctl restart containerd
测试容器使用 NPU 资源
# docker 测试
docker pull ccr.ccs.tencentyun.com/ascendhub/ascend-mindspore:24.0.RC1-A2-ubuntu20.04
docker run -it --user root --rm -e ASCEND_VISIBLE_DEVICES=0 ccr.ccs.tencentyun.com/ascendhub/ascend-mindspore:24.0.RC1-A2-ubuntu20.04 /bin/bash
# 进入容器后执行 npu-smi info 看看是否只有一个
# containerd 测试
nerdctl run -it --runtime io.containerd.runtime.v1.linux --user root --rm -e ASCEND_VISIBLE_DEVICES=0 ccr.ccs.tencentyun.com/ascendhub/ascend-mindspore:24.0.RC1-A2-ubuntu20.04 /bin/bash
说明:
ASCEND_VISIBLE_DEVICES用于指定容器可见的 NPU 卡号;平台侧禁用占用通过ASCEND_VISIBLE_DEVICES=void实现(见myapp/config.py:1265-1266的GPU_NONE)。
配置 k8s
Rancher 添加 /var/log 的 kubelet 挂载绑定
修改 rancher 集群配置,添加 kubelet 挂载,和部署时添加的挂载 /data:/data 类似:
kubelet:
extra_args:
...
extra_binds:
- '/data:/data' # 部署 k8s 时就添加了的配置
- '/var/log:/var/log' # 添加这一行
fail_swap_on: false
generate_serving_certificate: false
安装 device-plugin
每台机器执行下面的命令:
mkdir -p -m 750 /var/log/mindx-dl/devicePlugin
chown root:root /var/log/mindx-dl/devicePlugin
下载资源包:https://www.hiascend.com/developer/download/community/result?module=dl%2Bcann
这里以 910 为例,对应文件 device-plugin/device-plugin-910-v6.0.0.yaml(仓库内位于 install/kubernetes/ascend/device-plugin/,同目录还有 310/310P 及对应 volcano 版本的 yaml)。
操作步骤:
- 先手动拉取镜像,然后修改 yaml 中的镜像名。
- 修改
nodeSelector为gpu-type: NPU910。 - 修改镜像拉取策略为
IfNotPresent。
说明:
gpu-type节点标签必须大写(如NPU910),这与config.py注释「主机的 gpu-type 必须大写」一致(见myapp/config.py:1241)。
然后部署:
kubectl apply -f device-plugin/device-plugin-910-v6.0.0.yaml
安装 npu-exporter
每台主机上创建目录:
mkdir -p -m 755 /var/log/mindx-dl/npu-exporter
chown root:root /var/log/mindx-dl/npu-exporter
对应文件 npu-export/npu-exporter-v6.0.0.yaml(仓库内位于 install/kubernetes/ascend/npu-export/)。
操作步骤:
- 先手动拉取镜像,然后修改 yaml 中的镜像名。
- 修改命名空间,创建服务使得 Prometheus 可采集到。
- 设置 NPU 机器选择器和 hostNetwork。
然后部署:
kubectl apply -f npu-export/npu-exporter-v6.0.0.yaml