具体 token/s 因模型、量化、上下文长度和硬件而异,本文给量级判断,速度以你自己实测为准。
很多人租了张 4090 跑 7B,结果推理速度才个位数 token/s,第一反应是"这卡是不是被商家坑了"。但大概率不是卡的问题——80% 是加载方式和参数没配对。3 个原因逐个查。
原因 1:直接用 transformers 原生加载
最常见:上来就AutoModelForCausalLM.from_pretrained()把模型 load 起来跑。这种写法是给开发调试用的,不是给生产推理用的——没有连续批处理、没有高效注意力,速度自然慢。
解决办法:换成专门的推理引擎,比如 vLLM 或 TGI。它们针对吞吐做了优化,同样一张卡、同一个模型,吞吐往往能翻好几倍(数倍量级,具体看负载)。
vLLM 启动大概长这样:
python -m vllm.entrypoints.openai.api_server \ --model /path/to/your-model \ --served-model-name your-model \ --port 8000换上去之后,先和原生加载对比一下吞吐,差距通常很明显。
原因 2:没开量化,显存被权重占满
第二个原因:FP16 加载,7B 权重就占约 14G,24G 的卡剩下的显存不多了,没法开 batch,只能一个一个请求跑——单条看着还行,并发一上来吞吐就崩。
解决办法:开量化(INT8 / AWQ)。量化省下来的显存,腾出来给连续批处理用,能同时处理更多请求,整体吞吐反而更高。
vLLM 里量化模型大概这样指定:
--quantization awq原因 3:batch 参数没调,用了默认值
第三个:已经上了 vLLM,但全用默认参数。vLLM 默认值偏保守,你可以根据显存和模型大小调大:
--max-num-seqs:最多同时处理多少个序列;--max-model-len:最大上下文长度,按你实际需要设,别开太大白占显存。
调大max-num-seqs让它并发更多请求,吞吐通常还能再上一个台阶。当然,这些值要在显存够用的前提下调,别调到又 OOM。
你的慢是哪种?
| 现象 | 大概率原因 | 先做什么 |
|---|---|---|
| 用 transformers 直接 load | 没换推理引擎 | 换 vLLM / TGI |
| 显存几乎占满 | 没量化,开不了 batch | 开 INT8 / AWQ |
| 已上 vLLM 但仍一般 | 默认 batch 参数 | 调 max-num-seqs |
这三项都调完,速度还是上不去,才需要怀疑是不是真该换卡了。
你租的什么卡、跑什么模型、现在大概多少 token/s?评论区报一下,我帮你看是配置没调对,还是真的该升卡了。