安装
目录
前提条件通用要求MindIO SDK(可选)操作步骤步骤 1:同步 driver images 并配置 ImageWhiteList1.1 从 Docker Hub 拉取 driver images1.2 在 ImageWhiteList 中放行 driver image1.3 验证步骤 2:下载 package步骤 3:上传 package步骤 4:安装 Node Feature Discovery 集群插件步骤 5:安装 Alauda Build of NPU Operator5.1 给节点打标签5.2 安装 operator5.3 创建 NPUOperatorCtl 实例验证步骤 6:验证监控后续步骤常见问题主机上的npu-smi 安装在哪里?工作负载 pod 还需要 runtimeClassName: ascend 吗?卸载 Alauda Build of NPU Operator 时需要注意什么?前提条件
通用要求
- ACP 版本:v4.0 或更高版本。
- 目标 ACP 集群的集群管理员访问权限。
- 受支持的 NPU 硬件。NPU worker 节点必须搭载以下之一:
Ascend 910BAscend 310P
- 必须安装
Alauda Build of Node Feature Discovery集群插件。operator 会从 NFD 中读取 NPU 是否存在以及 kernel/OS 标签,以决定在每个节点上拉取哪个 driver image。
MindIO SDK(可选)
如果你计划启用 MindIO TFT 或 MindIO ACP,请在每个 NPU 节点上于 /opt/openFuyao/mindio/ 下单独预置匹配的 MindIO SDK package。否则请跳过此步骤。
操作步骤
步骤 1:同步 driver images 并配置 ImageWhiteList
如果你的 NPU 节点已经通过带外方式安装了 Huawei driver(通常通过 .run package 安装,位置在 /usr/local/Ascend/driver 或 /var/lib/Ascend/driver),请跳过整个步骤。在这种情况下,请在 步骤 5.3 中禁用 Driver —— operator 将基于主机上现有的 driver 配置 CDI / device-plugin / runtime,而不会再拉取 driver image。
这是安装失败最常见的原因——请先执行此步骤。 driver image 会由 driver DaemonSet 在运行时根据每个节点的 kernel 标签拉取,并位于 mlops/ascend-driver 路径下——它不随 operator 一起打包。如果与你的 kernel 匹配的 tag 不在集群 registry 中,或者未列入 ImageWhiteList,DaemonSet 就会一直停留在 ImagePullBackOff,operator 也永远到不了 Ready。如果源 Docker Hub 仓库中没有与你的 kernel 匹配的 tag,请联系 Customer Support 进行构建——请参见 §1.1。
你不需要手动编辑 /etc/containerd/config.toml 来启用 CDI。 operator 会附带一个 ascend-runtime-containerd DaemonSet,该 DaemonSet 会在每个 NPU 节点上运行,并幂等地将 enable_cdi = true 打开,同时在 containerd 配置中添加默认的 cdi_spec_dirs(/var/run/cdi、/etc/cdi),然后向 containerd 发送 SIGHUP。该方式同时适用于 containerd 1.7.x(默认关闭 CDI)和 2.x(默认开启 CDI)。
在升级主机的 containerd package 之后,package 安装过程可能会将 /etc/containerd/config.toml 替换为其默认模板,从而回退 operator 对 enable_cdi = true 的修改。此后任何新调度的 NPU pod 都会静默地 CDI device injection 失败。请重启 containerd-config sidecar 以重新应用该修改:
(如果你在安装时选择了不同的 namespace,请将 npu-operator 替换为你的安装 namespace。)
1.1 从 Docker Hub 拉取 driver images
driver image 独立发布在 Docker Hub 的 docker.io/alaudadockerhub/ascend-driver 上——不包含在 operator bundle 中——因为 driver 的 .ko binaries 依赖于 kernel,而且 kernel 列表会随着时间增长。每个 tag 都遵循 <HDK>-<chip>-<kernel>-<os-stem> 的格式,例如 25.5.0-910b-6.6.0-145.0.4.135-oe2403sp3。请选择与节点 uname -r 和 chip 匹配的 tag。
没有与你的 kernel 匹配的 tag? 不要尝试自行编译 driver image,也不要退回到在主机上安装 .run package——请将 uname -r 的输出以及你的 chip 型号(例如 Ascend 910B4、Ascend 310P3)发送给 Customer Support。系统会为你的 kernel 构建一个新的 tag,并发布到同一个 Docker Hub 仓库,无需修改 operator 代码。如果在没有匹配 image 的情况下继续操作,driver DaemonSet 将无限期停留在 ImagePullBackOff。
列出可用的 tag:
在一台可访问互联网的机器上,将每个选定的 tag 镜像同步到你的集群 registry:
operator 配置会将 spec.driver.image.repository 默认设为 mlops/ascend-driver;如果你的 registry 使用了不同的 namespace,请在部署表单中覆盖该值。
1.2 在 ImageWhiteList 中放行 driver image
ACP 会限制 pod 允许拉取的 image。DaemonSet 可能拉取的每个 driver-image tag 都必须显式列入 ImageWhiteList。
创建一个新的 ImageWhiteList(或者扩展 cpaas-system 中现有的 ascend-driver ImageWhiteList):
为你镜像同步的每个 <chip, kernel> tag 添加一条 repoList 记录。每条记录都必须是包含 tag 的完整 image 引用(API 不接受仅仓库路径)。如果你之后覆盖了 spec.driver.image.repository,则需要改为列出新的路径。
如果你的平台不强制执行 ImageWhiteList(默认是 Allow policy),那么这一步无需操作——kubelet 仍然会向 registry 进行身份认证,因此凭证才是实际拉取的门槛。
1.3 验证
在每个 NPU 节点上,kubelet 应该能够拉取 driver image(请使用与该节点 kernel 匹配的 tag):
如果这一步成功,则说明步骤 1 已完成。后续 driver DaemonSet 出现 ImagePullBackOff,通常意味着 registry 中缺少对应 tag、registry 凭证有问题,或者 ImageWhiteList 中缺少 repoList 记录。
步骤 2:下载 package
请在 Customer Portal 网站的 Marketplace 中下载:
- Alauda Build of NPU Operator operator package(以 OLM OperatorBundle 的形式交付)。
- Alauda Build of Node Feature Discovery 集群插件 package。
- (可选)Volcano 集群插件 package——仅当你计划在部署期间启用 ClusterD component 时才需要。
步骤 3:上传 package
平台提供了 violet 命令行工具,用于上传从 Customer Portal Marketplace 下载的 operator package 和 cluster plugin package。
详情请参见 上传 Package。
步骤 4:安装 Node Feature Discovery 集群插件
Alauda Build of Node Feature Discovery 是一个 cluster plugin,不是 operator。请先安装它,因为 NPU Operator 依赖其节点标记。
- 进入 Administrator > Marketplace > Cluster Plugins。
- 切换到目标集群。
- 找到 Alauda Build of Node Feature Discovery,然后点击 Install。
Volcano 集群插件现在可以先不安装。只有在后续启用 NPU Operator 的 ClusterD component 时,才需要从同一个 Cluster Plugins 页面安装它。
步骤 5:安装 Alauda Build of NPU Operator
Alauda Build of NPU Operator 以 operator(OLM bundle)的形式交付。在平台 UI 中,安装分为两个不同的子步骤:
- 安装 operator —— OperatorHub 流程只会启动 operator 的 controller pods(
npu-operator-controller-manager+npu-operator)。它不会部署任何 driver、device plugin 或其他 NPU components。 - 创建
NPUOperatorCtl实例 —— 只有在这一步你才会填写部署表单,并且只有在实例创建之后,controller pods 才会开始进行 reconcile,并将 NPU components 滚动部署到各个节点上。
5.1 给节点打标签
将标签 masterselector=dls-master-node 应用于所有主节点,将标签 workerselector=dls-worker-node 应用于需要承载 NPU components 的 worker 节点:
5.2 安装 operator
-
进入 Administrator > Marketplace > OperatorHub,切换到目标集群,并找到 Alauda Build of NPU Operator 条目。如果状态为 Absent,请确认已在 步骤 3 中使用
violet上传了 operator package。 -
点击该 operator 打开详情页,然后点击 Install。
-
在安装页面中,保持 Channel 不变,确认 Version,将 Installation Location 保持为
npu-operator(默认值;下一子步骤创建的所有 NPU components 都会部署在此处),并将 Upgrade Strategy 选择为 Manual。点击 Install。 -
等待 subscription 进入 Succeeded。Alauda Build of NPU Operator 磁贴应从 Installing 变为 Installed,并且
kubectl -n npu-operator get pod会显示两个 controller pods(npu-operator和npu-operator-controller-manager)处于Running状态。
到此为止,还不会有 driver pod、device plugin 或其他 NPU pod 运行。controller pods 目前处于空闲状态,正在等待 NPUOperatorCtl 实例。如果你在这里停止,NPU 节点将不会被配置。
5.3 创建 NPUOperatorCtl 实例
部署表单是在创建实例时打开的,而不是在上面安装 operator 时打开的。
-
在 Installed Operators 页面中,点击 Alauda Build of NPU Operator 磁贴,然后点击 Create Instance(或者打开 NPUOperatorCtl 选项卡并点击 Create NPUOperatorCtl)。
-
填写表单(见下表),然后点击 Create。
-
operator 会立即进行 reconcile:driver / device plugin / runtime sidecar / exporter / rebooter DaemonSets 会部署到每个 NPU 节点上,并且在所有组件启动完成后,controller 会将
NPUOperatorCtl的status.conditions更新为Deployed=True / UpgradeSuccessful。
部署表单参数说明:
如果下表中列出的某个 component 已经通过其他路径安装在集群中(例如手工安装的 Ascend Operator),请在此处关闭对应开关,以免 NPU Operator 与其发生冲突。
Ascend Operator、NodeD、ClusterD、Resilience Controller、MindIO TFT 和 MindIO ACP 默认都不会部署。只有在确有需要时才请部署它们。
验证
-
确认
NPUOperatorCtl实例正在正常 reconcile:Deployedcondition 应为True,原因为UpgradeSuccessful。(如果你在安装时选择的 namespace 不是npu-operator,请在下面以及后续命令中将其替换为你选择的 namespace。) -
等待
npu-driverpod 变为Running。首次安装时,driver image 的拉取以及模块插入主机 kernel 需要几分钟: -
检查 NPU 节点现在是否报告了可分配的 Ascend devices:
-
(可选)在主机上运行
npu-smi info。operator 不会将npu-smi软链接到主机的PATH(Alauda OS 中/usr是只读的),因此请在加载其 library 后直接调用二进制文件:每块卡都应报告
Health: OK,并且具有非零的Bus-Id。 -
使用一个示例 NPU workload 进行端到端验证。v1.2.4 已不再要求
runtimeClassName: ascend——仅资源请求本身就会触发 CDI device injection。在 air-gapped 或启用了 image-whitelist 强制检查的集群中,请先将示例 image 镜像同步到你的集群 registry,或者将其替换为一个等效的内部测试 image,该 image 包含npu-smi。pod 应该达到
Running。ls /dev/davinci*应显示/dev/davinci_manager以及每块卡对应的 device node(例如/dev/davinci0),而npu-smi info应打印该卡的状态。这两者都表明 CDI 已将 device 注入到容器中。
步骤 6:验证监控
如果在安装 Alauda Build of NPU Operator 时部署了 NPU Exporter component,operator 会自动在 operator namespace 中部署一个名为 npu-exporter-servicemonitor 的 ServiceMonitor,并将其连接到 npu-exporter Service。无需手动创建 ServiceMonitor。你可以使用以下命令进行验证:
要获取 Grafana dashboard,请按照 导入 Dashboard 的说明导入 JSON 文件。
该 JSON 文件可在 ascend-npu-dashboard 中获取。
Grafana dashboard JSON 文件中的 tags 不能包含非 ASCII 字符,需要将其编辑删除。例如:
修改后:
后续步骤
- Driver 升级与自愈 —— 如何向前升级 driver 版本,以及芯片自愈路径的工作原理。
常见问题
主机上的 npu-smi 安装在哪里?
在 v1.2.4 中,driver pod 会将 Huawei tools tree 预置到 /var/lib/Ascend/driver/,因此二进制文件位于 /var/lib/Ascend/driver/tools/npu-smi。不会创建主机 PATH 软链接(Alauda OS 会将 /usr 保持为只读)。请结合匹配的 LD_LIBRARY_PATH 调用它:
如果你希望使用一个可通过 PATH 直接访问的命令,可以在可写位置(例如 /opt/bin/npu-smi)编写一个小型 wrapper,用于导出 LD_LIBRARY_PATH 并执行真实的二进制文件。
工作负载 pod 还需要 runtimeClassName: ascend 吗?
不需要。v1.2.4 使用 CDI 进行 device injection:只需请求 huawei.com/Ascend910(或 Ascend310P)即可。现有清单如果仍然设置了 runtimeClassName: ascend 也可以继续工作——保留该 RuntimeClass 是为了向后兼容——但新的清单不再需要它。
卸载 Alauda Build of NPU Operator 时需要注意什么?
卸载 operator 会移除 driver DaemonSet,但已经加载到主机 kernel 中的 driver modules 会保持加载状态——执行 rmmod 可能会使芯片处于无法恢复的状态。若要从主机上彻底移除 driver,请在卸载 operator 后重启节点;由于 DaemonSet 已被移除,modules 不会自动重新加载。
如有需要,可以手动清理已预置到主机的文件:
请仅在 operator 及其 driver pod 已被移除、并且节点已经重启之后再执行这些操作(如果你本来就计划重启,则可在重启前执行)。