• Stars
    star
    426
  • Rank 98,207 (Top 2 %)
  • Language
    Julia
  • License
    MIT License
  • Created almost 3 years ago
  • Updated 29 days ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Next-generation AD

Diffractor - Next Generation AD

Build Status Coverage

Docs:

General Overview

Diffractor is an experimental next-generation, compiler-based AD system for Julia. Its public interface should be familiar to users, essentially matching Zygote.

Design goals:

  • Ultra high performance for both scalar and array code
  • Efficient higher order derivatives
  • Reasonable compile times
  • High flexibility (like Zygote)
  • Support for forward/reverse/mixed modes

This is achieved through a combination of innovations:

  • A new lowest level interface (βˆ‚βƒ– the "AD optic functor" or "diffractor"), more suited to higher order AD
  • New capabilities in Base Julia (Opaque closures, inference plugins)
  • Better integration with ChainRules.jl

Current Status

The plan is to implement this in two stages:

  1. Generated function based transforms, using the ChainRules, the new low level interface and Opaque closures
  2. Adding inference plugins

Currently the implementation of Phase 1 is essentially complete, though mostly untested. Experimentation is welcome, though it is probably not ready yet to be a production AD system. The compiler parts of phase 1 are a bit "quick and dirty" as the main point of phase 1 is to prove out that the overall scheme works. As a result, it has known suboptimalities. I do not intend to do much work on these, since they will be obsoleted by phase 2 anyway.

A few features are still missing, e.g. chunking and I intend to do some more work on user friendly interfaces, but it should overall be useable as an AD system.

More Repositories

1

ForwardDiff.jl

Forward Mode Automatic Differentiation for Julia
Julia
844
star
2

BlueStyle

A Julia style guide that lives in a blue world
469
star
3

ChainRules.jl

forward and reverse mode automatic differentiation primitives for Julia Base + StdLibs
Julia
409
star
4

ReverseDiff.jl

Reverse Mode Automatic Differentiation for Julia
Julia
333
star
5

TaylorSeries.jl

Taylor polynomial expansions in one and several independent variables.
Julia
308
star
6

FiniteDifferences.jl

High accuracy derivatives, estimated via numerical finite differences (formerly FDM.jl)
Julia
279
star
7

ChainRulesCore.jl

AD-backend agnostic system defining custom forward and reverse mode rules. This is the light weight core to allow you to define rules for your functions in your packages, without depending on any particular AD system.
Julia
243
star
8

SparseDiffTools.jl

Fast jacobian computation through sparsity exploitation and matrix coloring
Julia
232
star
9

FiniteDiff.jl

Fast non-allocating calculations of gradients, Jacobians, and Hessians with sparsity support
Julia
227
star
10

AbstractDifferentiation.jl

An abstract interface for automatic differentiation.
Julia
135
star
11

DualNumbers.jl

Julia package for representing dual numbers and for performing dual algebra
Julia
78
star
12

DiffRules.jl

A simple shared suite of common derivative definitions
Julia
73
star
13

TaylorDiff.jl

Taylor-mode automatic differentiation for higher-order derivatives
Julia
62
star
14

Capstan.jl

A Cassette-based automatic differentiation package for the Julia language
Julia
56
star
15

ChainRulesTestUtils.jl

Utilities for testing custom AD primitives.
Julia
48
star
16

HyperDualNumbers.jl

Julia implementation of HyperDualNumbers
Julia
40
star
17

DiffResults.jl

A package which provides an API for querying differentiation results at multiple orders simultaneously
Julia
33
star
18

PolyesterForwardDiff.jl

Julia
27
star
19

DiffTests.jl

A common suite of test functions for stressing the robustness of differentiation tools.
Julia
12
star
20

juliadiff.github.io

JavaScript
11
star
21

DocThemeIndigo.jl

The Documenter Theme for the ChainRules family of packages. But you can use it too
SCSS
7
star
22

ChainRulesOverloadGeneration.jl

Tools to help generate operator overloads based on ChainRules
Julia
4
star
23

ChainRulesDeclarationHelpers.jl

Helpers for declaring ChainRules
Julia
1
star