Leo
欢迎大家收听本期播客,我是Leo。在今天的节目中,我们将聚焦于PyTorch中的功能化这个话题。功能化在过去一年中引起了很多关注,特别是随着编译器在PyTorch中的日益重要。我们有幸邀请到BD Hirsh,她是PyTorch的开发者,来和我们分享更多相关的见解。BD,欢迎你!
BD Hirsh
谢谢你,Leo!很高兴能来这里和大家聊聊功能化。功能化是PyTorch核心中一项基础设施,它主要是为了缓解PyTorch在表达性和编译能力之间的矛盾。我们知道,PyTorch非常灵活,但在编译时,编译器对可变操作的支持并不好。
Leo
是的,功能化的确帮助我们消除了这种矛盾。听起来功能化就像是一种转型的方法,它能够将一个程序转变为没有可变操作的版本,从而使编译器能够更好地理解和优化代码。
BD Hirsh
确实如此!功能化实际上是一个程序到程序的转换,给定一个包含PyTorch操作的程序,功能化将返回一个新函数,且语义相同但没有可变操作。这就意味着编译器能得到一个完全功能化的版本,简化了它的处理逻辑。
Leo
这真是太棒了!那我们能不能来聊聊功能化的历史背景?它是如何在PyTorch中逐渐发展的?
BD Hirsh
当然。功能化的起源可以追溯到三年前的PyTorch/XLA项目,当时团队需要一种方法将包含可变操作的PyTorch程序转化为没有可变操作的HLO IR。这项工作是由Davide Libenzi主导的,后来在2021年进行了更广泛的扩展,最终将功能化逻辑整合到了PyTorch核心中。
Leo
这真是一个令人印象深刻的历程。功能化如何适应PyTorch 2.0的整个架构?能给我们举几个案例吗?
BD Hirsh
当然可以。在PT2架构中,功能化作为AOT Autograd的一部分,帮助处理复杂的前向图和反向图。我们有几个有趣的案例,比如处理输入的可变性和别名关系。
Leo
听起来很复杂。能否分享一个具体的案例来帮助我们理解这些概念?
BD Hirsh
当然!让我们来看一个关于图断裂和输入可变性的案例。这实际上发生在许多真是模型中,像hf_Longformer模型。当这段代码运行时,会产生一个包含可变输入的图。
Leo
非常好!这种情况下,如何保证输入的可变性在编译时不会造成问题?
BD Hirsh
AOT Autograd会创建一个没有可变操作的图,同时确保输入的可变性得以保留。这样,无论是前向图还是反向图,它都能够有效地进行优化。
Leo
这真是太精彩了!功能化在移动设备和XLA中的应用又是怎样的呢?
BD Hirsh
在移动设备方面,功能化确保了导出的图中的张量是连续的,这对性能至关重要。至于XLA,正在逐步迁移到使用功能化,这将解决许多已知的错误和问题。
Leo
听起来像是一个不断演进的过程。最后,你认为功能化在未来的发展方向是什么呢?
BD Hirsh
未来的工作包括处理输入可变性、为自定义操作提供支持,以及改进针对可变输入的性能优化等。功能化将在更广泛的应用中发挥重要作用。
Leo
播客主持人
BD Hirsh
PyTorch开发者