Hello,
I have been trying to differentiate an IntegralProblem, as defined using Integrals.jl, using Zygote.jl.
While on 1.10 and 1.11 it works nicely, I have issues with 1.12.
Here a MWE to reproduce the error
Summary
Actually, this is taken from Integrals.jl documentation
using Integrals, ForwardDiff, FiniteDiff, Zygote, Cuba
f(x, p) = sum(sin.(x .* p))
domain = (ones(2), 3ones(2)) # (lb, ub)
p = ones(2)
function testf(p)
prob = IntegralProblem(f, domain, p)
sin(solve(prob, CubaCuhre(), reltol = 1e-6, abstol = 1e-6)[1])
end
testf(p)
dp1 = Zygote.gradient(testf, p)
dp2 = FiniteDiff.finite_difference_gradient(testf, p)
dp3 = ForwardDiff.gradient(testf, p)
dp1[1] ≈ dp2 ≈ dp3
Here the error, when I use 1.12
Summary
[61215] signal 11 (1): Segmentation fault
in expression starting at REPL[8]:1
emit_unboxed_coercion at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-12/src/intrinsics.cpp:394 [inlined]
emit_unbox at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-12/src/intrinsics.cpp:458
emit_condition at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-12/src/codegen.cpp:6066
emit_condition at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-12/src/codegen.cpp:6079 [inlined]
emit_function at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-12/src/codegen.cpp:9271
jl_emit_code at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-12/src/codegen.cpp:9727
jl_emit_codeinst at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-12/src/codegen.cpp:9798
jl_emit_codeinst_to_jit_impl at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-12/src/jitlayers.cpp:770
jl_add_codeinst_to_jit at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-12/src/gf.c:3372
add_codeinsts_to_jit! at ./../usr/share/julia/Compiler/src/typeinfer.jl:1436
typeinf_ext_toplevel at ./../usr/share/julia/Compiler/src/typeinfer.jl:1443 [inlined]
typeinf_ext_toplevel at ./../usr/share/julia/Compiler/src/typeinfer.jl:1451
jfptr_typeinf_ext_toplevel_117555.1 at /home/marcobonici/.julia/juliaup/julia-1.12.0+0.x64.linux.gnu/lib/julia/sys.so (unknown line)
jl_apply at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-12/src/julia.h:2387 [inlined]
jl_type_infer at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-12/src/gf.c:462
jl_compile_method_internal at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-12/src/gf.c:3512
_jl_invoke at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-12/src/gf.c:4002 [inlined]
ijl_apply_generic at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-12/src/gf.c:4210
jl_apply at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-12/src/julia.h:2387 [inlined]
jl_f__apply_iterate at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-12/src/builtins.c:868
jl_apply at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-12/src/julia.h:2387 [inlined]
jl_f__apply_iterate at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-12/src/builtins.c:868
_apply at ./boot.jl:1019
adjoint at /home/marcobonici/.julia/packages/Zygote/55SqB/src/lib/lib.jl:211 [inlined]
_pullback at /home/marcobonici/.julia/packages/ZygoteRules/CkVIK/src/adjoint.jl:67 [inlined]
IntegralProblem at /home/marcobonici/.julia/packages/SciMLBase/b4Q81/src/problems/integral_problems.jl:79 [inlined]
_pullback at /home/marcobonici/.julia/packages/Zygote/55SqB/src/compiler/interface2.jl:0
unknown function (ip: 0x7a77d9decc12) at (unknown file)
jl_apply at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-12/src/julia.h:2387 [inlined]
jl_f__apply_iterate at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-12/src/builtins.c:868
jl_apply at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-12/src/julia.h:2387 [inlined]
jl_f__apply_iterate at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-12/src/builtins.c:868
_apply at ./boot.jl:1019
_pullback at /home/marcobonici/.julia/packages/Zygote/55SqB/src/compiler/interface2.jl:81
unknown function (ip: 0x7a77d9dec762) at (unknown file)
jl_apply at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-12/src/julia.h:2387 [inlined]
jl_f__apply_iterate at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-12/src/builtins.c:868
jl_apply at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-12/src/julia.h:2387 [inlined]
jl_f__apply_iterate at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-12/src/builtins.c:868
_apply at ./boot.jl:1019
adjoint at /home/marcobonici/.julia/packages/Zygote/55SqB/src/lib/lib.jl:211 [inlined]
_pullback at /home/marcobonici/.julia/packages/ZygoteRules/CkVIK/src/adjoint.jl:67 [inlined]
IntegralProblem at /home/marcobonici/.julia/packages/SciMLBase/b4Q81/src/problems/integral_problems.jl:76 [inlined]
_pullback at /home/marcobonici/.julia/packages/Zygote/55SqB/src/compiler/interface2.jl:0
unknown function (ip: 0x7a77d9dbf522) at (unknown file)
testf at ./REPL[6]:2 [inlined]
_pullback at /home/marcobonici/.julia/packages/Zygote/55SqB/src/compiler/interface2.jl:0
pullback at /home/marcobonici/.julia/packages/Zygote/55SqB/src/compiler/interface.jl:96
pullback at /home/marcobonici/.julia/packages/Zygote/55SqB/src/compiler/interface.jl:94 [inlined]
gradient at /home/marcobonici/.julia/packages/Zygote/55SqB/src/compiler/interface.jl:153
jfptr_gradient_19838 at /home/marcobonici/.julia/compiled/v1.12/Zygote/4kbLI_9sbRe.so (unknown line)
jl_apply at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-12/src/julia.h:2387 [inlined]
do_call at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-12/src/interpreter.c:123
eval_value at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-12/src/interpreter.c:243
eval_stmt_value at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-12/src/interpreter.c:194 [inlined]
eval_body at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-12/src/interpreter.c:707
jl_interpret_toplevel_thunk at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-12/src/interpreter.c:898
jl_toplevel_eval_flex at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-12/src/toplevel.c:1035
__repl_entry_eval_expanded_with_loc at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-12/usr/share/julia/stdlib/v1.12/REPL/src/REPL.jl:301
jl_apply at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-12/src/julia.h:2387 [inlined]
jl_f_invokelatest at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-12/src/builtins.c:881
toplevel_eval_with_hooks at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-12/usr/share/julia/stdlib/v1.12/REPL/src/REPL.jl:308
toplevel_eval_with_hooks at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-12/usr/share/julia/stdlib/v1.12/REPL/src/REPL.jl:312
toplevel_eval_with_hooks at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-12/usr/share/julia/stdlib/v1.12/REPL/src/REPL.jl:305 [inlined]
eval_user_input at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-12/usr/share/julia/stdlib/v1.12/REPL/src/REPL.jl:330
repl_backend_loop at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-12/usr/share/julia/stdlib/v1.12/REPL/src/REPL.jl:452
#start_repl_backend#41 at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-12/usr/share/julia/stdlib/v1.12/REPL/src/REPL.jl:427
start_repl_backend at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-12/usr/share/julia/stdlib/v1.12/REPL/src/REPL.jl:424 [inlined]
#run_repl#50 at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-12/usr/share/julia/stdlib/v1.12/REPL/src/REPL.jl:653
run_repl at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-12/usr/share/julia/stdlib/v1.12/REPL/src/REPL.jl:639
jfptr_run_repl_18494.1 at /home/marcobonici/.julia/juliaup/julia-1.12.0+0.x64.linux.gnu/share/julia/compiled/v1.12/REPL/u0gqU_g0Uq3.so (unknown line)
run_std_repl at ./client.jl:478
jfptr_run_std_repl_69973.1 at /home/marcobonici/.julia/juliaup/julia-1.12.0+0.x64.linux.gnu/lib/julia/sys.so (unknown line)
jl_apply at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-12/src/julia.h:2387 [inlined]
jl_f_invokelatest at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-12/src/builtins.c:881
run_main_repl at ./client.jl:499
repl_main at ./client.jl:586 [inlined]
_start at ./client.jl:561
jfptr__start_85044.1 at /home/marcobonici/.julia/juliaup/julia-1.12.0+0.x64.linux.gnu/lib/julia/sys.so (unknown line)
jl_apply at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-12/src/julia.h:2387 [inlined]
true_main at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-12/src/jlapi.c:971
jl_repl_entrypoint at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-12/src/jlapi.c:1139
main at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-12/cli/loader_exe.c:58
unknown function (ip: 0x7a77f622a1c9) at /lib/x86_64-linux-gnu/libc.so.6
__libc_start_main at /lib/x86_64-linux-gnu/libc.so.6 (unknown line)
unknown function (ip: 0x4010b8) at /workspace/srcdir/glibc-2.17/csu/../sysdeps/x86_64/start.S
Allocations: 47911520 (Pool: 47909110; Big: 2410); GC: 27
Segmentation fault (core dumped)
Is this an issue on which side? Zygote, Integrals…? It looks to me that Integrals.jl is failing to generate the code for the pullbacks, but I am not so sure.
Thanks in advance