硬切分与软切分:加速器共享的两条基本路线
所有加速器共享方案,最终都要回答同一个问题:隔离边界放在硬件里,还是放在软件里。这个选择决定了其余一切。
本章要解决什么
后续数据平面各章会逐个分析 MIG、HAMi、DRA、昇腾 vNPU 等具体技术。但在逐个陷入细节之前,值得先退一步,用一个一阶模型把所有这些技术归类。这个模型只有两条路线:
- 硬切分(hard slicing):由硬件或驱动把物理设备划分成若干静态分区,每个分区拿到独占的硬件份额(计算单元、显存、缓存乃至专用引擎),边界由硬件强制执行。
- 软切分(soft slicing):物理设备保持完整,由运行时软件(通常是预加载的拦截库或驱动层调度器)在每个容器面前呈现一个受限的设备视图,并对算力、显存的使用按配额强制执行。
两条路线不是厂商之争,而是同一物理约束下的两种取舍。NVIDIA 的 MIG 与昇腾的 vNPU 模板同属硬切分;HAMi 的 libvgpu、昇腾生态的 libvnpu 与 vCANN-RT 同属软切分。理解了这一点,跨厂商的技术评估就可以用同一把尺子。
硬切分:把边界写进硬件
硬切分的本质是静态分区表。以三个典型实现为例:
- NVIDIA MIG:把一颗 GPU 按 profile 划分成最多 7 个实例,每个实例独占 SM、L2 缓存与显存带宽份额。
- 昇腾 vNPU 模板:驱动按模板(如
vir04_3c_ndvpp)把 AI Core、AI CPU、显存与 DVPP 编解码引擎一次性分区。 - Google TPU 的拓扑切分:TPU v4 及之后世代按芯片数量以矩形拓扑切分(Pod 级拓扑感知),粒度是整颗 TPU 芯片。
硬切分的共同特征:
- 隔离强度高。分区边界由硬件或驱动强制,一个分区的负载很难侵占另一个分区的资源,故障域也更小。
- 资源单位离散。只能从预定义的模板或拓扑组合里选,不能申请“8192MB 加 37% 算力”这种任意组合。
- 重配置昂贵。调整分区布局是驱动级乃至集群级的破坏性操作,通常要求设备上没有业务负载。
- 对应用透明。容器拿到的就是一个“小号设备”,不需要任何配合。
软切分:把边界写进运行时
软切分的本质是软件强制配额。同样三个典型实现:
- HAMi 的 libvgpu/libvnpu/libamvgpu:预加载进容器,拦截 CUDA/ACL/HIP 分配与查询调用,把显存与算力限制在申请值内。HAMi 2.10 新增 AMD MI300X(通过
libamvgpu.so)和 Biren 支持,并提供与 KAI Scheduler 的集成。 - 昇腾生态的拦截库:华为 vCANN-RT 的 libvruntime 与 HAMi 的 libvnpu,拦截 CANN/DCMI 调用,机制同构(时间片算力调度加显存配额)。HAMi 2.10 新增异构模式,允许模板 vNPU 与 HAMi-core 软切分节点共存在同一集群。
- 驱动层时间片:NVIDIA 与 AMD 的时间片共享,按时间轮转整个设备,粒度粗但无需拦截库。
软切分的共同特征:
- 隔离靠软件。拦截点在用户态 API 或驱动调度层,强度低于硬件分区,但远好于”不设防”的混部。
- 粒度连续。显存可以精确到 MB,算力可以按百分比,适配任意大小的负载。
- 重配置廉价。改配额就是改一个 Pod 申请,秒级生效。
- 依赖栈敏感。拦截库必须与驱动、runtime 版本配套(HAMi 在昇腾上 libvnpu 与驱动不匹配时
npu-smi会直接卡死),且通常有平台限制(如仅 ARM)。
软切分技术的最新演进(HAMi 2.10)
软切分技术在 HAMi 2.10(2026 年 8 月)中迎来了重要突破,解决了传统软切分方案的几个关键限制:
- Flexible MIG:支持动态 MIG 实例分配,无需排空或封锁节点即可更改 MIG 配置,通过 NVML 动态发现拓扑和预留实例。
- 异构调度策略组合:新的
mutex策略保证独占设备访问,修复 NUMA 排序错误,支持可组合的调度策略链(如mutex,binpack,numa)。 - 更广泛的设备支持:新增 AMD MI300X(通过
libamvgpu.so)和 Biren 加速器支持,扩展到十多种异构设备。 - 昇腾深度管理:支持同一集群内模板 vNPU 硬切分与 HAMi-core 软切分共存,新增 vNPU HAMi-core 监控。
- 调度器生态集成:通过 KAI Resource Isolator 实现 KAI Scheduler 与 HAMi-core 的集成,让调度决策与运行时隔离首次能可验证地对应。
两条路线的决策轴
把特征放回本书通用的决策轴,得到这张最小对比表(完整版含队列、配额等控制面维度,见数据平面谱系):
| 决策轴 | 硬切分 | 软切分 |
|---|---|---|
| 隔离边界 | 硬件或驱动强制 | 运行时软件强制 |
| 资源粒度 | 离散(模板或拓扑组合) | 连续(MB 与百分比级) |
| 重配置成本 | 高,需空载操作 | 低,改申请即可 |
| 性能可预测性 | 高,受邻居干扰小 | 中,时间片策略下依赖邻居负载 |
| 故障域 | 分区级 | 设备级或进程级 |
| 版本耦合 | 随驱动发布 | 拦截库与驱动必须配套 |
| 典型代表 | MIG、昇腾 vNPU 模板、TPU 拓扑切分 | HAMi libvgpu/libvnpu、vCANN-RT、时间片 |
没有哪条轴上两条路线同时取胜,这就是为什么生产系统里两者长期并存:付费多租户流量倾向硬切分换隔离与可预测性,内部弹性与开发测试倾向软切分换利用率与灵活性。混合部署(同一集群不同节点池各走一条路线)是常见且合理的选择。
一个容易忽略的推论
隔离边界的摆放位置还决定了验收方法:硬切分的隔离可以直接从设备拓扑观察到(容器看到的就是分区设备),软切分的隔离则必须通过行为验证(容器内设备视图被改写到配额、越界分配被拒绝、监控指标与申请值一致)。读者评估任何共享方案时也应如此:不要相信宣传材料,去验证容器看到什么、越界时发生什么、指标说了什么。
总结
硬切分与软切分是加速器虚拟化的一阶模型:前者把隔离边界写进硬件或驱动,换来强隔离与可预测性,代价是离散粒度与昂贵的重配置;后者把边界写进运行时软件,换来连续粒度与灵活性,代价是软件级隔离与版本耦合。后续章节的所有具体技术,MIG、HAMi、昇腾 vNPU 的三条路径、乃至 DRA 之上的共享策略,都是这两条路线在不同厂商生态里的实例化。带着这个模型去读,跨厂商的对比就不再是一堆名词,而是同一组权衡的反复出现。