在人工智能和深度学习领域,GPU(图形处理器)已成为不可或缺的计算工具。随着深度学习模型的规模和复杂性的增加,单个 GPU 已经难以满足所有训练需求,GPU 共享技术应运而生,成为提高训练效率的重要手段。本文将深度剖析 GPU 共享技术,并对其进行总结。

GPU 共享技术概述
GPU 共享技术是指在同一张 GPU 卡上同时运行多个任务。这种技术的核心优势在于提高资源利用率、减少任务排队时间、增强公平性,并降低总任务结束时间。GPU 共享的实现涉及多个层面,包括 GPU 架构、CUDA 编程、内存管理、机器学习框架、集群调度、通信协议等。
GPU 共享的关键技术
1. 资源隔离
资源隔离是 GPU 共享技术的基础。它要求共享组件有能力限制任务占据算力(线程/SM)及显存的比例,甚至限制总线带宽。资源隔离的方法通常包括劫持调用和硬隔离两种。
- 劫持调用:通过劫持 CUDA Driver API 的调用来限制任务对 GPU 资源的访问。例如,当任务申请的显存超过配置值时,系统会报错。
- 硬隔离:通过物理或逻辑手段将 GPU 资源划分为多个独立的部分,分配给不同的任务。例如,NVIDIA 的 MIG(Multi-Instance GPU)技术可以在硬件层面对资源进行隔离。
2. 并行模式
并行模式决定了多个任务如何在 GPU 上运行。目前主要有两种模式:
- 分时复用:通过划分时间片,让不同的任务在不同的时间片内运行。这种模式实际上是并发的,因为同一时间只有一个任务在跑。
- 合并共享:将多个任务合并成一个上下文,允许它们同时运行,实现真正的并行。这种方法需要更复杂的资源管理和任务调度算法。
GPU 共享的优化方法
1. 显存分配优化
深度学习训练需要大量显存,合理分配显存是优化 GPU 共享的关键。可以通过采用分层内存管理、共享内存池等技术来实现。
2. 线程块分配优化
合理分配线程块可以避免任务之间的互相干扰,提高训练效率。动态线程调度和负载均衡是实现线程块分配优化的重要手段。
3. 计算线程管理优化
优化计算线程的管理可以实现更高效的并行计算。线程池、任务队列等技术可以有效管理计算线程,提高训练速度。
现有技术方案
1. MPS(Multi-Process Service)
概述:
MPS 是 NVIDIA 推出的多进程服务,允许多个 CPU 进程共享同一 GPU context。它通过 CUDA API 实现,利用 GPU 上的 Hyper-Q 能力,允许多个进程并发执行 kernel 和 memcpy 操作,从而最大化 GPU 利用率。
特点:
- 上下文共享:MPS 通过共享 CUDA context,允许多个进程在同一 GPU 上并发执行,减少了上下文切换的开销。
- 性能提升:在没有 Hyper-Q 的 GPU 上,命令必须顺序执行;而在支持 Hyper-Q 的 GPU 上,命令可以并发执行,提高了 GPU 的利用率和性能。
- 配置灵活:用户可以根据需要配置 MPS 的资源占用量,如通过
nvidia-cuda-mps-control工具设置默认活动线程百分比等。
应用场景:
MPS 适用于需要同时运行多个 GPU 密集型任务的环境,如深度学习训练、高性能计算等场景。
2. MIG(Multi-Instance GPU)
: MIG 是 NVIDIA 推出的多实例 GPU 技术,允许将单个物理 GPU 在硬件级别划分为多个独立的 GPU 实例。每个实例都拥有自己的专用计算资源、内存和带宽。

