Skip to content

llama-bench

llama-bench

llama-bench

  • llama-bench 是 llama.cpp 项目中的一个性能基准测试工具
  • 它可以帮助我们测试模型在不同配置下的性能表现

测试类型

  • 这个工具主要支持三种测试类型:
  • 提示词处理测试(Prompt Processing, pp):
    • 测试模型处理输入提示词的性能,通过 -p 参数控制提示词长度。
  • 文本生成测试(Text Generation, tg):
    • 测试模型生成文本的性能,通过 -n 参数控制生成的 token 数量。
  • 完整流程测试(Prompt Processing + Generation, pg):
    • 同时测试提示词处理和文本生成的性能,通过 -pg 参数配置。

基本用法

./llama-bench -m models/7B/ggml-model-q4_0.gguf -p 512 -n 128
  • 这个命令会使用指定的模型进行测试,处理 512 个 token 的提示词,并生成 128 个 token 的文本。

重要参数

基础参数

  • -h, --help:显示帮助信息。这是一个基本的命令行参数,用于查看所有可用选项。

模型参数

  • -m, --model:指定要测试的模型文件路径。默认是 "models/7B/ggml-model-q4_0.gguf",这是一个基础的 7B 参数量模型。

测试类型参数

  • -p, --n-prompt:控制提示词长度。设置提示词的 token 数量,默认为 512。这决定了在测试中要处理多少输入 token。
  • -n, --n-gen:控制生成的 token 数量。默认为 128。这控制模型需要生成多少新的 token。
  • -pg:同时进行提示词处理和文本生成测试,格式为"pp,tg",默认为空。这让您可以测试完整的处理流程。

批处理和缓存参数

  • -b, --batch-size:设置批处理大小,默认为 2048。较大的批处理大小通常能提高处理效率,但也会消耗更多内存。
  • -ub, --ubatch-size:设置微批处理大小,默认为 512。这是在批处理内部的更小的处理单元。
  • -ctk, --cache-type-k:设置 key 缓存的数据类型,默认为 f16(半精度浮点数)。
  • -ctv, --cache-type-v:设置 value 缓存的数据类型,默认为 f16。这两个缓存参数影响模型的内存使用和计算精度。

CPU 相关参数

  • -t, --threads:设置 CPU 线程数,默认为 8。更多的线程通常能提高性能,但要根据您的 CPU 核心数来选择。
  • -C, --cpu-mask:设置 CPU 亲和性掩码,默认为 0x0。这允许您将计算限制在特定的 CPU 核心上。
  • --cpu-strict:是否启用严格的 CPU 使用模式,默认为 0(关闭)。
  • --poll:设置轮询间隔,范围 0-100,默认为 50。这影响线程调度的行为。

GPU 相关参数

  • -ngl, --n-gpu-layers:设置要卸载到 GPU 的层数,默认为 99。这是一个关键的性能参数,更多的 GPU 层通常意味着更快的处理速度。
  • -sm, --split-mode:设置模型分割模式,可选 none/layer/row,默认为 layer。这决定了如何在不同设备间分配模型。
  • -mg, --main-gpu:设置主 GPU 的索引,默认为 0。在多 GPU 系统中很有用。
  • -nkvo, --no-kv-offload:是否禁用 KV 缓存的 GPU 卸载,默认为 0(允许卸载)。
  • -fa, --flash-attn:是否启用 Flash Attention,默认为 0(关闭)。这是一个能提高性能的优化技术

内存和系统参数

  • -mmp, --mmap:是否使用内存映射,默认为 1(启用)。这影响模型加载的方式。
  • --numa:NUMA 节点配置,可选 distribute/isolate/numactl,默认禁用。这对多处理器系统的性能优化很重要。
  • -embd, --embeddings:是否输出嵌入向量,默认为 0(关闭)。
  • -ts, --tensor-split:设置张量在不同设备间的分配比例,默认为 0。

测试控制参数

  • -r, --repetitions:设置测试重复次数,默认为 5。多次重复有助于获得更可靠的性能数据。
  • --prio:设置进程优先级,范围 0-3,默认为 0。
  • --delay:设置测试间的延迟时间(秒),默认为 0。

输出控制参数

  • -o, --output:设置输出格式,支持 csv/json/jsonl/md/sql,默认为 md(Markdown)。
  • -oe, --output-err:设置错误输出格式,默认为 none。
  • -v, --verbose:是否启用详细输出,默认为 0(关闭)。

注意事项

1.同时测试多个配置

特别实用的功能是,可以通过逗号分隔或多次 指定同一参数来同时测试多个配置

  • 除了-r-o-v之外,所有选项都可以多次指定以运行多个测试。

  • 每个pptg测试都使用指定选项的所有组合运行。

  • 要为一个选项指定多个值,可以用逗号分隔这些值(例如-n 16,32),也可以多次指定该选项(例如-n 16 -n 32)。

  • 例如:

./llama-bench -t 1,2,4,8 -n 128
  • 这条命令会分别使用 1、2、4、8 个线程进行测试,帮助找到最优的线程配置

2.建议

  • 要获得最佳性能,通常需要根据自己的硬件配置和具体需求来调整这些参数。
  • 特别是线程数、批处理大小和 GPU 层数这些参数往往对性能影响最大。
  • 建议从默认值开始,然后逐步调整这些关键参数来找到最适合自己系统的参数配置

测试结果

测试结果会显示每种配置下的性能指标,包括:

  • 模型信息(大小、参数量等)
  • 后端类型(CPU/CUDA 等)
  • 测试类型和配置
  • 性能数据(tokens/s)及其标准差

通过这些测试,可以:

  1. 比较不同模型的性能表现
  2. 优化批处理大小和线程数
  3. 找到 GPU 加速的最佳配置
  4. 评估不同硬件设置的性能差异
本文阅读量  次
本站总访问量  次
Authors: wangshangjian