HOOOS

深度解析:NVIDIA MIG 与 MPS 在算力切分上的底层隔离机制有何本质不同?

0 8 算力精算师 NVIDIAGPU虚拟化MIGMPS
Apple

在 GPU 算力虚拟化和多租户共享的场景中,NVIDIA 提供了两种主流的切分技术:MPS(Multi-Process Service,多进程服务)MIG(Multi-Instance GPU,多实例 GPU)

虽然这两者都能实现“将一块 GPU 拆给多个任务使用”的目的,但它们的底层实现逻辑、硬件隔离级别以及适用场景有着本质的区别。

简单来说,MPS 是“软件/驱动层的主动协同与逻辑复用”,而 MIG 是“芯片层面的物理硬切割”。


一、 核心机制对比:硬核切分 vs 软性共享

为了更直观地理解,我们可以先看一张底层资源维度的对比表:

维度 MPS (多进程服务) MIG (多实例 GPU)
引入代际 Kepler 时代引入,Volta 架构大幅强化 Ampere 架构(如 A100、H100)首次引入
隔离级别 逻辑隔离(进程级) 物理硬件隔离(实例级)
显存带宽隔离 无(共享显存通道,存在争抢) (物理分配独立的内存控制器和路径)
L2 缓存隔离 无(共享 L2 缓存) (L2 缓存按比例物理切分并隔离)
故障隔离 弱(一个进程 Crash 理论上可能影响整卡) 极强(单个实例 Crash 互不影响,支持硬复位)
服务质量 (QoS) 软性限制(通过比例控制延迟,无法完全避免抖动) 硬性保证(绝对的带宽与算力确定性)
最大切分数量 最多 48 个客户端进程 最多 7 个 GPU 实例 (GI)

二、 MIG(多实例 GPU):芯片微架构层面的“物理分家”

MIG 是自 Ampere 架构开始引入的硬核技术。它的本质是在硅片(Silicon)层面,将一块物理 GPU 真正划分为多个独立的“小 GPU”

1. 硬件资源的物理重组

在 MIG 模式下,GPU 的底层硬件资源(GPC、SM、内存控制器、L2 缓存、SYS 管道)被硬性解耦并重新组合。

  • GPC(图形处理集群)与 SM(流式多处理器):MIG 将物理 GPC 划分给不同的 GPU Instance (GI)。每个实例分到的 SM 是物理上固定的。
  • 内存控制器(Memory Controller)与 HBM 物理通道:这是 MIG 最强大的地方。它不仅切分了显存容量,还等比例切分了显存物理带宽。例如,一个 A100 被切分为 7 个实例,每个实例会分到专属的 HBM 通道和内存控制器。
  • L2 缓存与内部交叉开关(Interconnect crossbar):L2 缓存被物理划分为独立的片区(Slices),不同实例的请求在硬件层被路由到各自的 L2 片区,绝对不会发生跨实例的缓存挤兑(Cache Thrashing)。

2. 独立的执行管道与地址空间

每个 MIG 实例拥有自己独立的内置硬件调度器(Host Interface / Copy Engines)页表管理单元(MMU)
在操作系统看来,每个 MIG 实例就是一块挂载在 PCIe 总线上的、完全独立的 NVIDIA GPU。它们拥有独立的 GPU 物理 ID,运行在完全独立的物理地址空间中。

3. 故障隔离(Fault Isolation)

在 MIG 模式下,如果 Instance 0 上的某个 AI 任务因为内存越界、CUDA 核心挂起或者发生了严重的段错误(Segment Fault),只会导致 Instance 0 发生硬件复位(Reset),而正在运行的 Instance 1 到 6 完全不会受到任何干扰,业务零中断。


三、 MPS(多进程服务):漏斗式的“时空复用”

相比之下,MPS 的历史要悠久得多。它最初的设计目的是为了解决多进程提交 CUDA 任务时,GPU 上下文切换(Context Switch)带来的延迟和硬件利用率不足的问题

1. 软性漏斗机制:MPS Server

在没有 MPS 之前,多个进程向 GPU 提交任务,GPU 只能通过时间片轮转(Time-slicing)来切换上下文,开销极大。
MPS 引入了一个代理进程——MPS Server

  • 所有的客户端进程(Client Processes)不再直接向 GPU 发送指令,而是通过 IPC(进程间通信)将任务发送给 MPS Server。
  • MPS Server 扮演了一个“合流漏斗”的角色,将所有客户端的 CUDA Context 合并为一个单一的、共享的 CUDA Context,并统一提交给 GPU 执行。

2. 空间复用(Spatial Multiplexing)

由于共享了同一个 Context,不同的进程任务可以**同时(并跑在不同的 SM 上)**在 GPU 内执行。

  • SM 的限制:通过设置 CUDA_MPS_ACTIVE_THREAD_PERCENTAGE,你可以限制某个进程最多使用 50% 的线程(即大约 50% 的 SM)。但这是一种软性的、由硬件协同调度器(Cooperative Distributive Scheduler)强制执行的分配,并非物理绑定
  • 共享资源的无隔离
    • L2 缓存和显存带宽是完全共享的。如果 A 进程在进行大量的显存读写,B 进程即使分配到的 SM 很少,其显存访问依然会受到严重的延迟干扰(即“吵闹邻居” Neighbor Effect)。
    • 所有的进程共享同一条硬件控制管道(Command Processor)。

3. 弱故障隔离

由于所有 MPS 客户端在底层共享同一个 GPU 上下文和驱动资源,一旦某个客户端触发了可能导致 GPU 驱动挂起或硬件异常的严重错误(如未捕获的全局内存越界),整个 MPS Server 控制下的所有进程都有可能协同崩溃。


四、 核心技术痛点对比:为什么有了 MPS 还要 MIG?

我们可以用一个通俗的“租房”案例来比喻这两者的区别:

  • MPS 就像合租房(Shared Flat)
    大家共享客厅、厨房和卫生间。虽然大家可以规定“你只能占用冰箱的一层”(限制 SM 比例),但如果你的室友在厨房疯狂用水(占满显存带宽),你洗澡的水流就会变小(延迟增加增加)。更糟糕的是,如果室友不小心把厨房点了(进程崩溃),整栋房子都会受灾。
  • MIG 就像酒店式公寓(Apartment Block)
    每个房间都有自己独立的电表、水管和防盗门。你无论在房间里怎么折腾,都不会影响隔壁房间的热水流量和电力供应。隔壁哪怕失火,防火墙也能确保你的房间安然无恙。

为什么云厂商极度青睐 MIG?

在公有云和多租户(Multi-tenant)场景下,安全隔离和**服务质量保证(SLA)**是第一位的。

  • 在 MIG 之前,使用 MPS 共享 GPU 的云主机无法对客户做出强力的确定性性能承诺,因为邻居的算力行为会通过 L2 缓存和内存带宽直接“投影”到你的任务上。
  • MIG 彻底解决了这一痛点。它允许云厂商将一块 H100 物理切分成 7 个规格标准、性能绝对稳定的“微型云 GPU”转租给不同的客户,且不用担心客户之间的安全窥探和故障波及。

五、 实战落地:我们该如何选择?

这两者并不是非此即彼的对立关系,在实际的 AI 基础设施建设中,它们各有其不可替代的舞台:

1. 优先选择 MIG 的场景:

  • 多租户公有云/私有云平台:用户之间互不信任,对安全隔离、故障隔离有硬性要求。
  • 严苛的生产环境推理(Inference)集群:对单次推理的延迟(Latency)抖动极其敏感,必须保证 99% 的响应时间(Tail Latency)稳定。
  • 混合负载部署:一块 GPU 上同时跑轻量训练、推理以及数据预处理,需要物理上互不干扰。

2. 优先选择 MPS 的场景:

  • 单用户/单团队的超大规模并行计算:比如 MPI 科学计算,或者单个任务需要启动几十个进程同时处理小数据块。
  • 旧代际 GPU 的复用:在不支持 MIG 的旧架构显卡(如 V100、T4,或消费级显卡 RTX 3090/4090)上,MPS 是实现空间复用、榨干 GPU 剩余算力的唯一手段。
  • 微服务架构的 AI 接口服务:多个完全可控的内部微服务共同使用一块 GPU,内部不存在恶意攻击或恶意资源挤兑。

进阶玩法:在支持的架构上(如 Ampere/Hopper),你甚至可以两项技术叠加使用——先用 MIG 在底层切分出物理隔离的实例,再在某个特定的 MIG 实例内部开启 MPS,以进一步提升该实例内部小任务的并发吞吐量。这套组合拳目前正在成为主流 AI 容器云平台的标准架构。

点评评价

captcha
健康