GPU/NPU 多租户共享实操对比
单张物理卡给多个任务/租户共享,是政企多租户、教学实训、推理密集场景的核心诉求。CubeStudio 在不同算力卡上支持的切分路线不同,本篇横向对比 NVIDIA vGPU(HAMi)、海光 vDCU(两条路线)、昇腾 vNPU(静态) 与 MIG,讲清各自的切分机制、平台侧配置与适用场景。各方案的完整部署步骤见对应子篇,本篇只做机制对比与选型,不重复步骤。
四条切分路线一览
| 维度 | NVIDIA vGPU(HAMi) | 海光 vDCU · HAMi 动态 | 海光 vDCU · 驱动层静态 | 昇腾 vNPU(静态) |
|---|---|---|---|---|
| 切分方式 | 显存 + 算力按百分比动态切分 | 显存(dcumem) + 算力(dcucores)动态切分 |
hy-smi virtual 手动静态切分(可按算力单元/显存不均匀分) |
npu-smi 模板静态切分(如 vir05_1c_16g) |
| 平台配置 key | vgpu |
vdcu |
vdcu1 |
vnpu |
| K8s 资源名 | nvidia.com/vgpu |
hygon.com/dcunum(+dcumem/dcucores) |
hygon.com/dcu-share-30c-16g |
huawei.com/Ascend910-5c.1cpu.16g(按规格) |
| 与整卡混用 | 独立 vGPU 池 | 独立(节点标签 dcu=on) |
支持,插件 RESOURCE_REGISTER_STRATEGY=mixed 与物理卡混用 |
独立 |
| 单 Pod 占用 | 可申请小数卡(如 0.5) |
1(vdcu),规格由 dcumem/dcucores 定 |
1(vdcu1) 或自定义简称 |
一个 Pod 只能占一张 vNPU |
| 依赖组件 | HAMi(第四范式,CUDA 层拦截) | 海光版 HAMi device-plugin | 海光 dcu-device-plugin(驱动层) | Ascend device-plugin(presetVirtualDevice=true) |
| 详细步骤 | NVIDIA vGPU 切分虚拟化 | 海光 DCU(5.2 节) | 海光 DCU(5.1 节) | 昇腾 vNPU 虚拟化 |
资源名与配置键均来自
install/docker/config.py的GPU_RESOURCE/VGPU_RESOURCE,详见各子篇的行号引用与国产算力选型与信创适配速查。
各方案机制要点
NVIDIA vGPU(HAMi)—— 动态、按百分比切
- 采用第四范式开源的 HAMi(CUDA 层拦截)。用户在 Notebook/Pipeline/推理服务里直接申请小数卡(如
0.5),平台按VGPU_DRIVE_TYPE把小数卡转成 K8s 资源请求:vgpu类型 →nvidia.com/gpumem-percentage+nvidia.com/gpucores(显存与算力按百分比切分)。 - 平台侧默认「只切分不超分」(
devicememoryscaling=1);申请 0 卡的容器注入GPU_NONE做隔离,防止 GPU 镜像看到并占满整机的卡。 - 另支持腾讯 vcuda(
mgpu类型)作为替代驱动方案。
海光 vDCU —— 两条路线可选
- HAMi 动态切分(
vdcu→hygon.com/dcunum):节点打dcu=on标签,部署海光版 HAMi 组件。关键:dcunum的数量值本身无意义,必须同步指定hygon.com/dcumem、hygon.com/dcucores来确定规格;只写dcunum:1而不指定显存/算力,会占满整张物理卡。 - 驱动层静态切分(
vdcu1→hygon.com/dcu-share-30c-16g):用hy-smi virtual在驱动层手动切分(支持按--vdevice-compute-units/--vdevice-memory-size不均匀切分),配合RESOURCE_REGISTER_STRATEGY=mixed可与整卡在同一节点混用。 - 注意:设备插件 v2.3.0 同时支持标准模式和 MIG,但开启 MIG 后 vDCU 虚拟化不可用,且官方即将弃用 MIG。
昇腾 vNPU —— 模板静态切分
- 主机用
npu-smi set -t create-vnpu按模板(如vir05_1c_16g,1/4 颗粒度)静态切出 vNPU,device-plugin 加-presetVirtualDevice=true,平台vnpu资源名按实际切分规格填写。 - 限制:一个 Pod 只能占用一张 vNPU。若用 MindX DL 动态虚拟化,则无需提前手动创建 vNPU,运行任务时自动按需创建。
NVIDIA MIG(对照)
- MIG 是 NVIDIA 物理层虚拟化(A100/H100 等),K8s 层无感知,平台侧对应
mig→nvidia.com/mig-1g.5gb。与 HAMi 软件切分是两种不同层次的方案:MIG 硬隔离但规格固定,HAMi 更灵活可动态。
平台侧统一用法
无论哪种卡,任务里占用资源都用「数量(资源简称)」写法,括号内简称就是 GPU_RESOURCE 里的 key:
- 整卡:
1(gpu)、1(dcu)、1(npu910) - 共享/虚拟化:NVIDIA 小数卡
0.5;海光1(vdcu)(HAMi)/1(vdcu1)(驱动层);昇腾按vnpu资源名占用
怎么选(按诉求对号入座)
- 要动态、按百分比弹性切显存+算力(多租户潮汐明显、想提升利用率)→ NVIDIA 选 vGPU(HAMi);海光选 vDCU · HAMi 动态。
- 要让虚拟卡与整卡在同一节点混用(部分任务整卡训练、部分共享推理)→ 海光选 vDCU · 驱动层静态(
mixed策略)。 - 昇腾平台 → 用静态 vNPU(注意一 Pod 一卡),或上 MindX DL 动态虚拟化。
- 需要硬件级硬隔离、规格固定可接受(NVIDIA A100/H100)→ 用 MIG。
- 海光同时想用 MIG 与 vDCU → 不行,二者互斥且 MIG 即将弃用,优先 vDCU。
具体切分颗粒度、显存/算力规格与性能表现以各厂商官方资料与实测为准,本篇只对比机制与平台配置,不含性能数据。
常见问题
- Q:国产 GPU 能像英伟达 vGPU 那样把一张卡切给多个人用吗?
A:可以。海光 DCU 提供 HAMi 动态切分(
vdcu,按dcumem/dcucores定规格)和驱动层静态切分(vdcu1,可与整卡混用);昇腾提供静态 vNPU(一 Pod 一卡)。 - Q:海光 vDCU 用 HAMi 时只写数量为什么占满整卡?
A:
hygon.com/dcunum的数量值无意义,必须同时指定hygon.com/dcumem和hygon.com/dcucores,否则一块 vDCU 会占用整张物理卡。 - Q:昇腾一个 Pod 能占多张 vNPU 吗? A:不能,一个 Pod 只能占用一张 vNPU;需要更多算力请占整卡或用多 Pod。
- Q:海光开了 MIG 还能用 vDCU 吗? A:不能,开启 MIG 后 vDCU 虚拟化不可用,且 MIG 即将弃用,建议直接用 vDCU。
各方案完整部署步骤见:NVIDIA vGPU · 海光 DCU · 昇腾 vNPU;国产算力整体选型见国产算力选型与信创适配速查。