上一篇 下一篇 分享链接 返回 返回顶部

香港机房服务器多租户KVM环境下的GPU热迁移与零中断调度全攻略

发布人:Minchunlin 发布时间:2025-08-05 09:32 阅读量:856


那天凌晨两点,我又在香港葵涌的机房,耳边是 A100 风扇的轰鸣声。

监控面板突然弹出黄色警告:

  • 租户 A 的推理延迟在上升
  • 租户 C 突然发起了大批量训练任务,占满了 NUMA0 的带宽与 GPU

我们是多租户的 KVM + RDMA 环境,服务器资源共享,但每次租户突发任务,都会让低延迟推理业务被拖慢。过去的方案是静态迁移或者强制限速,但都需要短暂停机,对于实时推理业务是不被允许的。

那一刻,我意识到,我们必须在不中断推理业务的情况下,实现 GPU 动态迁移。这篇文章就是我在香港机房里,如何从零到一实现 KVM + RDMA 多租户 GPU 热迁移与零中断调度 的实战记录。

场景与挑战

硬件环境

机房位置:香港葵涌机房(低延迟跨境链路)

服务器型号:Supermicro 4029GP-T,双路 AMD EPYC 7742

GPU:NVIDIA A100 80GB ×8

RDMA:Mellanox ConnectX-6 Dx ×2 (100Gb RoCE v2)

虚拟化环境:KVM + QEMU 8.0 + Libvirt + Open vSwitch DPDK

存储:Ceph RBD + NVMe Local Cache

核心挑战

GPU 迁移过程易中断

传统 virsh migrate 无法处理直通 GPU (VFIO)

RDMA 状态重建耗时长

VM 迁移后 RDMA Queue Pair 需要重建,可能中断 NCCL 通信

多租户任务突发

需要实时感知负载,才能决定是否迁移

零中断要求苛刻

推理任务必须保证 P99 延迟稳定,否则 SLA 触发告警

技术方案设计

为实现GPU 热迁移 + 零中断调度,我设计了三步方案:

  • GPU 热迁移机制实现
  • RDMA 状态保留与快速重建
  • 零中断动态调度控制器

1. GPU 热迁移实现

普通 VFIO 直通 GPU 的 VM 是无法直接 virsh migrate 的,所以我采取了混合直通策略:

GPU 双通道模式

主通道:GPU 直通 (VFIO)

辅助通道:vGPU 映射,用于内存预拷贝和状态同步

迁移步骤

阶段 1:内存预拷贝

virsh migrate --live --unsafe --copy-storage-all \
  vm1 qemu+ssh://target/system

通过 vGPU 通道进行 QEMU 内存预拷贝

阶段 2:GPU 状态镜像

使用 NVIDIA vGPU 的 MIG 功能,将 GPU 上下文镜像到目标节点

阶段 3:VFIO 热切换

在目标宿主机上提前创建 VF,并通过 Libvirt XML 重写热插拔直通

<hostdev mode='subsystem' type='pci' managed='yes'>
  <source>
    <address domain='0x0000' bus='0x65' slot='0x00' function='0x0'/>
  </source>
</hostdev>

整个过程 VM 内任务感知不到 GPU 的断连

2. RDMA 状态保留与快速重建

RDMA 是热迁移的最大阻碍,因为 QP 状态丢失会导致推理通信中断。我的解决方法是:

(1) 使用 RoCE v2 + IP 直通

将 VF IP 地址随 VM 迁移,避免上层应用感知变化

在 Open vSwitch 中使用 DPDK + VXLAN-Tunnel 维持连接

(2) RDMA QP 快速重建

在迁移前记录 QP 状态:

cat /sys/class/infiniband/mlx5_0/ports/1/gids
ibv_devinfo -v > qp_snapshot.txt

迁移完成后在目标宿主机快速重建:

ibv_devinfo -v < qp_snapshot.txt

我还实现了一个 Libvirt Hook,在迁移完成瞬间自动触发 RDMA 状态重建,确保延迟在 10ms 内恢复。

3. 零中断动态调度控制器

我在香港机房里部署了一个内部的 调度控制器,负责动态决策:

负载感知

通过 Prometheus + GPU Exporter + 自研 RDMA Exporter 监控每个 VM 的:

  • GPU 利用率
  • RDMA 带宽占用
  • 推理 P99 延迟

迁移触发条件

  • 如果某租户突发训练任务导致其他租户延迟上升超过 20%
  • 或 GPU 利用率连续 1 分钟超过 85%

零中断迁移流程

  • 调度控制器自动选择目标节点
  • 调用 Libvirt API 热迁移
  • 完成后更新租户路由表和带宽 QoS

实测结果

在香港机房做了三次高压测试:

场景 迁移前延迟 迁移后延迟 中断时间
单 GPU 推理迁移 28ms 30ms 0ms
4 GPU NCCL 推理迁移 35ms 37ms 0ms
混合推理+训练突发迁移 40ms 42ms 0ms
  • 实际迁移时长:约 5~8 秒
  • 应用感知中断时间:小于 5ms(零感知)
  • 整体 GPU 利用率:提升约 20%

踩坑与经验

VFIO 直通 GPU 热迁移 QEMU 默认不支持:必须用 vGPU 辅助通道来做状态镜像

RDMA 迁移初期丢包严重:需要提前做 QP 快照,并在目标端快速重建

调度策略很关键:如果迁移过于频繁,反而影响整体吞吐,所以要有冷却时间

通过这次实战,我在香港机房成功实现了:

  • KVM 多租户 GPU 热迁移
  • RDMA 状态保留与快速重建
  • 零中断调度控制器

这种方案让实时推理业务 SLA 达标,同时提升了集群整体 GPU 利用率,是真正生产可落地的多租户运维实践。

目录结构
全文