新闻详情

新闻详情

首页 / 资讯中心 / 详情

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

发布时间:2026/11/12 16:16:27来源:尧图网络
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

相关资讯

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

较早相关资讯

最新相关资讯

【外设】之大彩串口显示屏 2026/11/11 13:52:51

【外设】之大彩串口显示屏

大彩串口屏初步使用 1 .官网下载 STM32 屏幕 GUI 设计资料 http://www.gz-dc.com/category/typeid/4112 找到 STM32 Keil 工程,移植相关代码因项目而异进行移植,由于项目简单,本人只对用到的指令接口进行修改。 比如:注意事项&…

阅读更多 →
无法下载Windows系统iso文件 2026/11/10 19:42:40

无法下载Windows系统iso文件

当我遇到这个问题的时候,我打开了一个网站: 登录 然后我打算下载的时候: 突然那个官方的连接就可以下载了:

阅读更多 →
【清华代码熊】DeepSeek V4.1 Flash 后训练详解 2026/11/12 9:50:02

【清华代码熊】DeepSeek V4.1 Flash 后训练详解

📌 上期解析了 DeepSeek V4.1 Flash 模型架构改进,本期解析 DeepSeek V4.1 Flash 预训练/后训练技术: 🌟 预训练:45T 文本 多模态混合语料、直接训练 sparse attention(取消 DeepSeek V4 的 dense 冷启动&…

阅读更多 →
Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ... 2026/11/12 9:25:38

Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ...

文章主要内容和创新点 主要内容 本文聚焦于多模态大语言模型(MLLM)强化学习(RL)训练中的效率问题,提出了一个名为Shuffle-R1的框架。研究发现,当前RL训练存在两个关键缺陷: 优势值坍缩(Advantage Collapsing):批次中大多数优势值集中在零附近,导致有效梯度信号被淹…

阅读更多 →
PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction 2026/11/12 15:57:44

PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction

一、文章主要内容总结 本文聚焦于利用大型语言模型(LLMs)实现个人身份信息(PII)脱敏的研究,旨在解决传统脱敏方法(如基于规则的系统、领域特定命名实体识别(NER)模型)泛化能力差、跨格式/跨语境适应性弱的问题。 研究通过全面评估多种LLM架构(包括密集型LLM(D-LLM…

阅读更多 →
LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model 2026/11/10 17:14:10

LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model

文章主要内容和创新点 主要内容 本文聚焦于二进制图像-文本相关性评估任务(判断图像与文本“相关”或“不相关”),针对该任务中文本格式多样、相关性定义随场景变化等挑战,提出了基于多模态大语言模型(MLLM)的解决方案LLaVA-RE。 模型设计:LLaVA-RE基于LLaVA 1.5架构,…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

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

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