Skip to content

Commit 0a2dac4

Browse files
authored
Use a package extension for Enzyme.jl (#312)
1 parent 9c11d8a commit 0a2dac4

16 files changed

Lines changed: 463 additions & 704 deletions

.buildkite/pipeline.yml

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -23,16 +23,3 @@ steps:
2323
julia --color=yes --project=test -e 'using Pkg; Pkg.add("Enzyme"); Pkg.develop(path="."); Pkg.instantiate()'
2424
julia --color=yes --project=test -e 'include("test/enzyme.jl")'
2525
timeout_in_minutes: 30
26-
27-
- label: "CPUs -- Zygote.jl"
28-
plugins:
29-
- JuliaCI/julia#v1:
30-
version: "1.10"
31-
agents:
32-
queue: "juliaecosystem"
33-
os: "linux"
34-
arch: "x86_64"
35-
command: |
36-
julia --color=yes --project=test -e 'using Pkg; Pkg.add("Zygote"); Pkg.develop(path="."); Pkg.instantiate()'
37-
julia --color=yes --project=test -e 'include("test/zygote.jl")'
38-
timeout_in_minutes: 30

Project.toml

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,18 +7,25 @@ ADTypes = "47edcb42-4c32-4615-8424-f2b9edc5f35b"
77
ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210"
88
LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"
99
NLPModels = "a4795742-8479-5a88-8948-cc11e1c8c1a6"
10-
Requires = "ae029012-a4dd-5104-9daa-d747884805df"
1110
ReverseDiff = "37e2e3b7-166d-5795-8a7a-e32c996b4267"
1211
SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf"
1312
SparseConnectivityTracer = "9f842d2f-2579-4b1d-911e-f412cf18a3f5"
1413
SparseMatrixColorings = "0a514795-09f3-496d-8182-132a7b665d35"
1514

15+
[weakdeps]
16+
Enzyme = "7da242da-08ed-463a-9acd-ee780be4f1d9"
17+
18+
[extensions]
19+
ADNLPModelsEnzymeExt = "Enzyme"
20+
1621
[compat]
1722
ADTypes = "1.2.1"
18-
ForwardDiff = "0.9, 0.10, 1"
23+
ForwardDiff = "1"
1924
NLPModels = "0.21.5"
20-
Requires = "1"
2125
ReverseDiff = "1"
22-
SparseConnectivityTracer = "1.0"
26+
SparseConnectivityTracer = "1"
2327
SparseMatrixColorings = "0.4.21"
28+
Enzyme = "0.13.129"
29+
LinearAlgebra = "1.10"
30+
SparseArrays = "1.10"
2431
julia = "1.10"

docs/Project.toml

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,11 @@ Plots = "91a5bcdd-55d7-5caf-9e0b-520d859cae80"
1212
SolverBenchmark = "581a75fa-a23a-52d0-a590-d6201de2218a"
1313
SparseConnectivityTracer = "9f842d2f-2579-4b1d-911e-f412cf18a3f5"
1414
SparseMatrixColorings = "0a514795-09f3-496d-8182-132a7b665d35"
15-
Zygote = "e88e6eb3-aa80-5325-afca-941959d7151f"
1615

1716
[compat]
1817
DataFrames = "1"
1918
Documenter = "1.0"
20-
ManualNLPModels = "0.1"
19+
ManualNLPModels = "0.2"
2120
NLPModels = "0.21.5"
2221
NLPModelsJuMP = "0.13"
2322
OptimizationProblems = "0.8"
@@ -26,4 +25,3 @@ Plots = "1"
2625
SolverBenchmark = "0.6"
2726
SparseConnectivityTracer = "1.0"
2827
SparseMatrixColorings = "0.4.21"
29-
Zygote = "0.6.62"

docs/src/backend.md

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,15 @@ The backend information is in a structure [`ADNLPModels.ADModelBackend`](@ref) i
77

88
The functions used internally to define the NLPModel API and the possible backends are defined in the following table:
99

10-
| Functions | FowardDiff backends | ReverseDiff backends | Zygote backends | Enzyme backend | Sparse backend |
11-
| --------- | ------------------- | -------------------- | --------------- | -------------- | -------------- |
12-
| `gradient` and `gradient!` | `ForwardDiffADGradient`/`GenericForwardDiffADGradient` | `ReverseDiffADGradient`/`GenericReverseDiffADGradient` | `ZygoteADGradient` | `EnzymeReverseADGradient` | -- |
13-
| `jacobian` | `ForwardDiffADJacobian` | `ReverseDiffADJacobian` | `ZygoteADJacobian` | `SparseEnzymeADJacobian` | `SparseADJacobian` |
14-
| `hessian` | `ForwardDiffADHessian` | `ReverseDiffADHessian` | `ZygoteADHessian` | `SparseEnzymeADHessian` | `SparseADHessian`/`SparseReverseADHessian` |
15-
| `Jprod` | `ForwardDiffADJprod`/`GenericForwardDiffADJprod` | `ReverseDiffADJprod`/`GenericReverseDiffADJprod` | `ZygoteADJprod` | `EnzymeReverseADJprod` | -- |
16-
| `Jtprod` | `ForwardDiffADJtprod`/`GenericForwardDiffADJtprod` | `ReverseDiffADJtprod`/`GenericReverseDiffADJtprod` | `ZygoteADJtprod` | `EnzymeReverseADJtprod` | -- |
17-
| `Hvprod` | `ForwardDiffADHvprod`/`GenericForwardDiffADHvprod` | `ReverseDiffADHvprod`/`GenericReverseDiffADHvprod` | -- | `EnzymeReverseADHvprod` | -- |
18-
| `directional_second_derivative` | `ForwardDiffADGHjvprod` | -- | -- | -- | -- |
10+
| Functions | FowardDiff backends | ReverseDiff backends | Enzyme backend | Sparse backend |
11+
| --------- | ------------------- | -------------------- | -------------- | -------------- |
12+
| `gradient` and `gradient!` | `ForwardDiffADGradient`/`GenericForwardDiffADGradient` | `ReverseDiffADGradient`/`GenericReverseDiffADGradient` | `EnzymeReverseADGradient` | -- |
13+
| `jacobian` | `ForwardDiffADJacobian` | `ReverseDiffADJacobian` | `SparseEnzymeADJacobian` | `SparseADJacobian` |
14+
| `hessian` | `ForwardDiffADHessian` | `ReverseDiffADHessian` | `SparseEnzymeADHessian` | `SparseADHessian`/`SparseReverseADHessian` |
15+
| `Jprod` | `ForwardDiffADJprod`/`GenericForwardDiffADJprod` | `ReverseDiffADJprod`/`GenericReverseDiffADJprod` | `EnzymeReverseADJprod` | -- |
16+
| `Jtprod` | `ForwardDiffADJtprod`/`GenericForwardDiffADJtprod` | `ReverseDiffADJtprod`/`GenericReverseDiffADJtprod` | `EnzymeReverseADJtprod` | -- |
17+
| `Hvprod` | `ForwardDiffADHvprod`/`GenericForwardDiffADHvprod` | `ReverseDiffADHvprod`/`GenericReverseDiffADHvprod` | `EnzymeReverseADHvprod` | -- |
18+
| `directional_second_derivative` | `ForwardDiffADGHjvprod` | -- | -- | -- |
1919

2020
The functions `hess_structure!`, `hess_coord!`, `jac_structure!` and `jac_coord!` defined in `ad.jl` are generic to all the backends for now.
2121

docs/src/index.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ ADNLPModels.jl functionalities are extended by other packages that are not autom
2424
In other words, you sometimes need to load the desired package separately to access some functionalities.
2525

2626
```julia
27-
using ADNLPModels # load only the default functionalities
28-
using Zygote # load the Zygote backends
27+
using ADNLPModels # load only the default functionalities
28+
using Enzyme # load the Enzyme backends
2929
```
3030

3131
Versions compatibility for the extensions are available in the file `test/Project.toml`.

docs/src/predefined.md

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,5 +56,3 @@ get_adbackend(nlp)
5656

5757
!!! danger
5858
The interface for Enzyme.jl is still under development.
59-
60-
The backend `:zygote` focuses on backend based on [Zygote.jl](https://github.com/FluxML/Zygote.jl).

0 commit comments

Comments
 (0)