GPU利用率才三成,我们优化了一下省了一半服务器钱
跑大模型推理的人都知道一个事:GPU特别贵,但大部分时候它没跑满。你花大价钱租了卡,它利用率可能才百分之二三十。
这钱花得冤不冤?我们优化了一下,利用率翻了一倍,服务器钱省了一半。说点怎么做的。
第一个坑:batch太小。
你一次只处理一个请求,GPU大部分算力闲着。它就等你一个请求算完,再来下一个。
那把多个请求凑一起处理呢?这叫批处理。凑得越多,GPU算得越满。但你不能无限等——等太久了,用户响应就慢了。
我们做的事就是:不等太久,凑够几个就一起算。大概等个几十毫秒,凑到一定数量就发出去。GPU利用率从三成涨到六成。
第二个坑:显存没用好。
大模型权重很大,一张卡可能刚好放下一个模型。但你多个请求共用一个模型权重,不就行了?
我们用了个技术叫连续批处理。就是请求来了就往队列里放,GPU算完一个就接下一个,不用等整批凑齐。这样显存里只放一份模型,但吞吐量高了不少。
第三个坑:量化。
模型参数从原来的高精度降到低精度,比如从16位降到8位。模型大小直接减半,推理速度快一截。
一开始我们担心效果变差。测了一下,用户几乎感觉不出来。但成本降了一半。这种不影响效果又省钱的事,为什么不做?
效果怎么样?
优化完,同样的并发量,我们用的服务器少了一半。每个月成本降了一半。
跑大模型这个事,光靠加服务器是笨办法。先把现有服务器用满了再说。很多时候你不是算力不够,是没调好。
说个更真实的经历。我们一开始跑推理,就是简单地部署上去,谁请求来了就处理谁。监控一看GPU利用率,百分之二十几。
当时第一反应是加服务器。用户量涨了嘛,加机器天经地义。
后来一个做性能优化的朋友看了一眼,说:你这利用率才两成,加什么服务器?先把批处理打开。
我们一调,利用率从两成涨到五成。同样的服务器,处理能力翻了一倍。之前要加两台机器的事,一台都不用加。
这一下就省了一个月几千块。
后来又做了量化和连续批处理,利用率到了七成多。同样的并发,服务器从六台减到三台。
这事给我的教训是:技术上的钱,很多时候不是靠加资源省的,是靠优化省的。你一上来就加服务器,其实是在为自己没调好的东西付溢价。
当然优化是要花时间的。我们前后调了大概两周。但两周换每个月省一半钱,这笔账怎么算都值。
跑大模型,先优化再加机器。
真的。
你不是算力不够。
真的。
是没调好。
真的。
先把现有服务器用满。
真的。
再加机器。
真的。
这笔账算得过来。
真的。
听我的。
先优化。
就这样吧。
嗯。
就这样。
真的。
。
。

