人工智能大模型模型推理服务推理引擎本地部署模型量化【免费下载链接】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),仅供参考
