Julia Differentiable Programming
JuliaDiff is an informal organization which aims to unify and document packages written in Julia for evaluating derivatives. The technical features of Julia, namely, multiple dispatch, source code via reflection, JIT compilation, and first-class access to expression parsing make implementing and using techniques from automatic differentiation easier than ever before (in our biased opinion). A compilation of differentiation tools in Julia can be found on GitHub.
A selection of Julia Automatic Differentiation (AD) packages and related tooling
At the heart of differentiable programming is the ability to generate derivatives of functions as represented via code using automatic/algorithmic differentiation.
ChainRules.jl provides a variety of common utilities that can be used by downstream automatic differentiation (AD) tools to define and execute forward-, reverse-, and mixed-mode primitives. It is an AD-independent collection of rules to use in a differentiation system.
AbstractDifferentiation.jl implements an abstract interface for differentiation in Julia. This is particularly useful for implementing abstract algorithms requiring derivatives, gradients, Jacobians, Hessians or multiple of those without depending on specific automatic differentiation packages’ user interfaces.
Enzyme.jl is a plugin that performs source-to-source forward- and reverse-mode automatic differentiation (AD) of statically analyzable LLVM. It is highly-efficient and its ability perform AD on optimized code allows Enzyme to meet or exceed the performance of state-of-the-art AD tools.
Zygote.jl provides intermediate-level source-to-source automatic differentiation (AD) in Julia, and is the current-generation AD system for the Flux.jl differentiable programming framework.
Diffractor.jl is an experimental next-generation, compiler-based AD system for Julia. Its public interface should be familiar to users, essentially matching Zygote.
Project Communication
We seek to work and communicate through Julia Language’s Community Channels