首页/新闻资讯/正文详情

LMDeploy PyTorchEngine 性能剖析指南:PyTorch Profiler、Nsight System 与 Ray Timeline 全解

发布时间:2026/9/26 7:19:58 来源:云帆数科 栏目:资讯中心
LMDeploy PyTorchEngine 性能剖析指南:PyTorch Profiler、Nsight System 与 Ray Timeline 全解
人工智能大模型模型推理服务推理引擎本地部署模型量化【免费下载链接】lmdeployLMDeploy is a toolkit for compressing, deploying, and serving LLMs.项目地址https://gitcode.com/gh_mirrors/lm/lmdeploy点击查看免费下载导读LMDeploy 的 PyTorchEngine 内置了多套性能剖析Profiling工具用于量化推理引擎在 CPU、GPU 各阶段的耗时分布帮助开发者定位 Prefill、Decode、KV Cache、通信与调度等环节的性能瓶颈。本文以官方文档docs/en/advance/pytorch_profiling.md为主线结合lmdeploy/pytorch目录下的源码实现系统讲解PyTorch ProfilerChrome Trace、NVIDIA Nsight System单卡与多卡 DP/TP/EP 场景、Ray Timeline三套剖析方案的环境变量、启动方式、输出产物与底层实现细节并给出实际排查建议。一、PyTorch Profiler内置于引擎的 Chrome Trace 剖析PyTorchEngine 已集成 PyTorch 官方的torch.profiler无需修改业务代码仅通过环境变量即可开启。该方案适用于 pipeline 推理与 API Server 两种启动方式。1.1 环境变量总览环境变量含义默认值源码确认LMDEPLOY_PROFILE_CPU是否采集 CPU 侧活动ProfilerActivity.CPUFalseLMDEPLOY_PROFILE_CUDA是否采集 CUDA 侧活动ProfilerActivity.CUDAFalseLMDEPLOY_PROFILE_DELAY启动后延迟多少秒开始采样0LMDEPLOY_PROFILE_DURATION采样持续多少秒0表示不自动停止直到程序退出-1LMDEPLOY_PROFILE_OUT_PREFIX输出文件前缀每个 rank 单独一个文件lmdeploy_profile_LMDEPLOY_PROFILE_USE_GZIP是否输出 gzip 压缩的 trace1压缩为.json.gz0输出明文.jsonTrue官方文档给出的典型开启方式# enable profile cpu export LMDEPLOY_PROFILE_CPU1 # enable profile cuda export LMDEPLOY_PROFILE_CUDA1 # profile would start after 3 seconds export LMDEPLOY_PROFILE_DELAY3 # profile 10 seconds export LMDEPLOY_PROFILE_DURATION10 # prefix path to save profile files export LMDEPLOY_PROFILE_OUT_PREFIX/path/to/save/profile_ # save gzip-compressed traces by default; set to 0 for uncompressed JSON export LMDEPLOY_PROFILE_USE_GZIP1设置完成后直接以常规方式启动 pipeline 或 API Serverlmdeploy serve api_server等程序退出后剖析数据即会落盘到LMDEPLOY_PROFILE_OUT_PREFIX指定的路径。1.2 源码实现环境变量如何驱动 Profiler所有剖析相关环境变量在lmdeploy/pytorch/envs.py中被统一解析为模块级常量torch_profile_cpu env_to_bool(LMDEPLOY_PROFILE_CPU, False)torch_profile_cuda env_to_bool(LMDEPLOY_PROFILE_CUDA, False)torch_profile_delay env_to_int(LMDEPLOY_PROFILE_DELAY, 0)torch_profile_duration env_to_int(LMDEPLOY_PROFILE_DURATION, -1)torch_profile_output_prefix os.getenv(LMDEPLOY_PROFILE_OUT_PREFIX, lmdeploy_profile_)torch_profile_use_gzip env_to_bool(LMDEPLOY_PROFILE_USE_GZIP, True)布尔型环境变量通过env_to_bool解析支持true/1/yes/on与false/0/no/off两种取值集合lmdeploy/pytorch/envs.py。剖析器的核心逻辑位于lmdeploy/pytorch/engine/model_agent/profiler.py的AgentProfiler类_build_profiler()根据LMDEPLOY_PROFILE_CPU/LMDEPLOY_PROFILE_CUDA分别向torch.profiler.profile(activities...)追加ProfilerActivity.CPU与ProfilerActivity.CUDA若两者均为关闭状态则不创建 profiler因此完全不影响性能。profile_task()先asyncio.sleep(self.delay)完成延迟再profiler.start()当duration 0时只 start 不自动 stop由进程退出时的dump()收尾否则在duration秒后调用dump()。dump()调用profiler.export_chrome_trace()输出文件名为{prefix}{rank}{suffix}其中suffix由use_gzip决定为.json.gz或.json见lmdeploy/pytorch/engine/model_agent/profiler.py#L51-L70。1.3 生命周期挂载何时采集、何时落盘AgentProfiler挂在引擎的 ModelAgent 生命周期上lmdeploy/pytorch/engine/model_agent/agent.py引擎启动时self.profiler AgentProfiler(self.dist_ctx, self.stream)并create_task()剖析任务进入事件循环agent.py#L1275-L1276。引擎停止时stop()与stop_async()中都会调用self.profiler.dump()stop_async在 dump 前会轮询等待 CUDA stream 排空while not self.stream.query(): await asyncio.sleep(1)确保 GPU 侧事件全部完成后再导出 traceagent.py#L1292-L1324。从源码结构看这意味着若duration 0trace 会在程序退出/引擎停止时统一导出适合整段运行期的宏观观察若设置了正数duration剖析会在采样满duration秒后提前落盘即使后续程序仍继续运行也能拿到确定的采样窗口。1.4 一个值得注意的限制AgentProfiler.__init__中有一段防御逻辑当数据并行度dp 1且duration 0时会打印Do not support duration0 for dp 1.的警告并将 profiler 置为Noneprofiler.py#L32-L34。也就是说多 DP 场景下必须显式设置大于 0 的LMDEPLOY_PROFILE_DURATION否则不会产出 trace。多 DP 的 rank 会分别导出各自的文件文件名含 rank 编号便于对比不同数据并行副本之间的负载差异。1.5 产物解读导出文件是标准 Chrome Trace 格式.json 或 .json.gz支持在 Chrome/Edge 地址栏打开chrome://tracing加载文件查看时间轴火焰图使用perfetto.dev在线打开本地数据无需上传即可解析用 Pythonjson先解压 gzip自行做统计脚本聚合各 kernel 的耗时占比。对于.json.gz文件可用gzip -d profile_0.json.gz解压后分析。二、Nsight System剖析 NVIDIA 设备除内置的 PyTorch Profiler 外LMDeploy 还支持 NVIDIA Nsight Systemnsys用于观测 CUDA kernel、cuDNN、cuBLAS、NVTX 等底层事件。2.1 单 GPU 场景直接使用 nsys profile单卡场景最简单直接用nsys包裹 Python 进程即可nsys profile python your_script.py执行结束后nsys默认生成report1.nsys-rep等文件可用nsys stats查看 kernel 统计或用 Nsight Systems GUI 打开。2.2 多 GPU 场景通过 Ray runtime_env 注入当使用数据并行DP、张量并行TP或专家并行EP等多卡方案时引擎的分布式 worker 由 Ray 拉起此时不要用nsys profile包裹启动命令而是设置以下环境变量# enable nsight system export LMDEPLOY_RAY_NSYS_ENABLE1 # prefix path to save profile files export LMDEPLOY_RAY_NSYS_OUT_PREFIX/path/to/save/profile_随后照常启动脚本或 API Server这里不要再用nsys profile每个 Ray worker 进程都会被自动纳入 nsys 剖析。剖析结果保存在LMDEPLOY_RAY_NSYS_OUT_PREFIX下若未配置该前缀可在/tmp/ray/session_xxx/nsight目录中找到结果。从源码看多卡注入发生在lmdeploy/pytorch/engine/executor/ray_executor.py_update_runtime_env_nsys()向 Ray 的runtime_env写入nsight配置t: cuda,cudnn,cublas,nvtx追踪 CUDA、cuDNN、cuBLAS 与 NVTX 事件、o: worker_process_%p输出文件名带进程号若配置了LMDEPLOY_RAY_NSYS_OUT_PREFIX则拼接前缀、stop-on-exit: trueray_executor.py#L86-L97。创建 GPU worker 时若_envs.ray_nsys_enable为真则调用_update_runtime_env_nsys(runtime_env)把 nsight 配置注入每个 actor 的运行环境ray_executor.py#L742-L756。这种做法的意义在于DP/TP/EP 场景下每个 rank 都是独立的 Ray actor 进程只有逐个注入 nsys 配置才能保证所有 worker 的 GPU 活动都被记录且每个进程的输出文件因%p进程号而不互相覆盖。三、Ray Timeline观测分布式调度与执行LMDeploy 使用 Ray 支撑多设备部署Ray 自身提供 timeline 导出能力可用来观察 actor 的调度、任务执行与数据流。export LMDEPLOY_RAY_TIMELINE_ENABLE1 export LMDEPLOY_RAY_TIMELINE_OUT_PATH/path/to/save/timeline.json源码中对应两处逻辑lmdeploy/pytorch/envs.py#L136-L138与lmdeploy/pytorch/engine/executor/ray_executor.pyray_timeline_enable env_to_bool(LMDEPLOY_RAY_TIMELINE_ENABLE, False)ray_timeline_output_path os.getenv(LMDEPLOY_RAY_TIMELINE_OUT_PATH, ray_timeline.json)未设置时默认写到当前目录的ray_timeline.jsonRayExecutor.release()中在释放资源时调用ray.timeline(_envs.ray_timeline_output_path)ray_executor.py#L533-L536因此 timeline 会在引擎释放进程收尾阶段生成。生成的timeline.json同样可用 Chrome Tracing 或 Perfetto 打开重点观察跨 rank 的通信、PlacementGroup 调度、worker 启停耗时等分布式层面信息与 PyTorch Profiler 的 kernel 级数据互补。四、三套方案选型建议场景推荐工具关键环境变量单卡模型、pipeline / API Server 宏观耗时分析PyTorch ProfilerLMDEPLOY_PROFILE_CPU1、LMDEPLOY_PROFILE_CUDA1、LMDEPLOY_PROFILE_DURATION10关注 CUDA kernel 级细节kernel 耗时、显存、流并发Nsight System单卡直接nsys profileLMDEPLOY_RAY_NSYS_ENABLE1、LMDEPLOY_RAY_NSYS_OUT_PREFIX...多卡DP/TP/EP 多卡下的分布式调度与跨进程交互Ray TimelineLMDEPLOY_RAY_TIMELINE_ENABLE1、LMDEPLOY_RAY_TIMELINE_OUT_PATH...实践要点剖析本身会显著拖慢推理源码中 Profiler 启动时会打印Profiling might harm performance的警告建议只在性能调优会话中开启并在生产部署时关闭全部剖析相关环境变量。采集窗口建议通过LMDEPLOY_PROFILE_DELAY跳过启动与 warmup 阶段用LMDEPLOY_PROFILE_DURATION固定采样窗口避免把预热、权重加载等与推理无关的开销混入分析数据。多 DP 场景下使用 PyTorch Profiler 时必须设置大于 0 的LMDEPLOY_PROFILE_DURATION否则 profiler 会被源码主动禁用。三个工具可叠加使用PyTorch Profiler 看引擎内算子耗时Nsight System 看底层 CUDA kernel 与显存行为Ray Timeline 看分布式调度三者结合可覆盖从算子到集群的全链路。五、深入阅读官方剖析文档docs/en/advance/pytorch_profiling.md环境变量定义与默认值lmdeploy/pytorch/envs.pyPyTorch Profiler 实现AgentProfilerlmdeploy/pytorch/engine/model_agent/profiler.pyProfiler 生命周期挂载点lmdeploy/pytorch/engine/model_agent/agent.pyNsight 注入与 Ray Timeline 导出lmdeploy/pytorch/engine/executor/ray_executor.py引擎相关单元测试目录含ray_timeline_enable的 monkeypatch 用例tests/pytorch/engine赞分享人工智能大模型模型推理服务推理引擎本地部署模型量化【免费下载链接】lmdeployLMDeploy is a toolkit for compressing, deploying, and serving LLMs.项目地址https://gitcode.com/gh_mirrors/lm/lmdeploy点击查看免费下载相关推荐Ray Compiled Graph 性能剖析指南PyTorch Profiler、Nsight 与编译图可视化Ray Compiled Graph 性能剖析指南PyTorch Profiler、Nsight 与编译图可视化 导读 Ray Compiled Graph人工智能分布式训练强化学习任务调度模型推理服务后端Ray Profiling 实战指南用 py-spy、memray、PyTorch Profiler 与 Nsight 定位分布式应用的性能瓶颈Ray Profiling 实战指南用 py spy、memray、PyTorch Profiler 与 Nsight 定位分布式应用的性能瓶颈 Ray 的人工智能分布式训练强化学习任务调度模型推理服务后端Evolver守护进程故障排查心跳韧性、健康检查与自动重启机制Evolver守护进程故障排查心跳韧性、健康检查与自动重启机制 Evolver GitHub_Trending/evolv/evolver是 GEP 驱动人工智能AI AgentAgent 记忆CLI上一篇testssl.sh配置文件详解自定义扫描行为的方法下一篇量化交易中的量化投资模型风险模型失效和参数漂移创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

jc 的 PostgreSQL 密码文件(.pgpass)解析器:从明文凭据到结构化 JSON
jc 的 PostgreSQL 密码文件(.pgpass)解析器:从明文凭据到结构化 JSON

开发工具 【免费下载链接】jc CLI tool and python library that converts the output of popular command-line tools, file-types, and common strings to JSON, YAML, or Dictionaries. This allows piping of output to tools like jq and simplifying automation scripts.… · 2026/9/26 7:19:52

趋势顶底 狂抓大黑马 无未来 成功率
趋势顶底 狂抓大黑马 无未来 成功率

VAR1:(CLOSE-REF(CLOSE,1))/REF(CLOSE,1)*100; VAR2:(CLOSE-LLV(LOW,26))/(HHV(HIGH,26)-LLV(LOW,26))*100; VAR3:SMA(VAR2,8,1); 阳线:EMA(VAR3,3),COLORFFDDCC,LINETHICK2; A3:EMA(阳线,3),COLORFFBBCC; A4:EMA(A3,3),COLORFF99CC; A5:EMA(A4,3),COLORFF55CC; A6:EMA(A5,3),C… · 2026/9/26 7:19:52

DeepCTR 模型方法完全指南:compile、fit、evaluate、predict 与生成器训练实战解析
DeepCTR 模型方法完全指南:compile、fit、evaluate、predict 与生成器训练实战解析

人工智能深度学习机器学习 【免费下载链接】DeepCTR Easy-to-use,Modular and Extendible package of deep-learning based CTR models . 项目地址: https://gitcode.com/gh_mirrors/de/DeepCTR 点击查看 免费下载 本文以 DeepCTR 官方文档 docs/source/Model_Meth… · 2026/9/26 7:19:52

Twig `is odd` 奇偶测试:语法、源码实现与沙箱安全用法详解
Twig `is odd` 奇偶测试:语法、源码实现与沙箱安全用法详解

后端 【免费下载链接】Twig Twig, the flexible, fast, and secure template language for PHP 项目地址: https://gitcode.com/gh_mirrors/tw/Twig 点击查看 免费下载 导读 odd 是 Twig 模板语言内置的一个数值测试(test),用于… · 2026/9/26 7:59:02

Baserow 自托管无代码数据库完整教程:从建表到自动化系统只需 3 步
Baserow 自托管无代码数据库完整教程:从建表到自动化系统只需 3 步

Baserow 自托管无代码数据库完整教程:从建表到自动化系统只需 3 步 【免费下载链接】baserow Build databases, automations, apps & agents with AI — no code. Open source platform available on cloud and self-hosted. GDPR, HIPAA, SOC 2 compliant. Bes… · 2026/9/26 7:58:56

心脏病数据分析系统:Java全栈实战拆解与重难点解析
心脏病数据分析系统:Java全栈实战拆解与重难点解析

心脏病数据分析系统这类项目,本质上是一个典型的 Java 全栈实战案例,但又不完全是“增删改查脚手架”。它真正的技术含量集中在统计聚合、关联分析、可视化报表和医疗数据的处理细节上。如果你是因为找毕设参考、做技术练手、或者想转行医疗信息化方向而… · 2026/9/26 7:58:55

一次推送跑完 3 个阶段:Baserow CI/CD 流水线与 Docker 镜像构建拆解
一次推送跑完 3 个阶段:Baserow CI/CD 流水线与 Docker 镜像构建拆解

一次推送跑完 3 个阶段:Baserow CI/CD 流水线与 Docker 镜像构建拆解 【免费下载链接】baserow Build databases, automations, apps & agents with AI — no code. Open source platform available on cloud and self-hosted. GDPR, HIPAA, SOC 2 compliant. B… · 2026/9/26 7:58:55

物联网无线收发芯片选型指南:Sub-1G与2.4G方案对比及实战避坑
物联网无线收发芯片选型指南:Sub-1G与2.4G方案对比及实战避坑

1. 物联网无线收发芯片的底层逻辑与方案选型思路搞物联网硬件的人都有一个共识:有线方案再稳,也架不住场景碎片化。你不可能给每台共享单车拉根网线,也不可能给农田里的土壤传感器铺光纤。无线收发芯片就是解决“最后一百米”甚至“最后十公里… · 2026/9/26 7:58:55

Win11共享打印句柄无效(0x00000012)故障深度解析
Win11共享打印句柄无效(0x00000012)故障深度解析

1. 这不是蓝屏,但比蓝屏更让人抓狂:一句“句柄无效”如何瘫痪整个办公室打印链2026年9月某个周一上午9:17,行政部小张刚把季度报表发到共享打印机队列,屏幕右下角突然弹出红色警告框:“操作失败:句柄无效&a… · 2026/9/26 7:58:55

数据库课后习题答案别硬背:当测试用例集刷,效率翻倍
数据库课后习题答案别硬背:当测试用例集刷,效率翻倍

简介:万常选版《数据库原理与设计》课后习题答案资源,覆盖第2至6章及第9章,适合正在学习关系模型、数据库建模、关系数据理论与模式求精的本科生、自学者作为复习与自测材料。压缩包共7个文件,含3个doc参考答案、2个sql示例脚本、… · 2026/9/26 0:00:21

OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置
OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 0:00:40

向下兼容与向上兼容:接口设计中的兼容性策略与工程实践
向下兼容与向上兼容:接口设计中的兼容性策略与工程实践

一次版本升级事故,是很多团队绕不过去的坎。线上环境里,服务端明明已经上线了新版接口,老的移动端还在照着旧文档传参数。请求一到网关,校验直接拒绝,用户操作失败,客服群炸了锅,开发群里开始互… · 2026/9/26 0:00:46

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码