gdalle / DifferentiationInterface.jl

An interface to various automatic differentiation backends in Julia.

Home Page:https://gdalle.github.io/DifferentiationInterface.jl/DifferentiationInterface

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Split reverse mode for mutating functions is full of traps

gdalle opened this issue · comments

The only backends concerned by this are AutoEnzyme(Enzyme.ReverseModeSplit) and AutoTapir.

For mutating functions, it is dangerous to interrupt reverse mode autodiff after the forward sweep. The variables are in an intermediate state which will only be reverted after the reverse sweep completes.

In particular, Tapir requires running another forward sweep between reverse sweep, so a pullback closure would be useless.

I'm not sure how split reverse Enzyme works, will have to investigate.

Related: