尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

LMDeploy 基准测试实战指南:用 profile_pipeline_api、profile_throughput 与 profile_restful_api 度量 LLM 推理性能

LMDeploy 基准测试实战指南:用 profile_pipeline_api、profile_throughput 与 profile_restful_api 度量 LLM 推理性能 人工智能大模型模型推理服务推理引擎本地部署模型量化【免费下载链接】lmdeployLMDeploy is a toolkit for compressing, deploying, and serving LLMs.项目地址https://gitcode.com/gh_mirrors/lm/lmdeploy点击查看免费下载LMDeploy 在 benchmark/ 目录下提供了一套开箱即用的性能剖析工具覆盖离线 Pipeline API、离线引擎 API与**在线 ServingRESTful API**三种典型评测场景。本文以 docs/en/benchmark/benchmark.md 为骨架结合仓库源码逐项拆解三个脚本的用法、命令行参数与底层指标计算逻辑帮助你建立一套可复现、可对比的 LLM 推理性能评测流程。环境准备安装、脚本与数据集在运行任何基准测试脚本之前需要依次完成三件事安装与当前脚本版本对齐的 lmdeploy 预编译包、获取对应版本的 benchmark 脚本、下载标准测试数据集。# 1. 安装 lmdeploy 预编译包 pip install lmdeploy # 2. 克隆仓库以获取 benchmark 脚本 git clone --depth1 https://github.com/InternLM/lmdeploy cd lmdeploy # 3. 切换到与已安装版本对应的 tag git fetch --tags # 查看已安装的 lmdeploy 版本号 pip show lmdeploy | grep Version # 将 version 替换为上面查到的版本字符串后执行 git checkout version # 4. 下载测试数据集ShareGPT 清洗后的对话数据 wget https://huggingface.co/datasets/anon8231489123/ShareGPT_Vicuna_unfiltered/resolve/main/ShareGPT_V3_unfiltered_cleaned_split.json版本对齐是基准测试可比性的前提脚本的行为如指标定义、参数默认值随版本演进而变化pip install lmdeploy安装的版本必须与git checkout检出的脚本版本一致否则可能出现参数不兼容或指标口径不一致的问题。该数据集下载地址同样内嵌于 profile_restful_api.py若本地不存在该文件脚本会自动下载并缓存到/tmp目录。三个基准测试脚本概览仓库中的 benchmark 目录包含以下与本文直接相关的剖析工具benchmark/README.md 有更简略的速查说明脚本评测对象典型场景profile_pipeline_api.py离线 Pipeline APIlmdeploy.pipeline在单机内评估完整推理链路含前后处理profile_throughput.py离线引擎 APITurboMind / PyTorch Engine剔除前后处理开销度量引擎本身的吞吐与延迟profile_restful_api.py在线 RESTful 服务OpenAI 兼容接口模拟真实在线流量压测 API Server三者共享同一套请求采样逻辑ShareGPT / random / image 数据集与核心指标概念TTFT、TPOT、ITL、E2E 延迟、吞吐量但各自面向不同层面的性能关注点下文逐一展开。离线 Pipeline API 基准测试profile_pipeline_api.pyPipeline API 是 LMDeploy 提供的高层推理入口内部封装了 tokenize、模型推理、detokenize 等完整链路。profile_pipeline_api.py通过并发调用pipeline或stream_infer接口来度量端到端请求吞吐python3 benchmark/profile_pipeline_api.py ShareGPT_V3_unfiltered_cleaned_split.json meta-llama/Meta-Llama-3-8B-Instruct两个位置参数分别为数据集路径与模型路径本地路径或 HuggingFace repo_id。model_path支持传入本地目录或远程模型标识脚本内部会构建pipeline实例并配合AutoTokenizer进行 token 统计Engine 类。完整参数列表可执行python3 benchmark/profile_pipeline_api.py -h查看。结合 parse_args 实现核心参数如下参数默认值说明-c, --concurrency256并发工作线程数即同时处理的请求数-n, --num-prompts5000从数据集中采样的提示数量--csv./profile_pipeline_api.csv结果导出文件路径--seed0数据集采样随机种子--stream-outputFalse是否以流式接口stream_infer发送请求--dataset-namesharegpt数据集类型可选sharegpt/random--sharegpt-output-lenNone覆盖 ShareGPT 数据集的输出长度统一各请求生成长度--random-input-len/--random-output-lenNonerandom 数据集下每个请求的输入 / 输出 token 数--random-range-ratio0.0random 数据集下输入 / 输出长度的采样波动范围--top-p/--temperature/--top-k0.8 / 0.8 / 1采样参数--backendturbomind推理后端可选pytorch/turbomind--log-levelWARNING日志级别--trust-remote-codeFalse是否信任模型仓库中的远程代码脚本按后端分别构造引擎配置main 函数TurboMind 后端TurbomindEngineConfig(max_batch_sizeconcurrency, tp, cache_max_entry_count, session_len, cache_block_seq_len, model_format, quant_policy, num_tokens_per_iter, max_prefill_iters, enable_prefix_caching, communicator, async_)PyTorch 后端PytorchEngineConfig(cache_max_entry_count, session_len, block_size, max_batch_size, tp, device_type, thread_safeFalse, eager_mode, enable_prefix_caching, enable_return_routed_experts)其中高频调优参数及其底层含义定义见 lmdeploy/cli/utils.py--cache-max-entry-count默认 0.8KV cache 占用的可用显存比例不含权重直接决定能容纳的并发序列数与长上下文能力--cache-block-seq-len默认 64单个 KV block 的 token 序列长度。TurboMind 引擎在 GPU 计算能力 ≥ 8.0 时需为 32 的倍数否则需为 64 的倍数--session-len序列最大会话长度即上下文窗口上限--enable-prefix-caching开启前缀缓存与匹配适合多请求共享前缀的负载--quant-policyKV cache 量化策略可选none/int4/int8/fp8/fp8_e5m2/turbo_quant等价数值0/4/8/16/17/42--model-format模型权重格式可选hf/awq/gptq/compressed-tensors/fp8/mxfp4--num-tokens-per-iter单次前向推理处理的 token 数0 表示自动--max-prefill-itersprefill 阶段的最大前向次数--communicator默认nccl多卡通信后端可选nccl/native已废弃等价cuda-ipc--async默认 1是否启用异步执行。脚本还支持通过--speculative-algorithm开启投机解码评测可选算法包括eagle、eagle3、deepseek_mtp、hy3_mtp、qwen3_5_mtp、dflash配合--speculative-draft-model草稿模型路径与--speculative-num-draft-tokens默认 1使用。请求执行时使用GenerationConfig(ignore_eosTrue, do_sampleFalse)即强制每个请求生成满output_len个 token从而保证吞吐量指标不受 EOS 提前终止影响process_request 实现。离线引擎 API 基准测试profile_throughput.pyprofile_throughput.py直接绕过 Pipeline 层通过引擎实例的async_stream_infer接口驱动推理仅保留 tokenize/detokenize 的最小开销更贴近引擎真实算力表现python3 benchmark/profile_throughput.py ShareGPT_V3_unfiltered_cleaned_split.json meta-llama/Meta-Llama-3-8B-Instruct同样以数据集与模型为位置参数。相比 Pipeline 版该脚本新增了若干面向引擎细节的开关见 parse_args 实现参数默认值说明--no-stream-outputFalse关闭流式输出默认流式--skip-tokenizeFalse发请求前预先完成 tokenize排除 tokenize 开销--skip-detokenizeFalse跳过输出 token 的 detokenize--cancel-rate0.0请求被中途取消的概率用于模拟客户端中断场景--use-uvloopFalse使用 uvloop 事件循环提升异步性能--distributed-executor-backendNonePyTorch 引擎分布式执行后端可选uni/mp/ray--dp/--cp1数据并行度 / 上下文并行度TurboMind要求 tp 为 cp 的倍数--dtypeauto权重与激活数据类型可选auto/float16/bfloat16--max-prefill-token-num8192prefill 阶段单次迭代的最大 token 数--piecewise-cudagraph-max-tokensNone开启 PyTorch 引擎分段 CUDA Graph 并设置捕获 token 桶上限--dllm-block-length等--dllm-*系列—动态线性层DLLM相关的块长、去掩码策略、去噪步数与置信度阈值该脚本的请求执行采用异步任务队列模型将采样后的请求放入Queue启动concurrency个协程并发消费每个协程独立持有引擎实例并调用async_stream_inferEngine._inference 实现。需要注意实际生效的并发数为min(concurrency, num_prompts)见 main 函数。引擎配置构建同样区分后端main 函数TurboMind 使用TurbomindEngineConfig含dp、cp、dtype等PyTorch 使用PytorchEngineConfig含distributed_executor_backend、max_prefill_token_num、piecewise_cudagraph_max_tokens与 DLLM 参数。在线 Serving 基准测试profile_restful_api.py在线评测需要先启动一个 OpenAI 兼容的服务端。LMDeploy 通过lmdeploy serve api_server启动例如lmdeploy serve api_server meta-llama/Meta-Llama-3-8B-Instruct --server-port 23333完整的启动方式CLI、Docker、Kubernetes与 RESTful API 定义可参考 在线服务启动指南。随后运行python3 benchmark/profile_restful_api.py --backend lmdeploy --num-prompts 5000 --dataset-path ShareGPT_V3_unfiltered_cleaned_split.json该脚本模拟真实在线流量以Poisson 过程控制请求到达速率通过 aiohttp 异步并发发送请求并按 OpenAI 兼容协议解析流式响应。核心参数定义见 脚本参数解析参数默认值说明--backendsglang目标推理引擎支持lmdeploy、lmdeploy-chat、vllm、vllm-chat、sglang*、trt、gserver等可用于跨引擎对比--host/--port0.0.0.0/ 按引擎服务地址不指定端口时 lmdeploy 默认 23333、vllm 默认 8000--base-urlNone直接指定完整 API 地址优先级高于 host/port--modelNone模型名缺省时自动请求/v1/models获取--model-path/--tokenizerNone本地模型 / tokenizer 路径用于统计 token 数与输出重分词校验--num-prompts1000请求数量注意与另两个脚本默认 5000 不同--request-rateinf每秒请求数inf表示所有请求同时发出否则按泊松过程生成到达间隔--multi/--request-rate-rangeFalse /2,34,2多档请求速率扫描模式格式为start,stop,step或逗号分隔的速率列表--dataset-namesharegpt数据集类型可选sharegpt/random/image--dataset-path数据集路径--sharegpt-output-len/--random-input-len/--random-output-len/--random-range-ratioNone / None / None / 0.0与离线脚本含义一致--image-count/--image-resolution/--image-format/--image-content1 /1080p/jpeg/random图像数据集参数多模态压测分辨率支持4k/1080p/720p/360p预设或自定义heightxwidth--disable-stream/--disable-ignore-eosFalse / False关闭流式响应 / 关闭忽略 EOS--disable-warmupFalse跳过正式评测前的单请求预热预热失败会直接报错提示检查参数--extra-request-bodyNone以 JSON 字符串附加额外请求体字段如采样参数--output-fileNone自定义结果输出文件缺省自动生成带日期与后端名的文件名--seed1采样随机种子--disable-tqdmFalse关闭进度条--trust-remote-codeFalse信任远程代码后端与 API 端点的映射关系run_benchmark 实现lmdeploy/vllm/sglang-oai走/v1/completionslmdeploy-chat/vllm-chat/sglang-oai-chat走/v1/chat/completionssglang系走/generatetrt走/v2/models/ensemble/generate_stream。请求解析逻辑分别实现在 async_request_openai_completions 与 async_request_openai_chat_completions 中两者均逐块解析 SSE 流式数据记录首个 token 时间TTFT与相邻 token 间隔ITL。发送速率控制位于 get_requestrequest_rateinf时所有请求立刻发出否则每个请求发出后按指数分布asyncio.sleep(1/request_rate)模拟泊松到达。评测开始前默认发送一个请求做预热benchmark 函数确保引擎完成权重加载与显存初始化后再进入正式计时。数据集采样与请求生成逻辑三个脚本共享两套请求生成函数以 profile_pipeline_api.py 的实现为例ShareGPT 数据集--dataset-name sharegpt过滤掉对话轮数少于 2 的样本仅保留前两轮prompt completion丢弃prompt_len 4或output_len 4的过短样本丢弃prompt_len 1024的样本当未指定固定输出长度时还丢弃prompt_len output_len 2048的样本默认用 completion 的真实 token 数作为output_len也可用--sharegpt-output-len统一覆盖最终打印采样集合的输入 / 输出 token 总量便于复现与对比。random 数据集--dataset-name random先按[input_len * range_ratio, input_len]与[output_len * range_ratio, output_len]区间随机生成每个请求的目标长度再从 ShareGPT 数据集中抽取真实文本通过截断或循环填充对齐到目标输入长度保证文本分布接近真实语料源码注释指出纯随机整数 token 可能引发 NaN 问题因此默认走真实文本路径。image 数据集--dataset-name image仅在线脚本按--image-count生成随机或纯色图片以 base64 形式内嵌进请求体通过AutoProcessor计算「文本 token 视觉 token」的完整提示长度并分别统计text_prompt_len与vision_prompt_len用于区分文本与视觉部分的输入吞吐。指标解读从源码看 Profiler 的统计口径三个脚本的离线指标统一由 lmdeploy/profiler.py 中的Profiler与Session计算默认统计mean 与 P50/P75/P95/P99分位数Profiler(stream_output, [50, 75, 95, 99])。核心指标与计算逻辑compute_metrics 实现如下指标含义计算方式Output throughput (tok/s)输出 token 吞吐成功请求生成 token 总数 / 总耗时Input throughput (tok/s)输入 token 吞吐成功请求输入 token 总数 / 总耗时Request throughput (req/s)请求吞吐成功请求数 / 总耗时End-to-end Latency端到端延迟请求首个 tick 到最后一个 tick 的时间差Time to First Token (TTFT)首 token 延迟流式模式下首个 token 的 tick 时间非流式不统计Time per Output Token (TPOT)每输出 token 平均耗时末 tick 与首 tick 时间差 /生成 token 数 - 1非流式退化为全程耗时 / token 数Inter-token Latency (ITL)相邻输出 token 间隔流式 tick 时间序列的一阶差分Tokens per Tick每个 tick 产生的 token 数流式 tick 的 token 增量仅统计Session.SUCCESS且生成量达到req_output_len的请求Session 状态定义未达到目标长度的请求会被跳过避免因中途失败污染指标。离线脚本在profiler.summarize()中打印上述全部指标并以表格对齐输出同时通过save_csv()将结果追加写入 CSV结果导出实现。在线脚本的指标由 calculate_metrics 独立计算输出包括成功请求数、总输入 / 输出 token 数、请求吞吐、输入 / 输出 token 吞吐以及 TTFT / TPOT / ITL / E2E 的 mean、median、std、P99。此外还额外计算retokenized 输出 token 数——即对生成文本重新分词后的长度用于校验流式计数的准确性。结果默认以 CSV/JSONL 形式追加保存可通过--output-file指定路径。小结与评测建议综合三个脚本的源码实现可以总结出几条实用的评测建议明确评测目标再选脚本Pipeline API 反映真实应用端到端体验引擎 API 关注算力本身在线脚本反映服务化部署后的 SLATTFT/TPOT 分位数。三者指标口径不同不宜直接跨脚本对比。保证变量受控统一--seed、--concurrency、--num-prompts、--sharegpt-output-len等参数确保不同配置、不同引擎之间具备可比性在线评测还要固定--request-rate或使用--multi多档扫描观察吞吐-延迟曲线。善用 profiling 开关定位瓶颈--skip-tokenize/--skip-detokenize可剥离前后处理开销--stream-output开关决定 TTFT/ITL 是否纳入统计--cancel-rate可模拟真实场景中的客户端中断。调参优先关注显存与批处理--cache-max-entry-count、--cache-block-seq-len、--session-len、--concurrency共同决定 KV cache 容量与并发能力是影响吞吐上限的第一组参数。配套文档服务端启动细节见 docs/en/llm/api_server.md各脚本的更简略速查可参考 benchmark/README.md统一的参数定义与默认值见 lmdeploy/cli/utils.py多模态与长文本专项压测脚本如 autotest/benchmark/ 下的用例也可在此基础上扩展。赞分享人工智能大模型模型推理服务推理引擎本地部署模型量化【免费下载链接】lmdeployLMDeploy is a toolkit for compressing, deploying, and serving LLMs.项目地址https://gitcode.com/gh_mirrors/lm/lmdeploy点击查看免费下载相关推荐LMDeploy 性能基准测试指南profile_throughput / profile_restful_api / benchmark_guided 实战详解LMDeploy 性能基准测试指南profile_throughput / profile_restful_api / benchmark_guided 实战人工智能大模型模型推理服务推理引擎本地部署模型量化LMDeploy性能优化与基准测试LMDeploy性能优化与基准测试 LMDeploy提供了一套完整的推理性能基准测试工具集和优化方法论涵盖从单机推理到分布式服务的全方位性能评估。文章详细介绍人工智能大模型模型推理服务推理引擎本地部署模型量化gpui-kit 快速上手用一行依赖从零搭建 GPUI 跨平台桌面应用gpui kit 快速上手用一行依赖从零搭建 GPUI 跨平台桌面应用 gpui kit 是面向 GPUI 的一站式 Rust UI 工具包它把 GPUI、人工智能大模型模型推理服务推理引擎本地部署模型量化创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表