From 705bb6844af8f52768fa1db040d8bc78da42e390 Mon Sep 17 00:00:00 2001 From: Penelope Yong Date: Tue, 3 Jun 2025 15:05:08 +0100 Subject: [PATCH 1/5] Add Enzyme testing as a separate CI action --- .github/workflows/Enzyme.yml | 58 ++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 .github/workflows/Enzyme.yml diff --git a/.github/workflows/Enzyme.yml b/.github/workflows/Enzyme.yml new file mode 100644 index 000000000..983868d3f --- /dev/null +++ b/.github/workflows/Enzyme.yml @@ -0,0 +1,58 @@ +name: Enzyme on demo models + +on: + push: + branches: + - main + pull_request: + +# needed to allow julia-actions/cache to delete old caches that it has created +permissions: + actions: write + contents: read + +# Cancel existing tests on the same PR if a new commit is added to a pull request +concurrency: + group: ${{ github.workflow }}-${{ github.ref || github.run_id }} + cancel-in-progress: ${{ startsWith(github.ref, 'refs/pull/') }} + +jobs: + enzyme: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - uses: julia-actions/setup-julia@v2 + with: + version: "1" + + - uses: julia-actions/cache@v2 + + - uses: julia-actions/julia-buildpkg@v1 + + - name: Run AD with Enzyme on demo models + shell: julia --color=yes {0} + run: | + # Set up fresh environment + using Pkg + Pkg.activate(; temp=true) + Pkg.develop(path=".") + Pkg.add(["Enzyme", "ForwardDiff", "ADTypes", "Test"]) + + using DynamicPPL.TestUtils: DEMO_MODELS + using DynamicPPL.TestUtils.AD: run_ad + using ADTypes: AutoEnzyme + using Test: @test, @testset + import Enzyme: set_runtime_activity, Forward, Reverse + import ForwardDiff # run_ad uses FD for correctness test + + ADTYPES = Dict( + "EnzymeForward" => AutoEnzyme(mode=set_runtime_activity(Forward)), + "EnzymeReverse" => AutoEnzyme(mode=set_runtime_activity(Reverse)), + ) + + @testset "$ad_key" for (ad_key, ad_type) in ADTYPES + @testset "$(model.f)" for model in DEMO_MODELS + @test run_ad(model, ad_type) isa Any + end + end From 2e8c01d7249d9833df5f75c7ac5fadad4d688926 Mon Sep 17 00:00:00 2001 From: Penelope Yong Date: Tue, 3 Jun 2025 18:04:56 +0100 Subject: [PATCH 2/5] Move to separate script in test/enzyme --- .github/workflows/Enzyme.yml | 29 +++-------------------------- test/enzyme/Project.toml | 9 +++++++++ test/enzyme/runtests.jl | 17 +++++++++++++++++ 3 files changed, 29 insertions(+), 26 deletions(-) create mode 100644 test/enzyme/Project.toml create mode 100644 test/enzyme/runtests.jl diff --git a/.github/workflows/Enzyme.yml b/.github/workflows/Enzyme.yml index 983868d3f..857aafbed 100644 --- a/.github/workflows/Enzyme.yml +++ b/.github/workflows/Enzyme.yml @@ -28,31 +28,8 @@ jobs: - uses: julia-actions/cache@v2 - - uses: julia-actions/julia-buildpkg@v1 - - name: Run AD with Enzyme on demo models - shell: julia --color=yes {0} + working-directory: test/enzyme run: | - # Set up fresh environment - using Pkg - Pkg.activate(; temp=true) - Pkg.develop(path=".") - Pkg.add(["Enzyme", "ForwardDiff", "ADTypes", "Test"]) - - using DynamicPPL.TestUtils: DEMO_MODELS - using DynamicPPL.TestUtils.AD: run_ad - using ADTypes: AutoEnzyme - using Test: @test, @testset - import Enzyme: set_runtime_activity, Forward, Reverse - import ForwardDiff # run_ad uses FD for correctness test - - ADTYPES = Dict( - "EnzymeForward" => AutoEnzyme(mode=set_runtime_activity(Forward)), - "EnzymeReverse" => AutoEnzyme(mode=set_runtime_activity(Reverse)), - ) - - @testset "$ad_key" for (ad_key, ad_type) in ADTYPES - @testset "$(model.f)" for model in DEMO_MODELS - @test run_ad(model, ad_type) isa Any - end - end + julia --project=. -e 'using Pkg; Pkg.instantiate()' + julia --project=. runtests.jl diff --git a/test/enzyme/Project.toml b/test/enzyme/Project.toml new file mode 100644 index 000000000..2eeb42430 --- /dev/null +++ b/test/enzyme/Project.toml @@ -0,0 +1,9 @@ +[deps] +ADTypes = "47edcb42-4c32-4615-8424-f2b9edc5f35b" +DynamicPPL = "366bfd00-2699-11ea-058f-f148b4cae6d8" +Enzyme = "7da242da-08ed-463a-9acd-ee780be4f1d9" +ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" +Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" + +[sources] +DynamicPPL = {path = "../../"} diff --git a/test/enzyme/runtests.jl b/test/enzyme/runtests.jl new file mode 100644 index 000000000..62b7ace4d --- /dev/null +++ b/test/enzyme/runtests.jl @@ -0,0 +1,17 @@ +using DynamicPPL.TestUtils: DEMO_MODELS +using DynamicPPL.TestUtils.AD: run_ad +using ADTypes: AutoEnzyme +using Test: @test, @testset +import Enzyme: set_runtime_activity, Forward, Reverse +using ForwardDiff: ForwardDiff # run_ad uses FD for correctness test + +ADTYPES = Dict( + "EnzymeForward" => AutoEnzyme(; mode=set_runtime_activity(Forward)), + "EnzymeReverse" => AutoEnzyme(; mode=set_runtime_activity(Reverse)), +) + +@testset "$ad_key" for (ad_key, ad_type) in ADTYPES + @testset "$(model.f)" for model in DEMO_MODELS + @test run_ad(model, ad_type) isa Any + end +end From 7bd370f0cfcb0470d67614ff5d87dee5d3edbee3 Mon Sep 17 00:00:00 2001 From: Penelope Yong Date: Tue, 3 Jun 2025 18:06:11 +0100 Subject: [PATCH 3/5] Colour --- .github/workflows/Enzyme.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/Enzyme.yml b/.github/workflows/Enzyme.yml index 857aafbed..7745eee6f 100644 --- a/.github/workflows/Enzyme.yml +++ b/.github/workflows/Enzyme.yml @@ -31,5 +31,5 @@ jobs: - name: Run AD with Enzyme on demo models working-directory: test/enzyme run: | - julia --project=. -e 'using Pkg; Pkg.instantiate()' - julia --project=. runtests.jl + julia --project=. --color=yes -e 'using Pkg; Pkg.instantiate()' + julia --project=. --color=yes runtests.jl From a603e9e91e2e3b74b9e4857a4c9f5ff35b70096a Mon Sep 17 00:00:00 2001 From: Penelope Yong Date: Tue, 3 Jun 2025 19:03:45 +0100 Subject: [PATCH 4/5] rename file to main.jl --- .github/workflows/Enzyme.yml | 2 +- test/enzyme/{runtests.jl => main.jl} | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename test/enzyme/{runtests.jl => main.jl} (100%) diff --git a/.github/workflows/Enzyme.yml b/.github/workflows/Enzyme.yml index 7745eee6f..aef88ca3c 100644 --- a/.github/workflows/Enzyme.yml +++ b/.github/workflows/Enzyme.yml @@ -32,4 +32,4 @@ jobs: working-directory: test/enzyme run: | julia --project=. --color=yes -e 'using Pkg; Pkg.instantiate()' - julia --project=. --color=yes runtests.jl + julia --project=. --color=yes main.jl diff --git a/test/enzyme/runtests.jl b/test/enzyme/main.jl similarity index 100% rename from test/enzyme/runtests.jl rename to test/enzyme/main.jl From 1f1e5e86d8fce6592dcc58e32d91dd87f9023bf0 Mon Sep 17 00:00:00 2001 From: Penelope Yong Date: Tue, 3 Jun 2025 21:31:20 +0100 Subject: [PATCH 5/5] test/enzyme -> test/integration/enzyme --- .github/workflows/Enzyme.yml | 2 +- test/{ => integration}/enzyme/Project.toml | 2 +- test/{ => integration}/enzyme/main.jl | 0 3 files changed, 2 insertions(+), 2 deletions(-) rename test/{ => integration}/enzyme/Project.toml (88%) rename test/{ => integration}/enzyme/main.jl (100%) diff --git a/.github/workflows/Enzyme.yml b/.github/workflows/Enzyme.yml index aef88ca3c..4fa32eef4 100644 --- a/.github/workflows/Enzyme.yml +++ b/.github/workflows/Enzyme.yml @@ -29,7 +29,7 @@ jobs: - uses: julia-actions/cache@v2 - name: Run AD with Enzyme on demo models - working-directory: test/enzyme + working-directory: test/integration/enzyme run: | julia --project=. --color=yes -e 'using Pkg; Pkg.instantiate()' julia --project=. --color=yes main.jl diff --git a/test/enzyme/Project.toml b/test/integration/enzyme/Project.toml similarity index 88% rename from test/enzyme/Project.toml rename to test/integration/enzyme/Project.toml index 2eeb42430..c26655fae 100644 --- a/test/enzyme/Project.toml +++ b/test/integration/enzyme/Project.toml @@ -6,4 +6,4 @@ ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" [sources] -DynamicPPL = {path = "../../"} +DynamicPPL = {path = "../../../"} diff --git a/test/enzyme/main.jl b/test/integration/enzyme/main.jl similarity index 100% rename from test/enzyme/main.jl rename to test/integration/enzyme/main.jl