1.pytorch2.0torch.compile真的源码使你的训练变快了吗?
2.亚马逊推出基于机器学习的代码助手codewhisperer,该产品
3.PyTorch Dynamo 初探:Python ByteCode 的动态修改
pytorch2.0torch.compile真的使你的训练变快了吗?
PyTorch 2.0的torch.compile功能旨在提升训练速度,但其背后复杂的源码操作使得理解及调试代码变得困难。为解决这一问题,源码一个Python字节码反编译器应运而生,源码帮助用户更轻松地解析字节码。源码
实现这一功能,源码cci指标修改源码首先需要安装depyf(pip install depyf)并在运行代码前设置环境变量export TORCH_LOGS="+dynamo,源码guards,bytecode"。运行代码后,源码用户可在熟悉的源码字节码输出后看到反编译的结果,以辅助理解torch.compile的源码作用。
另一种方法是源码通过交互式探索,利用jupyter notebook运行PyTorch代码。源码运行后,源码用户可通过explain函数查看PyTorch对代码的源码优化细节,包括守卫函数的源码条件、编译后代码、协议页源码编译子图及引用的其他函数。通过点击展开各项,用户可深入查看各个部分的细节。
使用torch.compile后,PyTorch不再执行原始函数代码,而是寻找满足守卫条件的编译后代码执行,或在条件不满足时生成新的编译代码。编译后的代码中调用的编译后子图函数,用户可通过点击查看源码,获得全面的细节信息。
在过去三个月里,作者与PyTorch团队进行了深入沟通,完成了反编译器与PyTorch的整合,以日志增强或交互式方式帮助理解PyTorch 2.0。通过持续维护depyf并使其支持Python 3.版本,16制源码作者期望它能成为用户理解torch.compile的强大工具。
欢迎试用depyf,如遇问题,请在GitHub issue区提出。通过这个工具,用户能够更深入地理解PyTorch 2.0的torch.compile功能,从而更高效地进行训练。
亚马逊推出基于机器学习的代码助手codewhisperer,该产品
Amazon CodeWhisperer
是一款AI编码配套应用程序,旨在IDE中生成整行代码和完整的函数代码建议,加速开发者完成更多工作。通过训练数十亿行代码,针对种编程语言提供即时代码建议,帮助基于注释生成代码、追踪开源参考并扫描安全漏洞。
Amazon CodeWhisperer在生成式AI时代革新编程范式,源码换反码解决传统工具在复杂性和新技术挑战下的局限。它在IDE内提供实时代码建议和反馈,提升开发者心流状态,减少查找外部资源的次数,测试显示使用CodeWhisperer的开发人员完成任务速度快%,成功率提升%。
智能代码生成显著提升效率,使用根基模型支持的生成式AI深度理解语义和上下文,为开发者提供相关且高质量的实时代码建议,覆盖从简单代码片段到复杂函数和类结构。
Carlos Aller Estévez利用CodeWhisperer的“自动完成”功能,只需写下方法签名和注释,例如“检查用户是否有特定路径权限”,CodeWhisperer就能生成代码,先解析资源路径的论坛源码utility父目录,再生成包含所有潜在父路径的列表,为后续权限验证做准备。生成代码与上下文高度匹配,考虑算法效率和维护性,Carlos只需简单检查父路径权限,即可完成功能实施。
CodeWhisperer在框架搭建方面也表现出色,BUILDSTR在IDE内直接生成高质量框架代码,与Amazon DynamoDB交互时,实时代码建议功能非常实用。原型设计阶段开发时间缩短%,代码扫描功能及时发现并修复安全漏洞,客户环境中发现漏洞数量减少%以上。
除了提高效率,CodeWhisperer在代码安全方面优势显著。内置安全扫描能力自动检测常见漏洞和加密库问题,实时识别安全隐患并提供修复建议,降低不安全加密实践风险。生成代码片段时进行来源分析,若代码与训练集相似,自动提供源代码库URL和许可证信息,降低使用风险。
CodeWhisperer的优势包括免费对个人用户开放,支持种编程语言,提供无限制代码建议,经过数十亿代码训练,能够提供各种应用场景和复杂性级别的高质量代码建议。使用CodeWhisperer的开发人员完成任务速度平均快%,显著提升生产效率。安全扫描功能自动识别OWASP常见漏洞和加密库问题,提供修复建议,显著提升代码安全性。
这些功能集共同构成CodeWhisperer的强大和全面特性,简化现代复杂开发,让开发者专注于核心任务和创新。内置安全扫描功能为开发人员提供额外保障,显著提升工作效率和代码质量。
PyTorch Dynamo 初探:Python ByteCode 的动态修改
深度学习框架在编译优化时,通常会先形成逻辑计算图,再对计算图进行修改,最后执行修改后的计算图。计算图生成有两种方法:一种是基于跟踪tensor执行路径的trace tensor,另一种是基于解析Python文本代码的抽象语法树(AST)。
CPython解释器执行Python代码时,首先将源码解析成AST,然后生成并优化字节码(ByteCode),最后在虚拟机中执行字节码。基于AST解析的计算图生成发生在第一阶段,而基于trace tensor的计算图生成则在第三阶段之后。
TorchDynamo的独特之处在于它在字节码执行前动态修改Python字节码,因此最终执行的是修改后的字节码。这类似于DynamoRIO项目,它可以在x机器码上动态修改指令。
TorchDynamo工作原理是动态设置自定义的字节码框架,该框架允许在执行字节码之前修改字节码。其主要优点是最大程度地优化了代码开发体验,使编译优化变得更容易。但这种设计并未改进寻求最佳性能或方便静态部署的目标。
Python的标准执行流程是从Python文本代码到AST,再到字节码。通过示例展示这一流程,包括使用ast组件生成AST,使用compile函数编译字节码,以及使用exec系统函数执行字节码。在执行字节码之前,可以通过代码对象的指针检查生成的字节码,并通过打印字节码的指令来理解执行流程。
TorchDynamo的主要改变是在标准Python执行流程中支持修改字节码执行前的字节码。它允许将一段字节码转换为FX图,然后调用用户自定义的FX图进行执行逻辑的修改,生成一个可编译的执行函数。将修改后的字节码替换为函数调用字节码,实现编译优化功能。
TorchDynamo在字节码执行前进行动态修改,每次执行都会走到这个步骤,可以选择是否进行字节码修改,以及进行何种修改,支持缓存和复用修改结果。这体现了Dynamo的动态特性。
TorchDynamo通过修改Python字节码实现编译优化,依赖于PEP 提供的执行自定义框架评估API。通过设置自定义的评估框架函数,可以在字节码执行前执行自定义的字节码。TorchDynamo正是通过在进入Dynamo作用域时设置自定义的评估框架函数实现动态修改字节码。
总结了Python执行流程和TorchDynamo的工作原理,包括修改字节码的实现细节。深入理解了Python字节码的生成、执行流程以及TorchDynamo如何在这一过程中动态修改字节码以实现编译优化。