新闻详情

新闻详情

首页 / 资讯中心 / 详情

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

发布时间:2026/9/26 7:20:00来源:尧图网络
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),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

SoC低功耗唤醒失败排查:PLL已lock设备为何仍无响应 2026/9/26 8:14:33

SoC低功耗唤醒失败排查:PLL已lock设备为何仍无响应

1. 一个让无数嵌入式工程师抓狂的深夜现场凌晨两点,示波器上 PLL 的 lock 信号稳稳拉高,时钟树看起来一切正常,电源管理寄存器读回来也显示各个电源域已经上电,可设备就是躺在那里一动不动,串口没有任何打印&#xff0…

阅读更多 →
JDK环境变量配置终极指南:JAVA_HOME与PATH协同原理 2026/9/26 8:14:32

JDK环境变量配置终极指南:JAVA_HOME与PATH协同原理

1. 这不是“又一篇JDK安装教程”,而是一份能让你彻底摆脱环境变量焦虑的实操手册 你点开这篇内容,大概率正卡在某个环节:刚下载完jdk-17.0.8_windows-x64_bin.exe却双击没反应;在系统变量里反复粘贴 C:\Program Files\Java\jdk-…

阅读更多 →
GTA6未至硬件先涨:显卡内存固态涨价真相与装机策略 2026/9/26 8:14:13

GTA6未至硬件先涨:显卡内存固态涨价真相与装机策略

1. 游戏八字没一撇,硬件价格倒先起飞了这几天不少游戏群和硬件群都在传同一件事:GTA6 具体发售日期官方始终没给准话,可大家发现手里的装机配置单悄悄变贵了。一开始我以为是错觉,毕竟距离游戏发售少说还有一年半载,直…

阅读更多 →
Claude命令行工作流:用Shell构建轻量级AI编码助手 2026/9/26 8:14:12

Claude命令行工作流:用Shell构建轻量级AI编码助手

1. 项目概述:一个被误读却真实存在的开源现象“一年时间从 0 到 133K star,浅谈cc-switch”——这个标题乍看像极了某款爆火AI工具的传奇成长史,但事实是:GitHub 上并不存在名为cc-switch的官方开源项目,也无权威组织、…

阅读更多 →
Windows netsh wlan show命令实战指南:Wi-Fi故障诊断核心技巧 2026/9/26 8:14:06

Windows netsh wlan show命令实战指南:Wi-Fi故障诊断核心技巧

1. 为什么一行命令就能揪出Wi-Fi连不上、信号弱、认证失败的根因?你有没有遇到过这样的场景:早上到办公室,笔记本一开机,Wi-Fi图标上挂着一个黄色感叹号;或者在家追剧正酣,突然卡顿、掉线,手机能…

阅读更多 →
VPet虚拟桌宠模拟器:从安装配置到MOD开发与性能调优全攻略 2026/9/26 8:14:06

VPet虚拟桌宠模拟器:从安装配置到MOD开发与性能调优全攻略

1. 为什么我要折腾一个桌面宠物 第一次接触 VPet 是在一个技术群里,有人发了一张截图:一只像素风格的小人坐在任务栏上,旁边还飘着一个状态面板,显示着“饥饿值”“心情值”“体力值”。当时我以为这只是个普通的桌面挂件&#xf…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉