depyf
depyf 是一款专为 PyTorch 开发者设计的开源工具,旨在帮助用户深入理解并优化 PyTorch 编译器 torch.compile 的工作机制。许多用户在使用 torch.compile 时,常因其生成的字节码和内部实现细节如同“黑魔法”般难以捉摸,导致无法有效调试或提升代码性能。depyf 通过先进的 Python 反编译技术,将 torch.compile 生成的复杂字节码还原为可读性极高的 Python 源代码,让用户能够直观地看到编译器究竟做了什么。
与其他反编译工具相比,depyf 在多个 Python 版本(3.7 至 3.11)及 PyTorch 场景下均实现了 100% 的反编译成功率,填补了现有工具对 PyTorch 支持不足的空白。它特别适合需要深入底层原理的 AI 研究人员、框架开发者以及希望最大化模型推理性能的工程师使用。只需简单地将代码包裹在上下文管理器中,depyf 即可自动输出详细的源码信息,极大降低了学习门槛。作为 PyTorch 官方生态项目之一,depyf 与 PyTorch 团队紧密合作,建议搭配 PyTorch 2.2.0 及以上版本使用,以获得最佳体验。
使用场景
某深度学习算法工程师在尝试利用 torch.compile 加速自定义的复杂动态控制流模型时,遭遇性能不升反降的困境。
没有 depyf 时
- 编译过程如黑盒:面对
torch.compile生成的底层字节码,开发者完全无法直观理解编译器究竟对代码做了哪些变换或优化。 - 调试无从下手:当模型因动态分支(如
if b.sum() < 0)导致编译失败或回退到 eager 模式时,缺乏有效手段定位具体是哪行逻辑触发了问题。 - 盲目试错成本高:为了适配编译器,只能凭经验猜测并反复修改代码结构,依赖运气而非原理进行性能调优,严重拖慢研发进度。
- 现有工具失效:通用的反编译工具(如 uncompyle6)对新版 Python 及 PyTorch 特有的字节码支持极差,几乎无法还原出可读的源代码。
使用 depyf 后
- 源码透明可见:depyf 能将
torch.compile生成的复杂字节码完美反编译为人类可读的 Python 源代码,让内部优化逻辑一目了然。 - 精准定位瓶颈:通过查看 depyf _dump_出的源码,工程师能迅速发现动态控制流导致图断裂的具体位置,从而针对性地重构代码。
- 高效性能调优:基于清晰的编译视图,开发者可以有的放矢地调整算子写法,确保模型真正运行在优化后的计算图上,最大化加速收益。
- 全版本兼容支持:无论使用 Python 3.8 还是最新的 3.11,depyf 均能提供 100% 的反编译成功率,彻底解决工具链断裂问题。
depyf 将 torch.compile 从难以捉摸的“黑魔法”变成了透明可控的“白盒”,让开发者能够真正理解并驾驭 PyTorch 编译器的强大性能。
运行环境要求
未说明(工具用于分析 torch.compile,若被分析代码涉及 GPU 计算则需相应环境,但工具本身无特定显卡型号或显存要求)
未说明

快速开始
depyf自豪地成为 PyTorch 生态系统项目。更多详情请参阅公告博客 https://pytorch.org/blog/introducing-depyf/。
你是否曾因 torch.compile 的复杂性而感到不知所措?深入研究其内部机制,仿佛进入了一片黑魔法领域——字节码和 Python 内部细节让许多用户难以理解,从而阻碍了他们对 torch.compile 的掌握与灵活应用。
如果你也有同样的困扰,那么 depyf 或许会对你有所帮助。正如其标志所示,depyf 是一款利用 Python 高级特性(Python 蛇形符号)来揭示 PyTorch 编译器 torch.compile(PyTorch 标志)内部细节(齿轮符号)的工具,旨在帮助用户深入理解、灵活适应并优化代码(调试器符号),从而充分发挥其性能优势。
:warning: 本项目是在与 PyTorch 团队紧密合作下开发的。因此,它依赖于 PyTorch 中非常新的功能,以更好地支持对 torch.compile 的理解。请务必配合 PyTorch>=2.2.0 使用此项目(推荐使用 PyTorch 夜间版)。有关如何安装不同版本 PyTorch 的信息,请访问 PyTorch 官网。
:warning: 在开发过程中,我们广泛征求社区意见。你可能会在一些讨论论坛或社交媒体平台上找到早期的使用示例。请以最新文档为准,了解如何使用此工具。
为什么选择 depyf?
如果你想深入了解 torch.compile 生成的字节码,那么 depyf 可能是你的不二之选。我们测试了几款现有的反编译工具,它们在跨版本处理简单 Python 字节码时表现不佳,且对 PyTorch 的支持十分有限。
| 反编译工具 | Python 3.8 | Python 3.9 | Python 3.10 | Python 3.11 | PyTorch |
|---|---|---|---|---|---|
| decompyle3 | 90.6% (77/85) | × | × | × | × |
| uncompyle6 | 91.8% (78/85) | × | × | × | × |
| pycdc | 74.1% (63/85) | 74.1% (63/85) | 74.1% (63/85) | 67.1% (57/85) | 19.3% (27/140) |
| depyf | 100% (85/85) | 100% (85/85) | 100% (85/85) | 100% (85/85) | 100% (140/140) |
安装
稳定版:pip install depyf
夜间版(推荐):pip install git+https://github.com/thuml/depyf.git
使用方法
主要用法非常简单:只需将你的代码包裹在一个上下文管理器中即可:
import torch
from torch import _dynamo as torchdynamo
from typing import List
@torch.compile
def toy_example(a, b):
x = a / (torch.abs(a) + 1)
if b.sum() < 0:
b = b * -1
return x * b
def main():
for _ in range(100):
toy_example(torch.randn(10), torch.randn(10))
if __name__ == "__main__":
# main()
# 将要运行的代码包围在 `with depyf.prepare_debug` 中
import depyf
with depyf.prepare_debug("./dump_src_dir"):
main()
随后,你便可在 ./dump_src_dir 目录下查看 torch.compile 的所有详细信息。这些内容被组织如下:
- 每个使用
torch.compile的函数对应的full_code_for_xxx.py - 每个计算图相关的 Python 代码
__transformed_code_for_xxx.py - 每个 Python 字节码文件
__transformed_code_for_xxx.py.xxx_bytecode,以代码对象形式转储,可通过dill.load(open("/path/to/file", "wb"))加载。请注意,load函数可能会导入一些模块,如transformers,请确保已安装这些模块。 - 每个计算图及其优化对应的
__compiled_fn_xxx.py:Captured Graph:原始的前向计算图Joint Graph:来自AOTAutograd的前向后向联合图Forward Graph:来自AOTAutograd的前向图Backward Graph:来自AOTAutograd的后向图kernel xxx:来自 Inductor 的编译后的 CPU/GPU 内核封装。
我们在测试超过 100 个深度学习模型的过程中收集了 所有编译产物,你可以参考这些内容来了解 PyTorch 编译器的工作原理。
若想使用调试器逐步执行上述代码,只需再添加一个上下文管理器(并通过调试器启动脚本):
import torch
from torch import _dynamo as torchdynamo
from typing import List
@torch.compile
def toy_example(a, b):
x = a / (torch.abs(a) + 1)
if b.sum() < 0:
b = b * -1
return x * b
def main():
for _ in range(100):
toy_example(torch.randn(10), torch.randn(10))
if __name__ == "__main__":
import depyf
with depyf.prepare_debug("./dump_src_dir"):
main()
# 将要调试的代码包围在 `with depyf.debug()` 中
with depyf.debug():
main()
调用 depyf.debug() 会暂停程序,以便你设置断点;之后,你就可以使用调试器在上述指定的 ./dump_src_dir 目录下的文件中命中断点。
联系方式
如对 depyf 有任何疑问,欢迎随时提交问题!我们欢迎任何讨论、问题报告或 Pull Request。如有其他问题,也可联系 youkaichao@gmail.com。
引用 depyf
如果你认为 depyf 对你有所帮助,请在你的论文中引用它。
@article{you2024depyf,
title={depyf: Open the Opaque Box of PyTorch Compiler for Machine Learning Researchers},
author={Kaichao You and Runsheng Bai and Meng Cao and Jianmin Wang and Ion Stoica and Mingsheng Long},
year={2024},
eprint={2403.13839},
journal={arXiv},
primaryClass={cs.LG},
url={https://github.com/thuml/depyf}
}
版本历史
v0.20.02025/10/13v0.19.02025/04/20v0.18.02024/12/07v0.17.02024/08/10v0.16.02024/07/02v0.15.02024/05/18v0.14.02024/03/07v0.13.02023/12/18v0.12.02023/11/27v0.11.02023/10/23v0.9.02023/10/22v0.8.02023/10/18v0.7.02023/10/15v0.5.02023/10/09v0.3.02023/10/05v0.2.02023/09/02v0.1.22023/08/30v0.1.12023/08/29常见问题
相似工具推荐
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
everything-claude-code
everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
NextChat
NextChat 是一款轻量且极速的 AI 助手,旨在为用户提供流畅、跨平台的大模型交互体验。它完美解决了用户在多设备间切换时难以保持对话连续性,以及面对众多 AI 模型不知如何统一管理的痛点。无论是日常办公、学习辅助还是创意激发,NextChat 都能让用户随时随地通过网页、iOS、Android、Windows、MacOS 或 Linux 端无缝接入智能服务。 这款工具非常适合普通用户、学生、职场人士以及需要私有化部署的企业团队使用。对于开发者而言,它也提供了便捷的自托管方案,支持一键部署到 Vercel 或 Zeabur 等平台。 NextChat 的核心亮点在于其广泛的模型兼容性,原生支持 Claude、DeepSeek、GPT-4 及 Gemini Pro 等主流大模型,让用户在一个界面即可自由切换不同 AI 能力。此外,它还率先支持 MCP(Model Context Protocol)协议,增强了上下文处理能力。针对企业用户,NextChat 提供专业版解决方案,具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能,满足公司对数据隐私和个性化管理的高标准要求。
ML-For-Beginners
ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。
ragflow
RAGFlow 是一款领先的开源检索增强生成(RAG)引擎,旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体(Agent)能力相结合,不仅支持从各类文档中高效提取知识,还能让模型基于这些知识进行逻辑推理和任务执行。 在大模型应用中,幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构(如表格、图表及混合排版),显著提升了信息检索的准确度,从而有效减少模型“胡编乱造”的现象,确保回答既有据可依又具备时效性。其内置的智能体机制更进一步,使系统不仅能回答问题,还能自主规划步骤解决复杂问题。 这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统,还是致力于探索大模型在垂直领域落地的创新者,都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口,既降低了非算法背景用户的上手门槛,也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目,它正成为连接通用大模型与行业专有知识之间的重要桥梁。
