Breaking dependency updates: CUDA 6, DiffEqBase 7, OrdinaryDiffEq 7, Optimization 5 (supersedes #59)#63
Conversation
Updates the requirements on [CUDA](https://github.com/JuliaGPU/CUDA.jl), [Statistics](https://github.com/JuliaStats/Statistics.jl), [Optimization](https://github.com/SciML/Optimization.jl), [OrdinaryDiffEq](https://github.com/SciML/OrdinaryDiffEq.jl) and [DiffEqBase](https://github.com/SciML/OrdinaryDiffEq.jl) to permit the latest version. Updates `CUDA` to 6.1.0 - [Release notes](https://github.com/JuliaGPU/CUDA.jl/releases) - [Commits](https://github.com/JuliaGPU/CUDA.jl/commits/v6.1.0) Updates `Statistics` to 1.11.1 - [Release notes](https://github.com/JuliaStats/Statistics.jl/releases) - [Commits](JuliaStats/Statistics.jl@v1.4.0...v1.11.1) Updates `Optimization` to 5.6.1 - [Release notes](https://github.com/SciML/Optimization.jl/releases) - [Changelog](https://github.com/SciML/Optimization.jl/blob/master/NEWS.md) - [Commits](https://github.com/SciML/Optimization.jl/commits/v5.6.1) Updates `OrdinaryDiffEq` to 7.0.0 - [Release notes](https://github.com/SciML/OrdinaryDiffEq.jl/releases) - [Changelog](https://github.com/SciML/OrdinaryDiffEq.jl/blob/master/NEWS.md) - [Commits](SciML/OrdinaryDiffEq.jl@v6.0.0...v7.0.0) Updates `DiffEqBase` to 7.5.5 - [Release notes](https://github.com/SciML/OrdinaryDiffEq.jl/releases) - [Changelog](https://github.com/SciML/OrdinaryDiffEq.jl/blob/master/NEWS.md) - [Commits](https://github.com/SciML/OrdinaryDiffEq.jl/commits) --- updated-dependencies: - dependency-name: CUDA dependency-version: 6.1.0 dependency-type: direct:production dependency-group: all-julia-packages - dependency-name: DiffEqBase dependency-version: 7.5.5 dependency-type: direct:production dependency-group: all-julia-packages - dependency-name: Optimization dependency-version: 5.6.1 dependency-type: direct:production dependency-group: all-julia-packages - dependency-name: OrdinaryDiffEq dependency-version: 7.0.0 dependency-type: direct:production dependency-group: all-julia-packages - dependency-name: Statistics dependency-version: 1.11.1 dependency-type: direct:production dependency-group: all-julia-packages ... Signed-off-by: dependabot[bot] <support@github.com>
ParametricMCPs (including its latest release, 0.1.17) caps ForwardDiff at 0.10 through a weak dependency, which makes it impossible to resolve a test environment containing NonlinearSolve >= 4.17 (requires ForwardDiff 1), NNlib >= 0.9.32, or CUDA >= 6. This is what made the GPU CI jobs on the dependabot update PR fail at version resolution, and it silently held the CPU test jobs back on DiffEqBase 6 / OrdinaryDiffEq 6 / CUDA 5 / ForwardDiff 0.10. Dropping the ParametricMCPs comparison benchmark lets the test environment resolve the full updated stack (CUDA 6.1, DiffEqBase 7.5, OrdinaryDiffEq 7.0, Optimization 5.6, ForwardDiff 1.4, NonlinearSolve 4.19, SciMLSensitivity 7.112, SciMLBase 3.18). The ComplementaritySolve.jl side of the benchmark testset is kept since it exercises forward solves and Zygote adjoints for both in-place and out-of-place problems. Core, Applications, and QA test groups all pass locally against the updated stack with no source changes required. Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com> Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
ForwardDiff 1.x rewrote seed! to use scalar setindex! loops (via structural_eachindex), which errors on GPU arrays with scalar indexing disallowed; ForwardDiff 0.10 used broadcast and worked. This broke every NonlinearReformulation/BokhovenIterativeAlgorithm CUDA test through SimpleNonlinearSolve's ForwardDiff jacobians. Add broadcast-based seed! overloads for AbstractGPUArray in the existing type-piracy section (should eventually live upstream in ForwardDiff as a GPUArraysCore extension), with a JLArrays-based regression test covering vector and chunk mode. Also relax the Statistics compat to "1.10, 1.11": the stdlib is version 1.10.0 on Julia 1.10, so "1.11.1" was unsatisfiable on the downgrade CI jobs which run on the LTS. Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com> Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… (runner infrastructure issue) Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com> Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
CI status after the second round of fixes:
|
|
Final CI status: all jobs green except the three Downgrade jobs, which fail identically on
|
…tead Per review feedback on SciML#63: drop the pirated broadcast-based seed! overloads for AbstractGPUArray (and the JLArrays regression test that exercised them) and document the limitation instead, in the README CUDA footnote and next to DEFAULT_NLSOLVER. With ForwardDiff >= 1, ForwardDiff-based jacobians seed dual arrays with scalar setindex! loops, so solvers that compute jacobians through ForwardDiff error on CUDA arrays until that is fixed upstream in ForwardDiff. The CUDA CI groups will fail with ForwardDiff 1.x as a consequence. Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com> Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
Removed the Consequence to expect on CI: the CUDA Core job (and the CUDA solver paths in CUDA Applications) will fail again with ForwardDiff 1.4 resolved, since the workaround is gone. Local CPU verification after the removal: Core 212 pass / 6 broken (pre-existing), QA 5 pass / 1 broken (pre-existing), piracy count back to the original 2 instances. |
…s broken Per review feedback: move the ForwardDiff >= 1 GPU limitation documentation out of the README/source and into SciML#65, and mark the affected CUDA tests with @test_broken so the GPU CI reflects the known upstream breakage instead of erroring. Only InteriorPointMethod (which does not use ForwardDiff jacobians) keeps regular assertions on CUDA; the NonlinearReformulation/BokhovenIterativeAlgorithm solve and adjoint paths are @test_broken until ForwardDiff restores broadcast-compatible seeding. Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com> Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
Follow-up per review (b329b5f):
|
CI reported Unexpected Pass for this combination: it takes the batched code path that does not go through ForwardDiff jacobian seeding, so it still works on CUDA with ForwardDiff >= 1 and must not be @test_broken. Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com> Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
Status update on the last two CI rounds:
Retriggered CI with an empty commit (f06e553). |
Note
This PR was prepared by an AI agent. Please ignore until reviewed by @ChrisRackauckas.
Supersedes #59 (the dependabot compat bumps are included as the first commit) and makes the changes actually required for the test suite to resolve and pass with the new majors.
Root cause analysis of the CI failures on #59
ParametricMCPs— including its latest release 0.1.17 — capsForwardDiffat 0.10 through a weak dependency (itsForwardDiffExt). Withforce_latest_compatible_version=true(whichjulia-runtestenables automatically on dependabot PRs),ForwardDiffgets forced to 1.4.0, which is unsatisfiable alongsideParametricMCPs.force-latest-compatible-version: false, and the sameParametricMCPs → ForwardDiff 0.10 → NNlib ≤ 0.9.31 → CUDA < 6constraint chain silently held the resolved environment at DiffEqBase 6.213 / OrdinaryDiffEq 6.109 / CUDA 5.11 / ForwardDiff 0.10.39.force_latest_compatible_version=true(auto-enabled on dependabot PRs) is inherently contradictory with downgraded compat bounds (NonlinearSolve@1.7.0vs forced latest4). That is a quirk of the centralized downgrade workflow on dependabot PRs, not something fixable in this repo; on this (non-dependabot) PR the downgrade jobs run normally.Changes
ParametricMCPsfrom the test dependencies and drop its comparison half of the benchmark testset intest/core/cpu/mcp.jl. The ComplementaritySolve.jl half of the benchmarks is kept (it exercises forward solves and Zygote adjoints for both in-place and out-of-place problems). There is no released ParametricMCPs version compatible with ForwardDiff 1, so it cannot coexist with NonlinearSolve ≥ 4.17, NNlib ≥ 0.9.32, or CUDA ≥ 6.Verification (local, Julia 1.12.6)
A fresh environment from the updated
test/Project.tomlnow freely resolves the full new stack: CUDA 6.1.0, DiffEqBase 7.5.5, OrdinaryDiffEq 7.0.0, Optimization 5.6.1, ForwardDiff 1.4.0, NonlinearSolve 4.19.1, SciMLSensitivity 7.112.0, SciMLBase 3.18.0, NNlib 0.9.35.Test results against that stack (
BACKEND_GROUP=CPU):@test_broken), 0 fail@test_broken), 0 failIdentical pass/broken counts to CI on the old stack, i.e. no regressions. CUDA groups could not be run locally (no GPU on this machine); the GPU CI failure on #59 was at version resolution, which this PR fixes, so the self-hosted runners will validate the rest.
🤖 Generated with Claude Code