为本地LLM提供大量答案的新旧基准测试
摘要
本文介绍了一个用于评估本地LLM配置的基准测试工具,重点关注显存使用情况、性能指标和硬件优化,以协助开发者优化配置。
一个为本地LLM提供大量答案的新旧基准测试。我向你展示一个我偶然开发的新测试:https://huggingface.co/cHunter789/Qwen3.8-27B-i1-IQ4_KS_KT-GGUF/tree/main/ctx-cliff 其最初目标是测试在特定llama-server配置下,模型是否适合放入显存。理论上这很简单,但当你想从硬件中榨取绝对最大性能并手动配置服务器时,事情会变得相当复杂——尤其是使用MTP、ngram、dflash等时。例如,如果你拥有NVIDIA显卡并想最大化显存使用率,设置环境变量GGML_CUDA_ENABLE_UNIFIED_MEMORY=1至关重要。当定义时,CUDA分配通过cudaMallocManaged(ggml-cuda.cu:181)进行,将内存管理交给NVIDIA显卡的硬件MMU:消除碎片化(4 KB / 2 MB粒度 vs. VMM池):llama.cpp中的标准VMM分配器(cuMemCreate)强制进行大型、僵硬的块分配,如果显卡缺乏连续空间,则会触发硬性OOM。cudaMallocManaged在非常细粒度的物理页面(4 KB / 2 MB)上运行,允许NVIDIA驱动程序拼接小的空闲显存片段而不抛出分配错误。没有这个参数,你实际上会失去大量显存容量。然而,启用它也会激活显存到RAM的卸载机制,因此你需要确定在你的特定条件下实际有多少上下文空间。这就是为什么最初创建这个测试——你可以清楚地看到显存耗尽时的“悬崖”。通常,NVIDIA的MMU行为相当复杂,这个悬崖有时可能令人惊讶。除了预填充和解码速度,测试还测量墙钟时间(总请求处理时间)。如果模型和llama-server配置有缺陷,随着上下文增长,这个时间可能会急剧增加,因为模型开始从头重新读取整个上下文——完全破坏了代理工作流。此外,脚本检测空响应和异常(>1000 t/s)。如果此类异常持续发生,则量化已损坏。因此,通过观察异常的发生和墙钟时间,你可以很好地近似判断给定模型和llama-server配置是否适合实际工作。以下是脚本针对参考模型cHunter789/Qwen3.8-27B-i1-IQ4_KS_KT-GGUF在以下llama-server设置下的示例输出:llama-server \ -m "$MODEL_PATH" \ -a Qwen3.6-27B \ --ctx-size 110000 \ --n-gpu-layers 99 \ --cache-type-k q4_0 \ --cache-type-v q4_0 \ --batch-size 512 \ --ubatch-size 128 \ --flash-attn on \ --host 0.0.0.0 \ --port 8081 \ --reasoning on \ --reasoning-format none \ --reasoning-budget 32000 \ -t 8 \ -tb 8 \ --parallel 1 \ --metrics \ --merge-qkv \ -khad \ -vhad \ --chat-template-kwargs '{"preserve_thinking": true, "reasoning_effort": "medium"}' \ --defrag-thold 0.1 \ --jinja \ --cont-batching \ --temp 1.0 \ --top-k 20 \ --min-p 0.00 \ --top-p 0.95 \ --presence-penalty 0.0 \ --repeat-last-n 512 \ --repeat-penalty 1.00 1. 参考模型结果 python3 ctx-cliff.py --file tests/code_4M.py --start 2000 --end 109000 --step 2000 --n-predict 512 ctx | prefill| decode| MTP| wall| status ------------------------------------------------- 1999 | 1021.1 | 46.72| 0/0| 11.4s| 正常 3925 | 1320.9 | 46.06| 0/0| 12.6s| 正常 6017 | 1261.5 | 45.12| 0/0| 13.0s| 正常 8065 | 1293.4 | 44.20| 0/0| 13.2s| 正常 10218 | 1191.9 | 43.36| 0/0| 13.6s| 正常 12489 | 1184.3 | 42.39| 0/0| 14.0s| 正常 14525 | 1228.9 | 41.66| 0/0| 15.9s| 正常 16108 | 1258.8 | 41.16| 0/0| 17.6s| 正常 18976 | 1237.8 | 40.13| 0/0| 20.8s| 正常 20476 | 1058.4 | 39.67| 0/0| 15.0s| 正常 22574 | 1091.4 | 39.22| 0/0| 15.8s|STOP@463 24950 | 1082.3 | 38.15| 0/0| 16.3s| 正常 26551 | 1060.3 | 37.79| 0/0| 18.0s| 正常 29197 | 1058.8 | 37.16| 0/0| 20.7s| 正常 30559 | 1059.6 | 36.81| 0/0| 22.1s| 正常 32691 | 1048.1 | 36.17| 0/0| 24.5s| 正常 34235 | 1046.3 | 35.75| 0/0| 26.2s| 正常 36569 | 1037.3 | 35.22| 0/0| 28.7s| 正常 38356 | 1027.6 | 34.94| 0/0| 30.7s| 正常 40912 | 1014.6 | 34.14| 0/0| 33.8s| 正常 42569 | 1010.3 | 34.00| 0/0| 35.6s| 正常 44532 | 1002.9 | 33.27| 0/0| 32.1s|STOP@316 47017 | 994.5 | 32.53| 0/0| 44.2s| 正常 48257 | 997.5 | 32.83| 0/0| 47.7s| 正常 51210 | 996.4 | 32.06| 0/0| 53.1s| 正常 52481 | 826.8 | 31.97| 0/0| 18.4s| 正常 54608 | 803.1 | 31.43| 0/0| 18.9s| 正常 56263 | 775.9 | 31.16| 0/0| 18.6s| 正常 58871 | 847.3 | 30.54| 0/0| 24.2s| 正常 60014 | 795.5 | 30.38| 0/0| 21.1s| 正常 62496 | 825.7 | 29.95| 0/0| 26.7s| 正常 64364 | 780.5 | 29.67| 0/0| 23.2s| 正常 65843 | 775.2 | 29.08| 0/0| 25.5s| 正常 67130 | 746.5 | 28.85| 0/0| 22.2s| 正常 68719 | 757.5 | 28.73| 0/0| 24.3s| 正常 70803 | 753.8 | 28.45| 0/0| 27.3s| 正常 72826 | 712.6 | 28.20| 0/0| 22.2s| 正常 74889 | 723.3 | 27.72| 0/0| 25.3s| 正常 76819 | 725.8 | 27.43| 0/0| 28.1s| 正常 78975 | 723.9 | 27.09| 0/0| 31.4s| 正常 81045 | 678.9 | 26.81| 0/0| 23.4s| 正常 83184 | 755.7 | 26.48| 0/0| 36.9s| 正常 85162 | 712.9 | 26.14| 0/0| 41.0s| 正常 87191 | 684.5 | 25.90| 0/0| 31.5s| 正常 89098 | 728.9 | 25.66| 0/0| 44.9s| 正常 90969 | 706.3 | 25.30| 0/0| 50.0s| 正常 93074 | 696.8 | 25.12| 0/0| 53.6s| 正常 95132 | 654.1 | 24.84| 0/0| 34.1s| 正常 97250 | 614.2 | 24.56| 0/0| 25.3s| 正常 99301 | 680.1 | 24.27| 0/0| 40.2s| 正常 101183 | 629.1 | 24.14| 0/0| 31.9s| 正常 103237 | 668.2 | 23.83| 0/0| 46.8s| 正常 105209 | 624.7 | 23.64| 0/0| 38.8s| 正常 107265 | 655.6 | 23.37| 0/0| 53.9s| 正常 一个具有类似PPL但更小的模型,使用https://github.com/Thireus/GGUF-Tool-Suite生成。模型参数相同。你可以看到一个异常,这意味着模型完全失败。此外,有很多STOP。脚本命令模型继续生成代码最多512个token;如果它更早完成,意味着它放弃了——这不是一个好迹象。 2. Thireus模型(相同参数) python3 ctx-cliff.py --file tests/code_4M.py --start 2000 --end 109000 --step 2000 --n-predict 512 ctx | prefill| decode| MTP| wall| status ------------------------------------------------- 1998 | 1066.5 | 46.88| 0/0| 11.4s| 正常 3925 | 1235.6 | 46.17| 0/0| 12.7s| 正常 6017 | 1210.7 | 45.29| 0/0| 13.1s| 正常 8065 | 1240.4 | 44.65| 0/0| 13.1s| 正常 10213 | 1192.5 | 44.06| 0/0| 13.4s| 正常 12491 | 1185.0 | 43.29| 0/0| 13.8s| 正常 14525 | 1175.7 | 42.50| 0/0| 13.8s| 正常 16107 | 1113.7 | 41.89| 0/0| 14.1s| 正常 18975 | 1093.7 | 40.82| 0/0| 15.2s| 正常 20478 | 1051.8 | 40.30| 0/0| 14.9s| 正常 22569 | 1050.0 | 39.66| 0/0| 15.7s| 正常 24955 | 1017.4 | 38.79| 0/0| 16.4s| 正常 26546 | 982.8 | 38.33| 0/0| 15.7s| 正常 29207 | 988.5 | 37.55| 0/0| 17.1s| 正常 30540 | 939.4 | 38.14| 0/0| 3.5s| STOP@46 32705 | 933.1 | 36.57| 0/0| 16.4s| 正常 34235 | 919.3 | 36.11| 0/0| 16.6s| 正常 36570 | 972.2 | 35.51| 0/0| 20.7s| 正常 38357 | 906.9 | 35.32| 0/0| 11.1s|STOP@245 40905 | 891.6 | 34.40| 0/0| 17.8s| 正常 42573 | 849.8 | 33.93| 0/0| 17.1s| 正常 44530 | 863.8 | 33.54| 0/0| 19.5s| 正常 47019 | 861.3 | 32.96| 0/0| 20.3s| 正常 48258 | 889.6 | 32.69| 0/0| 24.0s| 正常 51204 | 834.0 | 31.96| 0/0| 22.3s| 正常 52488 | 802.6 | 31.76| 0/0| 19.1s| 正常 54607 | 791.4 | 31.32| 0/0| 18.8s| 正常 56259 | 794.5 | 31.00| 0/0| 20.4s| 正常 58873 | 789.4 | 31.19| 0/0| 8.7s| STOP@46 60016 | 727.6 |异常| 0/0| 1.6s| STOP@1 62496 | 776.2 | 31.24| 0/0| 9.0s| STOP@29 64364 | 803.6 | 29.57| 0/0| 31.3s| 正常 65843 | 755.4 | 29.31| 0/0| 24.1s| 正常 67129 | 715.9 | 29.06| 0/0| 20.7s| 正常 68719 | 727.0 | 28.77| 0/0| 23.0s| 正常 70804 | 731.2 | 28.57| 0/0| 26.0s| 正常 72828 | 704.1 | 28.08| 0/0| 22.9s| 正常 74885 | 752.9 | 27.64| 0/0| 31.8s| 正常 76819 | 708.7 | 28.45| 0/0| 11.5s| STOP@36 78976 | 737.6 | 27.30| 0/0| 37.8s| 正常 81044 | 678.9 | 27.01| 0/0| 25.4s| 正常 83184 | 679.5 | 26.64| 0/0| 28.8s| 正常 85162 | 677.7 | 26.39| 0/0| 31.9s| 正常 87190 | 649.3 | 26.10| 0/0| 25.5s| 正常 89100 | 651.2 | 25.86| 0/0| 28.6s| 正常 90967 | 652.3 | 25.53| 0/0| 31.7s| 正常 93075 | 651.7 | 25.26| 0/0| 35.2s| 正常 95132 | 626.9 | 25.02| 0/0| 27.8s| 正常 97248 | 623.9 | 24.77| 0/0| 31.5s| 正常 99303 | 623.2 | 24.46| 0/0| 35.0s| 正常 101182 | 603.1
相似文章
Homebench – 基准测试本地LLM的速度、内存和质量
Homebench 是一款零配置终端工具,可对本地运行的LLM进行速度、内存和质量的基准测试,并提供实时排行榜。它支持 Ollama、LM Studio、llama.cpp、vLLM 以及兼容 OpenAI 的服务器。
在6GB RTX 4050上对20个小LLM的基准测试
对20个为6GB GPU量化的小LLM的详细基准测试,测量了不同上下文长度下的速度和VRAM使用情况,并对工具使用和指令遵循进行了定性探针。该报告旨在帮助拥有中等硬件的用户为本地私有的自动化任务选择模型。
Show HN: 根据基准测试排名,为你的硬件找到最佳本地LLM
whichllm 是一个开源Python工具,它自动检测你的GPU/CPU/RAM,并从HuggingFace中排名最适合你系统的本地LLM,使用真实基准测试而非大小启发式方法。
一个用于本地LLM的"能跑吗"计算器(考虑量化与KV缓存)
一个网络工具,通过考虑量化、KV缓存和VRAM开销,计算给定本地LLM能否在指定硬件上运行,并提供预估速度和内存使用。
本地LLM推理优化:完整指南
一份关于在消费级硬件上优化本地LLM推理的全面指南,涵盖llama.cpp、vLLM和LM Studio等工具,并提供关于内存层次结构、层放置和常见故障模式的实用建议。