说起来,要真正摸清Grok模型在不同显卡上的生成速度,光看厂家给的算力参数可不够——得动手实测Tokens Per Second(TGS)才行。举个典型的例子:RTX 4090的FP16峰值算力看起来很高,可要是显存带宽成了瓶颈,实际TGS反而可能跑不过A100 PCIe版。所以,统一软硬件环境下的实测数据才是最靠谱的。

准备标准化测试环境
先从最基础的准备说起。用Docker拉取最新的PyTorch-CUDA-v2.8基准镜像,命令很简单:docker pull ghcr.io/ai-benchmark/pytorch-cuda-v2.8:latest。
启动容器时,得把单块GPU绑死,其他设备一律禁止干扰:docker run --gpus device=0 --rm -it -v $(pwd)/bench:/bench ghcr.io/ai-benchmark/pytorch-cuda-v2.8:latest。
进入容器后,先跑一句python -c "import torch; print(torch.cuda.get_device_name(0))",确认识别到的GPU型号是否正确。这里要格外注意:如果输出是'NVIDIA GeForce RTX 3090'这类消费级卡名,必须额外执行nvidia-smi -r重置GPU状态,否则残留在显存里的历史进程会严重污染TGS数据。
加载Grok模型并配置推理参数
加载模型有两种主流方式,看场景选。
方法一:Hugging Face Transformers原生加载
直接上代码:from transformers import AutoModelForCausalLM, AutoTokenizer; model = AutoModelForCausalLM.from_pretrained("grok-1", device_map="auto", torch_dtype=torch.bfloat16)。这种方式最稳妥,适合单次对比测试。
方法二:vLLM加速部署(高并发场景推荐)
先装vLLM:pip install vllm==0.6.3.post1;然后启动服务:python -m vllm.entrypoints.api_server --model grok-1 --tensor-parallel-size 1 --dtype bfloat16 --enforce-eager。
注意:vLLM方式下,必须手动关闭flash-attn(加--disable-flash-attn),否则在L4或A10G这类显卡上会触发CUDA内核崩溃,导致TGS直接归零。这个坑不少人都踩过,务必留意。
执行TGS压力测试
环境搭好了,模型也加载了,接下来就是真刀真枪的压力测试。
第一步:构造标准测试请求
固定prompt用“The capital of France is”,生成长度锁定128 tokens。重复请求50次,取平均值——单次结果随机波动太大,不够可靠。
第二步:采集原始耗时数据
用time curl -X POST http://localhost:8000/generate -H "Content-Type: application/json" -d '{"prompt":"The capital of France is","max_tokens":128}'记录总耗时,重复3轮取中位数,避免网络抖动干扰。
第三步:计算TGS
公式很直接:TGS = (50 × 128) ÷ 总秒数。举个例子,总耗时8.2秒,那么TGS就是780.5 tokens/s。
第四步:验证稳定性
连续跑10分钟压力测试,每30秒监控一次TGS的波动幅度。如果任意区间的TGS偏离均值超过15%,说明要么显存泄漏,要么温度降频。这种情况下,整组数据直接作废,必须排查问题后重测。
