当您使用 GPU 进行模型推理时,您希望获得尽可能高的性价比。了解利用率是关键——高 GPU 利用率意味着需要更少的 GPU 来处理高流量工作负载。您可以使用一些手段来提高利用率,例如更大的批量大小和针对服务优化的模型引擎。您可以在工作区中每个模型的“指标”选项卡中衡量这些更改的影响。
GPU 利用率衡量的是工作负载期间 GPU 资源的使用量。在运行 ML 模型时,我们希望最大限度地提高 GPU 利用率,以降低服务高流量模型端点的成本。如果每个 GPU 的性能更高,则能够使用更少的 GPU 来处理相同的流量,从而节省模型托管成本。
想象一下,你和整个团队(假设有 12 个人)在办公室。你们都需要去参加城镇另一边的活动,所以你们预订了几辆 Uber。如果每辆车坐 4 个人,你只需要叫 3 辆车。但如果每辆车只有 2 或 3 个人,你就需要更多车了——可能会花费两倍的钱。
就像这个拼车比喻只有在人数众多的情况下才有意义一样,GPU 利用率在高流量工作负载下变得非常重要。当您为模型处理如此多的请求时,您必须启动额外的实例来处理负载,您需要确保您支付的每个实例都在做尽可能多的工作。
一、如何测量 GPU 利用率
对于 GPU 利用率,有三个主要统计数据需要考虑:
计算使用情况:GPU 运行内核的时间百分比是多少,空闲的时间百分比是多少?
内存使用情况:推理期间有多少 GPU 的 VRAM 处于活动状态?
内存带宽使用情况:有多少可用带宽用于将数据发送到计算核心?
当我们谈论提高 LLM 的 GPU 利用率时,我们几乎总是指增加计算使用率。这是因为内存带宽通常是推理速度的瓶颈,而计算能力可能会被搁置。虽然总体 VRAM 容量限制了模型大小和并发提示的数量,但它通常不是我们试图增加的使用量。
运行模型的某些部分受计算限制,这意味着性能瓶颈在于 GPU 计算值的速度。一个受计算限制的过程是 LLM 的预填充阶段,在此阶段,模型处理完整提示以创建其响应的第一个标记。
但LLM 推理的大部分内容都受内存限制。在第一个 token 之后,LLM 的大部分生成过程都受内存限制,这意味着 GPU 的 VRAM 上的带宽是限制 token(或图像、转录、音频文件等)生成速度的因素。
鉴于大多数 LLM 推理都受到内存传输限制,我们寻找增加计算利用率的策略,以便我们可以对访问的每个字节内存运行更多计算。
二、如何提高 GPU 利用率
通常,您可以通过在推理期间增加批处理大小来提高 GPU 利用率。批处理大小决定了 LLM 中同时处理的用户输入数量。更大的批处理大小可以让模型使用更多的计算资源,即使在内存受限的情况下也是如此。从 VRAM 读取的每个模型权重都会同时应用于更多输出,从而增加每字节带宽可以使用的计算量。
增加批处理大小可以提高吞吐量,吞吐量是衡量 GPU 实例每秒可以处理多少请求的指标。但是,增加吞吐量通常会使延迟变得更糟,这意味着用户必须等待更长时间才能获得模型输出。在尝试最大化利用率时,管理这种权衡很重要。
一旦多个实例的利用率都很高,就值得考虑切换到更强大的 GPU 类型。例如,从 A100 切换到 H100可以节省 20-45% 的工作负载,这些工作负载的利用率很高,流量足以需要多个 A100 GPU。
扩展我们的拼车比喻,切换到 H100 就像为您的 12 人团体叫一辆 Uber XL 车——一辆车有 6 名乘客,您只需要两辆车,这样即使 XL 的车费稍微贵一些,也能节省更多钱。
三、如何跟踪 GPU 利用率
在工作区中,您可以查看每个部署模型的计算和 VRAM 容量(而非带宽)的 GPU 利用率。这些图表按时间戳与流量和自动缩放图表对齐,因此您可以准确地看到实际使用情况如何影响利用率。
在调整模型优化和批量大小时,使用这些指标来查看每个更改对 GPU 利用率的影响。