跳到主要内容

令牌生成性能故障排除

验证模型是否在 GPU 上运行(使用 CUDA)

确保您已根据构建指南使用正确的环境变量编译了 llama,以便 llama 能够接受 -ngl N(或 --n-gpu-layers N)标志。运行 llama 时,您可以将 N 配置为一个很大的数值,llama 会将最大可能数量的层卸载到 GPU 上,即使实际数量少于您配置的数量。例如:

./llama-cli -m "path/to/model.gguf" -ngl 200000 -p "Please sir, may I have some "

运行 llama 时,在开始推理工作之前,它会输出诊断信息,显示 cuBLAS 是否正在将工作卸载到 GPU。请查找以下这些行:

llama_model_load_internal: [cublas] offloading 60 layers to GPU
llama_model_load_internal: [cublas] offloading output layer to GPU
llama_model_load_internal: [cublas] total VRAM used: 17223 MB
... rest of inference

如果您看到这些行,说明 GPU 正在被使用。

验证 CPU 是否过度饱和

llama 接受 -t N(或 --threads N)参数。这个参数不能太大,这一点极其重要。如果您的令牌生成速度极慢,请尝试将此数值设置为 1。如果这样能显著提高令牌生成速度,说明您的 CPU 过度饱和了,您需要将此参数明确设置为您机器上物理 CPU 核心的数量(即使您使用了 GPU)。如果不确定,请从 1 开始,逐步加倍,直到遇到性能瓶颈,然后再缩小数值。

运行时标志对推理速度基准测试影响的示例

这些测试在以下机器上进行:

  • GPU:A6000(48GB 显存)
  • CPU:7 个物理核心
  • 内存:32GB

模型:TheBloke_Wizard-Vicuna-30B-Uncensored-GGML/Wizard-Vicuna-30B-Uncensored.q4_0.gguf(300 亿参数,4位量化,GGML 格式)

运行命令:./llama-cli -m "path/to/model.gguf" -p "An extremely detailed description of the 10 best ethnic dishes will follow, with recipes: " -n 1000 [其他基准测试标志]

结果:

命令令牌/秒(数值越高越好)
-ngl 2000000不适用(小于 0.1)
-t 71.7
-t 1 -ngl 20000005.5
-t 7 -ngl 20000008.7
-t 4 -ngl 20000009.1

注意: 从测试结果可以看出,合理配置线程数和 GPU 层数卸载对性能有显著影响。单独使用 GPU 卸载而不优化线程数可能会导致性能极差,而适当的线程数配置(如 4 个线程)结合 GPU 卸载能够获得最佳性能。