本文深入分析了 NVIDIA GPU 在 AI 场景下的利用率问题,系统梳理了 MPS、MIG、CUDA 劫持和内核拦截等业界隔离方案,并基于 NVIDIA 开源驱动提出了 B 站自研的 BGM 内核隔离方案,通过修改 TSG 时间片实现算力与显存的精细隔离。
📝 详细摘要
文章首先指出 AI 场景下 GPU 利用率普遍低下的问题,并从空间和时间两个维度阐述了 GPU 算力切分的思路。接着,文章详细介绍了 CUDA 计算软件栈,为理解后续隔离方案奠定基础。在业界方案部分,文章分析了 NVIDIA 官方的 MPS(多进程服务)和 MIG(多实例 GPU)方案,指出其黑盒、静态、灵活性差等缺陷;同时介绍了腾讯 GaiaGPU 为代表的 CUDA 劫持方案和百度、阿里等采用的内核拦截方案,并指出劫持方案缺乏反馈机制、内核拦截方案维护成本高的问题。针对这些痛点,文章重点介绍了 B 站自研的 BGM(bilibili GPU Manager)内核隔离方案。该方案利用 NVIDIA 开源驱动,通过内核模块联动 Cgroup 子系统,在驱动层直接修改显存总量信息和 TSG(时间片组)的时间片配置,实现了显存和算力的精细隔离。文章通过 TensorFlow 基准测试验证了该方案的有效性,在 2 Pod 和 4 Pod 混跑场景下,吞吐比与算力配置基本一致。最后,文章指出了当前方案作为时分复用的局限性,并展望了未来在抢占模式和调度策略上的优化方向。
💡 主要观点
- GPU 利用率低下的核心问题在于空间和时间维度的资源浪费。 空间上,单次任务无法占满全部 GPU 核心;时间上,任务切换存在等待开销。隔离技术旨在通过空分(硬件虚拟化)或时分(时间片管理)来提升资源复用率。
💬 文章金句
- 在空间维度上切分算力,即空分方案,该方案着眼于在 GPU 资源核心的极致挖掘,通过实现多个任务并行运行,目的是充分利用图 1 中的 idle 部分的算力,提升 GPU 资源的饱和度利用。
- 在时间维度上切分算力,即时分方案,该方案聚焦于任务的时间管理,通过对时间片的拦截,有效地减少任务切换所需要的等待时间,从而保障业务 Qos 的高标准。
- 相对于各类劫持,直接在驱动层进行参数和结果的修正,无疑是更加透明和高效的。
- 通过给高优任务大的时间片,低优任务小的时间片,一方面可以实现让高优任务尽可能在一个时间片完成任务;另一方面,也可以减小高优任务等待切换的时间;这样,可以有效地提升高优任务的性能,并减小受干扰程度。
📊 文章信息
AI 初评:88
来源:哔哩哔哩技术
作者:哔哩哔哩技术
分类:软件编程
语言:中文
阅读时间:27 分钟
字数:6504
标签: GPU 隔离, NVIDIA, CUDA, BGM, 算力隔离