MLPerf Storage 基准测试套件 —— KV Cache 工作负载

MLPerf® Storage 是一个用于评估支持机器学习工作负载的存储系统性能的基准测试套件。

在 LLM 推理过程中,模型将中间注意力数据存储在一个名为 KV(K 向量 / V 向量)缓存的结构中,以减少重复的 prefill 计算。该缓存随会话长度增长,可能消耗巨大的内存。生产系统会将此缓存从昂贵的 GPU 显存卸载到成本更低的 CPU 内存或 NVMe 存储中。

本基准测试模拟这种卸载行为。它生成真实的多用户推理工作负载,并测量您的存储在压力下的表现。详细设计文档请参见 DESIGN.md。

用法

KV cache 基准测试使用两种模型规模运行三种不同的工作负载:

WORKLOAD_PARAMS = {
    1: {
        'model': 'llama3.1-8b',
        'num-users': 200,
        'duration': 300,
        'gpu-mem-gb': 0,
        'cpu-mem-gb': 0,
        'max-concurrent-allocs': 16,
        'generation-mode': 'none',
    },
    2: {
        'model': 'llama3.1-8b',
        'num-users': 100,
        'duration': 300,
        'gpu-mem-gb': 0,
        'cpu-mem-gb': 4,
        'max-concurrent-allocs': 16,
        'generation-mode': 'none',
    },
    3: {
        'model': 'llama3.1-70b-instruct',
        'num-users': 70,
        'duration': 300,
        'gpu-mem-gb': 0,
        'cpu-mem-gb': 0,
        'max-concurrent-allocs': 4,
        'generation-mode': 'none',
    },
}

对于 closed 提交,定义这些工作负载的参数是固定的。

基准测试的执行过程需要两个步骤:

  1. Datasize - 计算每个工作负载实例所需的客户端内存和存储空间

    [root@localhost ]# uv run mlpstorage closed kvcache datasize  --help
    usage: mlpstorage closed kvcache datasize [--cache-dir CACHE_DIR] [--config-file CONFIG_FILE] [--debug] [--dry-run] [-h] [--quiet] [--results-dir RESULTS_DIR]
                                              [--skip-fs-separation-gate] [--skip-ssh-check] [--skip-validation] [--stream-log-level STREAM_LOG_LEVEL]
                                              [--systemname SYSTEMNAME] [--verbose] [--verify-lockfile PATH]
    
  2. Run - 执行基准测试(运行全部三种工作负载)

[root@localhost ]# uv run mlpstorage closed kvcache run --help
usage: mlpstorage closed kvcache run [--allow-run-as-root] [--cache-dir CACHE_DIR] [--config-file CONFIG_FILE] [--debug] [--dry-run] [--exec-type {mpi,docker}]
                                     [-h] [--hosts HOSTS [HOSTS ...]] [--kvcache-bin-path KVCACHE_BIN_PATH] [--max-timeseries-samples MAX_TIMESERIES_SAMPLES]
                                     [--mpi-bin {mpirun,mpiexec}] [--mpi-btl {auto,vader,tcp}] [--mpi-params MPI_PARAMS] [--num-processes NUM_PROCESSES]
                                     [--oversubscribe] [--quiet] [--results-dir RESULTS_DIR] [--skip-fs-separation-gate] [--skip-ssh-check] [--skip-timeseries]
                                     [--skip-validation] [--stream-log-level STREAM_LOG_LEVEL] [--systemname SYSTEMNAME]
                                     [--timeseries-interval TIMESERIES_INTERVAL] [--verbose] [--verify-lockfile PATH]

MLPerf 提交指南

官方 MLPerf KV cache 存储提交不需要指定测试参数,因为使用 mlpstorage 命令并带 closed 标志运行 KV cache 基准测试时将使用标准化测试参数。这些参数已经过广泛的探索性测试验证(1,411 项 Fast 系统测试、268 项 Slow 系统测试,对比 14,000 MB/s 与 3,000 MB/s 存储)。

所有存储设备在运行基准测试前必须进行预处理(preconditioning)。这一步骤对于确保结果的可重复性和随时间推移的一致性至关重要。请为预处理预留足够的时间,因为对大型存储系统而言该过程可能需要数天。

运行 KV Cache 基准测试

运行 KV cache 基准测试套件所需的最简命令为:

[root@localhost ]# uv run mlpstorage closed kvcache run  --allow-run-as-root  -sn toyou-tyas-v1   --cache-dir /path/to/storage/ --results-dir /path/to/output/

这会在本地主机上运行 KV cache 基准测试套件的单个实例。

为扩展 KV cache 基准测试产生的 I/O 负载,需要使用 MPI 启动多个基准测试实例。例如,要在两台主机上运行基准测试,所需的最简命令为:

[root@localhost ]# uv run mlpstorage closed kvcache run --allow-run-as-root  -sn toyou-tyas-v1 --hosts 10.117.61.121,10.117.61.165 --cache-dir /path/to/storage/ --results-dir /path/to/output/

在您的 MPI 环境中运行此基准测试可能需要额外的参数:

MPI:
  --allow-run-as-root
  --mpi-bin {mpirun,mpiexec}
                        MPI 命令的执行类型。支持选项:['mpirun', 'mpiexec']
  --mpi-btl {auto,vader,tcp}
                        单机运行的 MPI 字节传输层(Byte Transport Layer)。'auto' 让 OpenMPI 自动选择
                        (默认;适用于大多数系统)。'vader' 强制使用 POSIX 共享内存传输(快;在容器中
                        或以 root 运行时可能失败)。'tcp' 强制使用 TCP 回环传输(兼容性最好;
                        推荐用于容器和 root 环境)。对多主机运行无影响。
  --mpi-params MPI_PARAMS
                        原样传递给 MPI 启动器的额外参数。以单个带引号的字符串形式传入,例如 --mpi-
                        params="-genv PMI_VERSION=2 -genv FI_PROVIDER=tcp"。由于 MPI 标志以 '-' 开头,
                        请使用 '--mpi-params=...'(等号)形式,以免 argparse 将其误认为选项。
                        可多次提供;各值会拼接在一起。

MLPerf KV Cache 基准测试结果

KV cache 基准测试结果按每个工作负载计算:

  • "吞吐量(Tokens/秒)" - 一次运行中所有实例的 "storage_throughput_tokens_per_sec" 之和
  • "读取带宽(GiB/s)" - 一次运行中所有实例的 "tier_storage_read_bandwidth_gbps" 之和
  • "写入带宽(GiB/s)" - 一次运行中所有实例的 "tier_storage_write_bandwidth_gbps" 之和
  • "P95 读取延迟(毫秒)" - 一次运行中所有实例的 "storage_read_p95_ms" 的最大值

每个工作负载运行三次。最终结果表中展示的提交结果为:吞吐量与带宽取三次运行的均值,延迟取三次运行的最大值。这些结果会在运行结果目录根部的 summary.json 文件中报告。

posted @ 2026-09-28 09:23  LoftyAmbition  阅读(26)  评论(0)    收藏  举报