AI 监控面板上 GPU 利用率只有三成,钱却按十成花——先别急着怪显卡,利用率低十有八九是喂不满它。GPU 利用率是怎么提上去的?这篇文章按「先读懂数字、再找原因、后动手改」的顺序把路线走一遍。
先看懂数字在量什么
利用率回答的是「观察时段里有多少时间显卡在干活」,但它不区分干的活值不值。任务再小,只要占着计算单元,数字就往上涨。所以单看这一个数字会误判,要搭配吞吐量一起读:利用率高、吞吐也高,才是真健康;利用率高、吞吐平平,说明在空转;利用率低,则是喂不满。读数的分层方法,参考调度器里关于排队的讨论——队列积压时利用率反而虚高。
拖低利用率的常见元凶
元凶清单按出现频率排:一是批次太小,单条请求喂不饱并行单元;二是数据供给跟不上,计算单元等数据干瞪眼;三是调度碎片化,请求稀稀拉拉,机器频繁空档;四是计算本身低效,同样的活绕了远路。前三类靠配置和策略解决,第四类才涉及更深层的优化。
提上去的几条路子
对应开方子:批次太小就凑批,机制见批处理;供给跟不上就检查数据管道和预处理;碎片化就调排队策略,让请求攒起来再上卡;计算低效则看算子层面的功夫,见算子融合。显存吃紧导致批次上不去时,可以先做模型压缩腾出空间。四条路子按投入产出排先后:先调免费的配置项,再考虑改结构。
四类元凶各配一条方子,投入从配置项一路加深到算子。
| 元凶 | 面板上的样子 | 对应方子 | 改起来的分量 |
|---|---|---|---|
| 批次太小 | 单条请求喂不饱并行单元,计算单元大部分闲着 | 凑批,把同时到达的请求并成一批 | 调配置项,几乎免费 |
| 数据供给跟不上 | 计算单元等数据干瞪眼 | 检查数据管道和预处理 | 理管道,中等投入 |
| 调度碎片化 | 请求稀稀拉拉,机器频繁空档 | 调排队策略,让请求攒起来再上卡 | 改策略,中等投入 |
| 计算本身低效 | 同样的活绕了远路,利用率高但吞吐平平 | 算子层面的功夫,如算子融合 | 更深层的优化,投入最大 |
改一处验一处
优化最忌一把梭:一次改三项,涨了不知道谁的功劳,跌了不知道谁的锅。正确节奏是改一项、观察一天、记录对比,再改下一项。对比要固定条件:同样的请求样本、同样的时段,数字才有可比性。像豆包、海螺AI这类体验流畅的线上产品,背后都是长期按这套节奏迭代出来的。服务发布环节的改动同样影响利用率,切换策略参考版本回滚与灰度流量,改坏了能及时退回来。
补充一个容易被误解的点:利用率和显卡温度、功耗不是一回事。温度高不代表在高效干活,可能只是一直空转发热;功耗低也不一定坏事,离线任务收尾阶段本来就该降下来。看健康与否,永远回到那对组合:利用率讲「在不在干活」,吞吐讲「干出了多少」。两者的比值还能暴露单位效率——同样拉满利用率,处理量高的说明每次干活都干在了点子上。
长期优化的思路也值得交代:利用率不是终点,单次请求成本才是。把电费、租金折进每次请求,做成一条随时间变化的曲线,优化的每一步是否真的省了钱,这条曲线最有发言权。指标服务于目标,别为了数字好看而优化数字。
GPU 利用率提升路线图
- 先读数:利用率搭配吞吐一起看,防误判
- 找元凶:批次小、供给慢、碎片化、计算低效
- 开方子:凑批、理管道、调队列、融算子
- 守节奏:一次改一处,固定条件做对比
记住这句:利用率是果而非因,顺着喂不满的三类原因往回找,改对地方数字自然上去。
改配置前还有个保命习惯:把当前配置完整备份并记录日期,改动生效后若指标恶化,能立刻回到已知的良好状态。优化是长期工程,翻车不可怕,可怕的是回不去。备份加分步改,是所有调优动作的两条安全带。
关于 GPU 利用率再多问三句
- 利用率越高越好吗?:在线服务要给峰值留余量,长期贴着满格跑,流量一抖就排队报错。
- 为什么利用率波动很大?:流量本身有波峰波谷,看长周期曲线和分时段统计才有意义。
- 换了新框架利用率反而降了?:先核对配置是否对齐旧环境,再观察凑批和队列策略,别急着下结论。


