  Efficiency is essential to support responsiveness w.r.t. ever-growing
datasets, especially for Deep Learning (DL) systems. DL frameworks have
traditionally embraced deferred execution-style DL code -- supporting symbolic,
graph-based Deep Neural Network (DNN) computation. While scalable, such
development tends to produce code that is error-prone, non-intuitive, and
difficult to debug. Consequently, more natural, less error-prone imperative DL
frameworks encouraging eager execution have emerged at the expense of run-time
performance. Though hybrid approaches aim for the "best of both worlds," using
them effectively requires subtle considerations to make code amenable to safe,
accurate, and efficient graph execution -- avoiding performance bottlenecks and
semantically inequivalent results. We present our ongoing work on an automated
refactoring approach that assists developers in specifying whether and how
their otherwise eagerly-executed imperative DL code could be reliably and
efficiently executed as graphs at run-time in a semantics-preserving fashion.
The approach, based on a novel tensor analysis specifically for imperative DL
code, consists of refactoring preconditions for automatically determining when
it is safe and potentially advantageous to migrate imperative DL code to graph
execution and modifying decorator parameters or eagerly executing code already
running as graphs. The approach is being implemented as a PyDev Eclipse IDE
plug-in and uses the WALA Ariadne analysis framework. We discuss our ongoing
work towards optimizing imperative DL code to its full potential.
