在AI基础设施中,一张高端GPU每小时产生的计算成本可能远高于普通CPU服务器,因此GPU没有持续承担有效计算任务,很快就会转化为明显的资源浪费。但监控面板上的GPU利用率下降,并不意味着硬件一定存在故障,也不意味着简单增加GPU数量就能解决问题。GPU等待数据、等待通信、等待任务、等待CPU准备输入,甚至模型本身的计算特征,都可能导致利用率下降。
理解GPU空闲,首先要区分训练、推理和任务调度三个层面。训练任务通常具有较长的计算流水线,推理服务则面对大量不连续的用户请求,而AI平台还需要在多个任务之间分配昂贵的GPU资源。不同场景下的“空闲”原因完全不同。
在多GPU训练中,通信等待是常见原因之一。一个分布式训练任务通常需要多个GPU协同完成计算,并在特定阶段交换梯度或者其他中间数据。例如数据并行训练中的AllReduce需要各个GPU交换梯度。当某些GPU计算较慢,或者GPU之间的通信链路成为瓶颈时,其他GPU就可能等待同步完成。
这也是NCCL以及高速GPU互联技术重要的原因。NVIDIA GPU集群通常会根据硬件拓扑选择PCIe、NVLink以及网络互联路径。跨服务器训练还可能依赖InfiniBand或者基于RDMA的以太网络。网络带宽、延迟、拓扑结构、NIC与GPU之间的连接关系都会影响通信效率。如果计算时间越来越短,而梯度同步时间越来越长,那么继续增加GPU数量反而可能降低扩展效率。
另一个容易混淆的问题是显存带宽。GPU执行计算时需要不断从HBM或者其他显存系统读取和写入数据。当程序受到显存带宽限制时,计算核心可能无法保持满负载。此时GPU监控工具可能显示较低的某些计算利用率,但问题本质并不是GPU没有任务,而是程序处于内存受限状态。
因此,不能看到GPU利用率只有50%就直接判断“还有一半GPU没有使用”。对于不同模型,计算利用率、显存利用率、显存带宽、SM占用率以及功耗之间可能存在完全不同的关系。分析GPU效率时,需要结合多个指标,而不是只看一个百分比。
推理系统的GPU空闲又是另一种情况。在线大模型服务通常面对的是大量大小不同、到达时间不同的请求。如果请求数量不足,GPU自然会等待;如果请求虽然很多,但调度器不能有效地把请求组织成合适的批次,也可能出现计算资源没有充分利用的情况。
动态批处理因此成为推理服务的重要技术。系统可以把短时间内到达的多个请求组合起来,让GPU一次处理更多数据,提高吞吐量。但批处理并不是越大越好。批次过大会增加排队时间和显存压力,从而损害用户最关心的延迟。在线推理需要在吞吐量、首Token延迟和单请求完成时间之间找到平衡。
大语言模型推理还涉及KV Cache。随着上下文长度和并发请求增加,KV Cache会占用大量显存。显存不足时,系统可能需要降低并发量、进行缓存管理或者采用其他内存优化策略。像vLLM等推理框架通过连续批处理以及KV Cache管理等机制,提高GPU在动态请求环境下的使用效率,但具体效果仍然取决于模型、请求长度和硬件配置。
CPU和GPU之间的数据传输同样可能形成瓶颈。数据预处理速度不足时,GPU可能等待下一批训练数据;模型加载、数据读取或者网络存储速度不足时,GPU也可能出现明显等待。因此训练系统通常会使用多进程数据加载、预取、异步数据传输以及流水线设计,让CPU准备下一批数据的同时,GPU继续处理当前任务。
AI平台还有一种常见的GPU浪费方式,就是资源分配本身不合理。例如一个集群中存在大量小型推理任务,但调度系统按照整张GPU分配资源,可能导致一部分GPU长期只有很低的实际利用率。反过来,如果某些任务长期占满GPU,而其他任务在队列中等待,也会形成整体资源利用率和任务等待时间之间的矛盾。
Kubernetes等容器平台可以通过GPU资源调度管理AI工作负载,但GPU资源调度并不是简单设置一个CPU式的request和limit就能解决所有问题。对于支持GPU共享的硬件和软件环境,还可以采用时间切片、MIG等机制,把一张物理GPU提供给多个工作负载使用。不过,这些技术会带来性能隔离、显存容量以及任务类型方面的限制,并不适合所有模型。
减少GPU空闲的另一个重要方法是任务调度。AI平台可以根据任务优先级、GPU型号、显存需求、预计运行时间以及数据所在位置,把任务放到合适的节点。训练任务可能更适合占用整机或者整组GPU长时间运行,而小型推理任务则可以采用更细粒度的资源共享。
对于批处理型AI任务,队列系统尤其重要。与其让大量GPU因为任务没有准备好而等待,不如提前把任务排队,并根据资源状态动态分配。训练完成后立即释放GPU,也比让实例保持运行状态等待下一项任务更加经济。
存储系统同样不能被忽略。大型模型通常拥有数十GB甚至数百GB的数据和参数文件,如果每次启动任务都从远程存储完整读取模型,GPU可能在模型加载期间长期处于等待状态。通过本地缓存、共享高速存储、合理的数据预取以及模型权重缓存,可以缩短启动时间和数据等待时间。
不过,优化GPU利用率并不意味着必须追求100%。一个在线推理系统如果为了提高GPU利用率而不断扩大批次,可能导致请求延迟明显增加。一个训练集群如果为了提高利用率而把所有GPU塞满,也可能导致重要任务无法及时启动。对于商业AI平台,更合理的目标通常是单位成本产生更多有效计算,同时满足任务完成时间和服务质量要求。
这也是为什么AI基础设施监控不能只有一个GPU利用率指标。系统至少需要同时观察GPU计算利用率、显存使用量、显存带宽、功耗、温度、PCIe或NVLink通信情况、网络吞吐量、存储IO、任务队列长度以及请求延迟。对于分布式训练,还应该观察通信时间与计算时间的比例;对于大模型推理,则应该关注请求到达率、批次大小、首Token延迟、Token生成速度以及KV Cache使用情况。
如果发现GPU长期低利用率,排查顺序也不应该直接从“换更强GPU”开始。首先应该确认任务是否持续提供工作,其次检查CPU、数据加载和存储是否跟得上,再检查GPU显存和内存带宽是否成为瓶颈,然后分析多GPU通信和网络拓扑,最后才考虑增加GPU数量或者更换硬件。
高昂GPU资源的价值,不在于监控面板上显示一个漂亮的利用率数字,而在于每一块GPU是否持续完成有价值的计算。训练系统需要减少同步和数据等待,推理系统需要优化批处理和缓存,集群平台需要提高调度效率,基础设施则需要保证网络和存储能够跟上计算速度。只有把这些环节放在同一条计算流水线上分析,才能知道GPU究竟是在“工作”,还是只是在等待下一项工作。
GPU 空闲时间意味着什么,AI 平台如何减少昂贵计算资源的等待
喜欢这篇报道?
使用下面的功能,方便以后继续阅读和分享 MNewsTV
关于文章收藏
收藏不需要注册帐号,收藏信息仅保存在当前浏览器中。
删除收藏请进入「我的收藏」进行管理。
分享 Facebook | X | WhatsApp | LinkedIn
捐助(Paypal): https://www.paypal.me/observeccp 订阅中国观察电报 Telegram : https://t.me/s/ObserveCCP