Skip to main content
QUICK REVIEW

[论文解读] JANUS: Fast and Flexible Deep Learning via Symbolic Graph Execution of Imperative Programs

Eunji Jeong, Sung‐Woo Cho|arXiv (Cornell University)|Dec 4, 2018
Parallel Computing and Optimization Techniques被引用 9
一句话总结

JANUS 是一个深度学习系统,可将命令式 Python 程序编译为符号数据流图,实现在保持命令式编程灵活性的同时实现高性能执行。通过静态分析控制流和类型等动态特性,JANUS 实现了与符号框架(例如 TensorFlow)相当的训练速度,同时支持动态、用户友好的代码。

ABSTRACT

The rapid evolution of deep neural networks is demanding deep learning (DL) frameworks not only to satisfy the requirement of quickly executing large computations, but also to support straightforward programming models for quickly implementing and experimenting with complex network structures. However, existing frameworks fail to excel in both departments simultaneously, leading to diverged efforts for optimizing performance and improving usability. This paper presents JANUS, a system that combines the advantages from both sides by transparently converting an imperative DL program written in Python, the de-facto scripting language for DL, into an efficiently executable symbolic dataflow graph. JANUS can convert various dynamic features of Python, including dynamic control flow, dynamic types, and impure functions, into elements of a symbolic dataflow graph. Experiments demonstrate that JANUS can achieve fast DL training by exploiting the techniques imposed by symbolic graph-based DL frameworks, while maintaining the simple and flexible programmability of imperative DL frameworks at the same time.

研究动机与目标

  • 解决深度学习框架中长期存在的性能与可用性之间的权衡问题。
  • 在不牺牲灵活性的前提下,实现对动态、命令式深度学习程序的高效执行。
  • 在符号执行框架中支持复杂动态特性(如动态控制流、动态类型和非纯函数)。
  • 通过结合两者的优点,弥合命令式框架(例如 PyTorch)与符号框架(例如 TensorFlow)之间的差距。
  • 提供透明的编译管道,使研究人员能够编写自然的 Python 代码,同时实现高速训练。

提出的方法

  • 解析并分析用于深度学习的命令式 Python 代码,以提取符号计算图。
  • 通过将动态控制流结构(例如 if-else、循环)视为图中的条件或迭代操作,实现符号执行。
  • 通过在程序的静态分析过程中推断和传播类型信息,处理动态类型。
  • 将非纯函数(例如具有副作用的操作)表示为带有受控副作用的图节点,以保持正确性。
  • 使用传统符号框架中的技术(如内核融合和内存复用)优化生成的符号图。
  • 将编译后的图与高性能后端集成,以实现高效的 GPU 执行。

实验结果

研究问题

  • RQ1是否可以高效地将具有动态控制流的命令式深度学习程序编译为符号数据流图,同时不损失表达能力?
  • RQ2在符号执行框架中,动态类型和非纯函数在多大程度上可以被支持而不导致性能下降?
  • RQ3命令式代码的符号编译是否能在保持命令式编程可用性的同时,实现与原生符号框架相当的训练速度?
  • RQ4该系统是否能够高效处理具有复杂动态结构(例如动态计算图)的真实世界深度学习模型?
  • RQ5在标准基准测试中,JANUS 的性能与命令式框架(例如 PyTorch)和符号框架(例如 TensorFlow)相比如何?

主要发现

  • JANUS 实现了与 TensorFlow 等符号框架相当的训练速度,证明了动态特性不会导致性能损失。
  • 该系统成功编译了具有动态控制流和动态类型的模型,实现了对复杂、用户自定义神经网络架构的完整支持。
  • 实验表明,JANUS 在包括循环神经网络和动态图网络在内的多样化深度学习工作负载中均保持了高性能。
  • 符号图编译过程引入的开销极小,执行时间与原生符号框架相当。
  • JANUS 使研究人员能够编写自然、可读的 Python 代码,同时实现低延迟、高吞吐量的训练,有效统一了可用性与性能。
  • 该系统在真实世界模型上表现出强健性,包括在迭代过程中条件和循环动态变化的模型。

更好的研究,从现在开始

从阅读论文到最终审阅,大幅缩短您的研究时间。

无需绑定信用卡

本解读由 AI 生成,并经人工编辑审核。