国产算力接入全流程 SOP
把「将一款国产 GPU/NPU 接入 CubeStudio」拆成 8 步可照做的流程,附命令级操作与平台侧配置位置。通用流程与各厂商子篇见 国产GPU与ARM64适配总览。
一、为什么流程统一
CubeStudio 站在 Kubernetes 之上:各厂商 device-plugin 把算力卡注册成 K8s 扩展资源(如 nvidia.com/gpu、huawei.com/Ascend910、hygon.com/dcu),平台只需在 GPU_RESOURCE 登记资源名,即可把卡纳入统一算力池(项目组配额、计量计费、监控告警、多资源组全部生效)。因此接入一款新卡 = 打通「厂商侧三件套(驱动/运行时/插件)」+「平台侧一行资源名配置」。
以昇腾为例,厂商侧一套完整组件(install/kubernetes/ascend/readme.md):
| 组件 | 作用 |
|---|---|
| 容器运行时(Ascend Docker Runtime) | 为容器自动挂载卡设备与依赖 |
| Device Plugin | 向 K8s 上报卡资源、设备发现/分配/健康检查 |
| Exporter(NPU Exporter) | 采集利用率、显存、温度、电压等指标 |
| Volcano | 卡亲和调度、gang scheduling、故障重调度 |
| Ascend Operator / HCCL Controller | 分布式训练生命周期与集合通信配置生成 |
二、8 步通用接入流程
- 算力卡驱动:按厂商要求在每台算力节点安装驱动;昇腾装驱动加
--install-for-all并装 CANN,npu-smi info验证;海光装 rock 驱动后lsmod | grep hydcu确认模块加载。 - 容器运行时:使卡可被 docker 与 containerd 调用。昇腾 Ascend Docker Runtime:
容器验卡:./Ascend-docker-runtime_6.0.0_linux-aarch64.run --install # docker ./Ascend-docker-runtime_6.0.0_linux-aarch64.run --install --install-scene=containerd \ --config-file-path /etc/containerd/config.toml # containerd stat -fc %T /sys/fs/cgroup/ # 确认 cgroup 版本并按文档调整docker run -it --rm -e ASCEND_VISIBLE_DEVICES=0 <镜像> /bin/bash后npu-smi info应只见 1 卡。 - K8s device-plugin:
kubectl apply -f device-plugin-910-v6.0.0.yaml(改镜像名、nodeSelector: gpu-type: NPU910、拉取策略IfNotPresent)。成功标志:kubectl describe node的Allocatable出现huawei.com/Ascend910: 8。 - 资源占用约定:明确①资源名;②禁止 Pod 占卡的环境变量(混用机器必需);③指定「第 n 张卡」的可见设备环境变量(昇腾
ASCEND_VISIBLE_DEVICES、海光HIP_VISIBLE_DEVICES、NVIDIANVIDIA_VISIBLE_DEVICES)。 - 监控组件:部署厂商 exporter 接入 Prometheus,配置对应 Grafana 看板。详见 国产算力监控与统一纳管。
- 平台配置:在
install/docker/config.py的GPU_RESOURCE(:1193)加入该卡 K8s 资源名;按需设置DEFAULT_GPU_RESOURCE_NAME(:1210,默认nvidia.com/gpu)。 - 环境镜像:按厂商开发环境镜像(昇腾从 AscendHub 获取),配置为 notebook(
NOTEBOOK_IMAGES)与 pipeline 运行镜像。 - 框架包:按厂商 TF/PyTorch/MindSpore 安装方法,在业务代码中安装并跑通最小示例。
GPU_RESOURCE 内置映射(14 项)
| key | K8s 资源名 | 卡 |
|---|---|---|
gpu / mig |
nvidia.com/gpu / nvidia.com/mig-1g.5gb |
NVIDIA 整卡 / MIG |
npu310 / npu310p / npu910 |
huawei.com/Ascend310 / Ascend310P / Ascend910 |
华为昇腾 |
vnpu |
huawei.com/Ascend910-5c.1cpu.16g |
昇腾静态虚拟化 |
dcu / vdcu / vdcu1 |
hygon.com/dcu / dcunum / dcu-share-30c-16g |
海光整卡 / HAMi / 驱动层虚拟化 |
mlu370 |
cambricon.com/mlu370 |
寒武纪 370 |
mx |
metax-tech.com/gpu |
沐曦 C500 |
xpu |
kunlunxin.com/xpu |
昆仑芯 |
mthread |
mthreads.com/gpu |
摩尔线程 |
gcu |
enrigin.com.cn/gcu |
江原 GCU |
命名约定:
GPU_RESOURCE的 key 必须小写,主机gpu-type节点标签必须大写(如NPU910)。平台按gpu-type标签调度到对应机型节点。
三、任务侧申请写法
统一用「数量(资源简称)」,括号内为 GPU_RESOURCE 的 key:整卡 1(gpu) / 1(npu910) / 1(dcu) / 2(mlu370);虚拟化 1(vdcu)(另配显存/算力)、按 vnpu 占用、NVIDIA 小数卡 0.5。
四、禁用卡 / 指定卡(混用机器)
对 CPU+GPU 混用机器,不申请卡的容器需注入厂商「屏蔽」环境变量,避免偷占卡。平台内置 GPU_NONE(install/docker/config.py:1215):
GPU_NONE = {
"gpu": ['NVIDIA_VISIBLE_DEVICES', 'none'],
"dcu": ['HIP_VISIBLE_DEVICES', '-1'],
"npu": ['ASCEND_VISIBLE_DEVICES', 'void'],
"npu910": ['ASCEND_VISIBLE_DEVICES', 'void'],
}
接入新卡时按同样思路补入其可见设备环境变量;指定「第 n 张卡」同样用这组变量实现。
五、昇腾落地实例
- 驱动 + CANN(
--install-for-all,npu-smi info验证);2. 安装 Ascend Docker Runtime,docker info确认默认运行态为 ascend;3. 将 docker NPU device 适配云原生使 K8s 可识别;4. 明确 NPU 资源占用方式并设机器卡型gpu-type: NPU910;5. 部署 npu-exporter 与监控看板;6.GPU_RESOURCE加huawei.com/Ascend910(keynpu910);7. 构建 NPU 开发/调试镜像;8. 构建昇腾 MindIE 推理镜像并在 K8s 提供 API。
昇腾 910 的 device-plugin 无共享占用模式,单卡共享需挂载
/usr/local/Ascend/driver/与npu-smi到容器,或用静态 vNPU。昇腾另提供 Ascend Operator、HCCL Controller、故障重调度、临终 CheckPoint(MindIO ACP/TTP)等进阶能力。详见 华为昇腾 NPU 子目录。