-
Notifications
You must be signed in to change notification settings - Fork 40
Latest release broke DistributionsAD #252
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Comments
Hi, I looked at the error in https://github.com/TuringLang/DistributionsAD.jl/actions/runs/4992157009/jobs/8988760248 Matrixvariate distributions: Error During Test at /home/runner/work/DistributionsAD.jl/DistributionsAD.jl/test/ad/utils.jl:357
Test threw exception
Expression: ≈(Tracker.data((Tracker.gradient(f, x))[1]), finitediff, rtol = rtol, atol = atol)
MethodError: no method matching Float64(::ForwardDiff.Dual{Nothing, Float64, 1})
Closest candidates are:
(::Type{T})(::Real, ::RoundingMode) where T<:AbstractFloat at rounding.jl:200
(::Type{T})(::T) where T<:Number at boot.jl:760
(::Type{T})(::AbstractChar) where T<:Union{AbstractChar, Number} at char.jl:50
...
Stacktrace:
[1] (::ComposedFunction{Type{Float64}, typeof(-)})(x::ForwardDiff.Dual{Nothing, Float64, 1})
@ Base ./operators.jl:938
[2] #8
@ ./broadcast.jl:368 [inlined]
[3] #8
@ ./broadcast.jl:366 [inlined]
[4] #2
@ ./broadcast.jl:314 [inlined]
[5] partial(::Base.Broadcast.var"#2#4"{Base.Broadcast.var"#8#10"{Base.Broadcast.var"#1#3", Base.Broadcast.var"#8#10"{Base.Broadcast.var"#5#6"{Base.Broadcast.var"#7#9"}, Base.Broadcast.var"#5#6"{Base.Broadcast.var"#7#9"}, Base.Broadcast.var"#15#16"{Base.Broadcast.var"#17#18"}, Base.Broadcast.var"#11#12"{Base.Broadcast.var"#13#14"}, ComposedFunction{Type{Float64}, typeof(-)}}, Base.Broadcast.var"#15#16"{Base.Broadcast.var"#15#16"{Base.Broadcast.var"#17#18"}}, Base.Broadcast.var"#11#12"{Base.Broadcast.var"#11#12"{Base.Broadcast.var"#13#14"}}, typeof(/)}, typeof(abs2)}, ::Float64, ::Int64, ::Float64, ::Float64)
@ Tracker ~/.julia/packages/Tracker/xe6h6/src/lib/array.jl:596
[6] _broadcast_getindex_evalf
@ ./broadcast.jl:648 [inlined]
[7] _broadcast_getindex
@ ./broadcast.jl:621 [inlined]
[8] getindex
@ ./broadcast.jl:575 [inlined]
[9] copy
@ ./broadcast.jl:922 [inlined]
[10] materialize(bc::Base.Broadcast.Broadcasted{Base.Broadcast.DefaultArrayStyle{1}, Nothing, typeof(Tracker.partial), Tuple{Base.RefValue{Base.Broadcast.var"#2#4"{Base.Broadcast.var"#8#10"{Base.Broadcast.var"#1#3", Base.Broadcast.var"#8#10"{Base.Broadcast.var"#5#6"{Base.Broadcast.var"#7#9"}, Base.Broadcast.var"#5#6"{Base.Broadcast.var"#7#9"}, Base.Broadcast.var"#15#16"{Base.Broadcast.var"#17#18"}, Base.Broadcast.var"#11#12"{Base.Broadcast.var"#13#14"}, ComposedFunction{Type{Float64}, typeof(-)}}, Base.Broadcast.var"#15#16"{Base.Broadcast.var"#15#16"{Base.Broadcast.var"#17#18"}}, Base.Broadcast.var"#11#12"{Base.Broadcast.var"#11#12"{Base.Broadcast.var"#13#14"}}, typeof(/)}, typeof(abs2)}}, Vector{Float64}, Int64, SubArray{Float64, 1, Matrix{Float64}, Tuple{Base.Slice{Base.OneTo{Int64}}, Int64}, true}, Vector{Float64}}})
@ Base.Broadcast ./broadcast.jl:883
[11] broadcast(::typeof(Tracker.partial), ::Base.RefValue{Base.Broadcast.var"#2#4"{Base.Broadcast.var"#8#10"{Base.Broadcast.var"#1#3", Base.Broadcast.var"#8#10"{Base.Broadcast.var"#5#6"{Base.Broadcast.var"#7#9"}, Base.Broadcast.var"#5#6"{Base.Broadcast.var"#7#9"}, Base.Broadcast.var"#15#16"{Base.Broadcast.var"#17#18"}, Base.Broadcast.var"#11#12"{Base.Broadcast.var"#13#14"}, ComposedFunction{Type{Float64}, typeof(-)}}, Base.Broadcast.var"#15#16"{Base.Broadcast.var"#15#16"{Base.Broadcast.var"#17#18"}}, Base.Broadcast.var"#11#12"{Base.Broadcast.var"#11#12"{Base.Broadcast.var"#13#14"}}, typeof(/)}, typeof(abs2)}}, ::Vector{Float64}, ::Int64, ::Vararg{Any, N} where N)
@ Base.Broadcast ./broadcast.jl:821
[12] ∇broadcast
@ ~/.julia/packages/Tracker/xe6h6/src/lib/array.jl:600 [inlined]
[13] copy(bc::Base.Broadcast.Broadcasted{Tracker.TrackedStyle, Tuple{Base.OneTo{Int64}}, typeof(Tracker.partial), Tuple{Base.RefValue{Base.Broadcast.var"#2#4"{Base.Broadcast.var"#8#10"{Base.Broadcast.var"#1#3", Base.Broadcast.var"#8#10"{Base.Broadcast.var"#5#6"{Base.Broadcast.var"#7#9"}, Base.Broadcast.var"#5#6"{Base.Broadcast.var"#7#9"}, Base.Broadcast.var"#15#16"{Base.Broadcast.var"#17#18"}, Base.Broadcast.var"#11#12"{Base.Broadcast.var"#13#14"}, ComposedFunction{Type{Float64}, typeof(-)}}, Base.Broadcast.var"#15#16"{Base.Broadcast.var"#15#16"{Base.Broadcast.var"#17#18"}}, Base.Broadcast.var"#11#12"{Base.Broadcast.var"#11#12"{Base.Broadcast.var"#13#14"}}, typeof(/)}, typeof(abs2)}}, Vector{Float64}, Int64, SubArray{Float64, 1, Matrix{Float64}, Tuple{Base.Slice{Base.OneTo{Int64}}, Int64}, true}, TrackedArray{…,Vector{Float64}}}})
@ Tracker ~/.julia/packages/Tracker/xe6h6/src/lib/array.jl:630
[14] materialize
@ ./broadcast.jl:883 [inlined]
[15] (::Tracker.var"#665#667"{Vector{Float64}, Base.Broadcast.var"#2#4"{Base.Broadcast.var"#8#10"{Base.Broadcast.var"#1#3", Base.Broadcast.var"#8#10"{Base.Broadcast.var"#5#6"{Base.Broadcast.var"#7#9"}, Base.Broadcast.var"#5#6"{Base.Broadcast.var"#7#9"}, Base.Broadcast.var"#15#16"{Base.Broadcast.var"#17#18"}, Base.Broadcast.var"#11#12"{Base.Broadcast.var"#13#14"}, ComposedFunction{Type{Float64}, typeof(-)}}, Base.Broadcast.var"#15#16"{Base.Broadcast.var"#15#16"{Base.Broadcast.var"#17#18"}}, Base.Broadcast.var"#11#12"{Base.Broadcast.var"#11#12"{Base.Broadcast.var"#13#14"}}, typeof(/)}, typeof(abs2)}, Tuple{SubArray{Float64, 1, Matrix{Float64}, Tuple{Base.Slice{Base.OneTo{Int64}}, Int64}, true}, TrackedArray{…,Vector{Float64}}}})(i::Int64)
@ Tracker ~/.julia/packages/Tracker/xe6h6/src/lib/array.jl:603
[16] ntuple
@ ./ntuple.jl:49 [inlined]
[17] (::Tracker.var"#back#666"{2, Base.Broadcast.var"#2#4"{Base.Broadcast.var"#8#10"{Base.Broadcast.var"#1#3", Base.Broadcast.var"#8#10"{Base.Broadcast.var"#5#6"{Base.Broadcast.var"#7#9"}, Base.Broadcast.var"#5#6"{Base.Broadcast.var"#7#9"}, Base.Broadcast.var"#15#16"{Base.Broadcast.var"#17#18"}, Base.Broadcast.var"#11#12"{Base.Broadcast.var"#13#14"}, ComposedFunction{Type{Float64}, typeof(-)}}, Base.Broadcast.var"#15#16"{Base.Broadcast.var"#15#16"{Base.Broadcast.var"#17#18"}}, Base.Broadcast.var"#11#12"{Base.Broadcast.var"#11#12"{Base.Broadcast.var"#13#14"}}, typeof(/)}, typeof(abs2)}, Tuple{SubArray{Float64, 1, Matrix{Float64}, Tuple{Base.Slice{Base.OneTo{Int64}}, Int64}, true}, TrackedArray{…,Vector{Float64}}}})(Δ::Vector{Float64})
@ Tracker ~/.julia/packages/Tracker/xe6h6/src/lib/array.jl:603
[18] back_(c::Tracker.Call{Tracker.var"#back#666"{2, Base.Broadcast.var"#2#4"{Base.Broadcast.var"#8#10"{Base.Broadcast.var"#1#3", Base.Broadcast.var"#8#10"{Base.Broadcast.var"#5#6"{Base.Broadcast.var"#7#9"}, Base.Broadcast.var"#5#6"{Base.Broadcast.var"#7#9"}, Base.Broadcast.var"#15#16"{Base.Broadcast.var"#17#18"}, Base.Broadcast.var"#11#12"{Base.Broadcast.var"#13#14"}, ComposedFunction{Type{Float64}, typeof(-)}}, Base.Broadcast.var"#15#16"{Base.Broadcast.var"#15#16"{Base.Broadcast.var"#17#18"}}, Base.Broadcast.var"#11#12"{Base.Broadcast.var"#11#12"{Base.Broadcast.var"#13#14"}}, typeof(/)}, typeof(abs2)}, Tuple{SubArray{Float64, 1, Matrix{Float64}, Tuple{Base.Slice{Base.OneTo{Int64}}, Int64}, true}, TrackedArray{…,Vector{Float64}}}}, Tuple{Nothing, Tracker.Tracked{Vector{Float64}}}}, Δ::Vector{Float64}, once::Bool)
@ Tracker ~/.julia/packages/Tracker/xe6h6/src/back.jl:35
[19] back(x::Tracker.Tracked{Vector{Float64}}, Δ::Vector{Float64}, once::Bool)
@ Tracker ~/.julia/packages/Tracker/xe6h6/src/back.jl:58
[20] #670
@ ~/.julia/packages/Tracker/xe6h6/src/back.jl:38 [inlined]
[21] foreach
@ ./abstractarray.jl:2142 [inlined]
[22] back_(c::Tracker.Call{Tracker.var"#591#592"{TrackedArray{…,Vector{Float64}}}, Tuple{Tracker.Tracked{Vector{Float64}}}}, Δ::Float64, once::Bool)
@ Tracker ~/.julia/packages/Tracker/xe6h6/src/back.jl:38
--- the last 4 lines are repeated 4 more times ---
[39] back(x::Tracker.Tracked{Float64}, Δ::Int64, once::Bool)
@ Tracker ~/.julia/packages/Tracker/xe6h6/src/back.jl:58
[40] #back!#672
@ ~/.julia/packages/Tracker/xe6h6/src/back.jl:77 [inlined]
[41] #back!#13
@ ~/.julia/packages/Tracker/xe6h6/src/lib/real.jl:18 [inlined]
[42] back!(x::Tracker.TrackedReal{Float64})
@ Tracker ~/.julia/packages/Tracker/xe6h6/src/lib/real.jl:16
[43] gradient_(f::Function, xs::Vector{Float64})
@ Tracker ~/.julia/packages/Tracker/xe6h6/src/back.jl:4
[44] #gradient#681
@ ~/.julia/packages/Tracker/xe6h6/src/back.jl:164 [inlined]
[45] gradient
@ ~/.julia/packages/Tracker/xe6h6/src/back.jl:164 [inlined]
[46] test_ad(f::Function, x::Vector{Float64}, broken::Tuple{}; rtol::Float64, atol::Float64)
@ Main ~/work/DistributionsAD.jl/DistributionsAD.jl/test/ad/utils.jl:357
[47] test_ad(f::Function, x::Vector{Float64}, broken::Tuple{})
@ Main ~/work/DistributionsAD.jl/DistributionsAD.jl/test/ad/utils.jl:351
[48] test_ad(dist::DistSpec{DistributionsAD.VectorOfMultivariate{Continuous, ZeroMeanDiagNormal{Tuple{Base.OneTo{Int64}}}, Vector{ZeroMeanDiagNormal{Tuple{Base.OneTo{Int64}}}}}, var"#143#239"{var"#69#165"}, Tuple{Vector{Float64}}, Matrix{Float64}, Nothing, Tuple{}}; kwargs::Base.Iterators.Pairs{Union{}, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
@ Main ~/work/DistributionsAD.jl/DistributionsAD.jl/test/ad/utils.jl:343
[49] test_ad(dist::DistSpec{DistributionsAD.VectorOfMultivariate{Continuous, ZeroMeanDiagNormal{Tuple{Base.OneTo{Int64}}}, Vector{ZeroMeanDiagNormal{Tuple{Base.OneTo{Int64}}}}}, var"#143#239"{var"#69#165"}, Tuple{Vector{Float64}}, Matrix{Float64}, Nothing, Tuple{}})
@ Main ~/work/DistributionsAD.jl/DistributionsAD.jl/test/ad/utils.jl:284
[50] macro expansion
@ ~/work/DistributionsAD.jl/DistributionsAD.jl/test/ad/distributions.jl:591 [inlined]
[51] macro expansion
@ /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.6/Test/src/Test.jl:1151 [inlined]
[52] macro expansion
@ ~/work/DistributionsAD.jl/DistributionsAD.jl/test/ad/distributions.jl:472 [inlined]
[53] macro expansion
@ /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.6/Test/src/Test.jl:1151 [inlined] I don't really understand the Some of the other runs were simply cancelled, perhaps after this run failed. In any case, perhaps we may test |
Hi, would you mind verifying if this is fixed with FillArrays v1.1.1? |
Unfortunately the issues persist even with FillArrays 1.1.1: https://github.com/TuringLang/DistributionsAD.jl/actions/runs/4992157009/jobs/9325223758 Unfortunately, I haven't had time to debug this further. Maybe there's another, similar issue still present in FillArrays? |
From the trace above it seems like FillArrays.jl/src/fillbroadcast.jl Line 199 in 61a1cf9
- , is a likel candidate?
|
You're likely right, the latest failure seems to point at the fixed line. Matrixvariate distributions: Error During Test at /home/runner/work/DistributionsAD.jl/DistributionsAD.jl/test/ad/utils.jl:357
Test threw exception
Expression: ≈(Tracker.data((Tracker.gradient(f, x))[1]), finitediff, rtol = rtol, atol = atol)
MethodError: no method matching Float64(::ForwardDiff.Dual{Nothing, Float64, 1})
Closest candidates are:
(::Type{T})(::Real, ::RoundingMode) where T<:AbstractFloat at rounding.jl:200
(::Type{T})(::T) where T<:Number at boot.jl:760
(::Type{T})(::AbstractChar) where T<:Union{AbstractChar, Number} at char.jl:50
...
Stacktrace:
[1] #8
@ ./broadcast.jl:368 [inlined]
[2] #8
@ ./broadcast.jl:366 [inlined]
[3] #2
@ ./broadcast.jl:314 [inlined]
[4] partial(::Base.Broadcast.var"#2#4"{Base.Broadcast.var"#8#10"{Base.Broadcast.var"#1#3", Base.Broadcast.var"#8#10"{Base.Broadcast.var"#5#6"{Base.Broadcast.var"#7#9"}, Base.Broadcast.var"#5#6"{Base.Broadcast.var"#7#9"}, Base.Broadcast.var"#15#16"{Base.Broadcast.var"#17#18"}, Base.Broadcast.var"#11#12"{Base.Broadcast.var"#13#14"}, DataType}, Base.Broadcast.var"#15#16"{Base.Broadcast.var"#15#16"{Base.Broadcast.var"#17#18"}}, Base.Broadcast.var"#11#12"{Base.Broadcast.var"#11#12"{Base.Broadcast.var"#13#14"}}, typeof(/)}, typeof(abs2)}, ::Float64, ::Int64, ::Float64, ::Float64)
@ Tracker ~/.julia/packages/Tracker/xe6h6/src/lib/array.jl:596
[5] _broadcast_getindex_evalf
@ ./broadcast.jl:648 [inlined]
[6] _broadcast_getindex
@ ./broadcast.jl:621 [inlined]
[7] getindex
@ ./broadcast.jl:575 [inlined]
[8] copy
@ ./broadcast.jl:922 [inlined]
[9] materialize(bc::Base.Broadcast.Broadcasted{Base.Broadcast.DefaultArrayStyle{1}, Nothing, typeof(Tracker.partial), Tuple{Base.RefValue{Base.Broadcast.var"#2#4"{Base.Broadcast.var"#8#10"{Base.Broadcast.var"#1#3", Base.Broadcast.var"#8#10"{Base.Broadcast.var"#5#6"{Base.Broadcast.var"#7#9"}, Base.Broadcast.var"#5#6"{Base.Broadcast.var"#7#9"}, Base.Broadcast.var"#15#16"{Base.Broadcast.var"#17#18"}, Base.Broadcast.var"#11#12"{Base.Broadcast.var"#13#14"}, DataType}, Base.Broadcast.var"#15#16"{Base.Broadcast.var"#15#16"{Base.Broadcast.var"#17#18"}}, Base.Broadcast.var"#11#12"{Base.Broadcast.var"#11#12"{Base.Broadcast.var"#13#14"}}, typeof(/)}, typeof(abs2)}}, Vector{Float64}, Int64, Vector{Float64}, Vector{Float64}}})
@ Base.Broadcast ./broadcast.jl:883
[...] |
I finally managed to condense the remaining (or, as you'll see, actually new) issues to a MWE 🎉 The following example works as expected in FillArrays 1.0.0, 1.0.1, 1.0.2, and 1.1.0 (so it was not a problem when opening this issue): julia> using FillArrays, ReverseDiff
julia> ReverseDiff.gradient(x -> sum(abs2.((Zeros(5) .- zeros(5)) ./ x)), rand(5))
5-element Vector{Float64}:
0.0
0.0
0.0
0.0
0.0
julia> ReverseDiff.gradient(x -> sum(abs2.((zeros(5) .- Zeros(5)) ./ x)), rand(5))
5-element Vector{Float64}:
0.0
0.0
0.0
0.0
0.0 However, with FillArrays >= 1.1.1: julia> using FillArrays, ReverseDiff
julia> ReverseDiff.gradient(x -> sum(abs2.((Zeros(5) .- zeros(5)) ./ x)), rand(5))
5-element Vector{Float64}:
0.0
0.0
0.0
0.0
0.0
julia> ReverseDiff.gradient(x -> sum(abs2.((zeros(5) .- Zeros(5)) ./ x)), rand(5))
ERROR: MethodError: no method matching Float64(::ForwardDiff.Dual{ForwardDiff.Tag{ReverseDiff.var"#109#111"{Base.Broadcast.var"#12#14"{Base.Broadcast.var"#18#20"{Base.Broadcast.var"#11#13", Base.Broadcast.var"#18#20"{Base.Broadcast.var"#15#16"{Base.Broadcast.var"#17#19"}, Base.Broadcast.var"#15#16"{Base.Broadcast.var"#17#19"}, Base.Broadcast.var"#25#26"{Base.Broadcast.var"#27#28"}, Base.Broadcast.var"#21#22"{Base.Broadcast.var"#23#24"}, DataType}, Base.Broadcast.var"#25#26"{Base.Broadcast.var"#25#26"{Base.Broadcast.var"#27#28"}}, Base.Broadcast.var"#21#22"{Base.Broadcast.var"#21#22"{Base.Broadcast.var"#23#24"}}, typeof(/)}, typeof(abs2)}, Tuple{}, Val{(1, 2)}}, Float64}, Float64, 2})
Closest candidates are:
(::Type{T})(::Real, ::RoundingMode) where T<:AbstractFloat
@ Base rounding.jl:207
(::Type{T})(::T) where T<:Number
@ Core boot.jl:792
(::Type{T})(::AbstractChar) where T<:Union{AbstractChar, Number}
@ Base char.jl:50
...
Stacktrace:
[1] #18
@ ./broadcast.jl:396 [inlined]
[2] #18
@ ./broadcast.jl:394 [inlined]
[3] #12
@ ./broadcast.jl:342 [inlined]
[4] macro expansion
@ ~/.julia/packages/ReverseDiff/wIfrd/src/derivatives/broadcast.jl:126 [inlined]
[5] splatcall
@ ~/.julia/packages/ReverseDiff/wIfrd/src/derivatives/broadcast.jl:111 [inlined]
[6] (::ReverseDiff.var"#109#111"{Base.Broadcast.var"#12#14"{Base.Broadcast.var"#18#20"{Base.Broadcast.var"#11#13", Base.Broadcast.var"#18#20"{Base.Broadcast.var"#15#16"{Base.Broadcast.var"#17#19"}, Base.Broadcast.var"#15#16"{Base.Broadcast.var"#17#19"}, Base.Broadcast.var"#25#26"{Base.Broadcast.var"#27#28"}, Base.Broadcast.var"#21#22"{Base.Broadcast.var"#23#24"}, DataType}, Base.Broadcast.var"#25#26"{Base.Broadcast.var"#25#26"{Base.Broadcast.var"#27#28"}}, Base.Broadcast.var"#21#22"{Base.Broadcast.var"#21#22"{Base.Broadcast.var"#23#24"}}, typeof(/)}, typeof(abs2)}, Tuple{}, Val{(1, 2)}})(s::StaticArraysCore.SVector{2, ForwardDiff.Dual{ForwardDiff.Tag{ReverseDiff.var"#109#111"{Base.Broadcast.var"#12#14"{Base.Broadcast.var"#18#20"{Base.Broadcast.var"#11#13", Base.Broadcast.var"#18#20"{Base.Broadcast.var"#15#16"{Base.Broadcast.var"#17#19"}, Base.Broadcast.var"#15#16"{Base.Broadcast.var"#17#19"}, Base.Broadcast.var"#25#26"{Base.Broadcast.var"#27#28"}, Base.Broadcast.var"#21#22"{Base.Broadcast.var"#23#24"}, DataType}, Base.Broadcast.var"#25#26"{Base.Broadcast.var"#25#26"{Base.Broadcast.var"#27#28"}}, Base.Broadcast.var"#21#22"{Base.Broadcast.var"#21#22"{Base.Broadcast.var"#23#24"}}, typeof(/)}, typeof(abs2)}, Tuple{}, Val{(1, 2)}}, Float64}, Float64, 2}})
@ ReverseDiff ~/.julia/packages/ReverseDiff/wIfrd/src/derivatives/broadcast.jl:150
[7] static_dual_eval
@ ~/.julia/packages/ForwardDiff/vXysl/ext/ForwardDiffStaticArraysExt.jl:24 [inlined]
[8] vector_mode_gradient!(result::DiffResults.ImmutableDiffResult{1, Float64, Tuple{StaticArraysCore.SVector{2, Float64}}}, f::Function, x::StaticArraysCore.SVector{2, Float64})
@ ForwardDiffStaticArraysExt ~/.julia/packages/ForwardDiff/vXysl/ext/ForwardDiffStaticArraysExt.jl:64
[9] gradient!(result::DiffResults.ImmutableDiffResult{1, Float64, Tuple{StaticArraysCore.SVector{2, Float64}}}, f::Function, x::StaticArraysCore.SVector{2, Float64})
@ ForwardDiffStaticArraysExt ~/.julia/packages/ForwardDiff/vXysl/ext/ForwardDiffStaticArraysExt.jl:44
[10] (::ReverseDiff.var"#df#110"{Base.Broadcast.var"#12#14"{Base.Broadcast.var"#18#20"{Base.Broadcast.var"#11#13", Base.Broadcast.var"#18#20"{Base.Broadcast.var"#15#16"{Base.Broadcast.var"#17#19"}, Base.Broadcast.var"#15#16"{Base.Broadcast.var"#17#19"}, Base.Broadcast.var"#25#26"{Base.Broadcast.var"#27#28"}, Base.Broadcast.var"#21#22"{Base.Broadcast.var"#23#24"}, DataType}, Base.Broadcast.var"#25#26"{Base.Broadcast.var"#25#26"{Base.Broadcast.var"#27#28"}}, Base.Broadcast.var"#21#22"{Base.Broadcast.var"#21#22"{Base.Broadcast.var"#23#24"}}, typeof(/)}, typeof(abs2)}, DiffResults.ImmutableDiffResult{1, Float64, Tuple{StaticArraysCore.SVector{2, Float64}}}, Tuple{}, Val{(1, 2)}})(::Float64, ::Vararg{Float64})
@ ReverseDiff ~/.julia/packages/ReverseDiff/wIfrd/src/derivatives/broadcast.jl:148
[11] _broadcast_getindex_evalf
@ ./broadcast.jl:683 [inlined]
[12] _broadcast_getindex
@ ./broadcast.jl:656 [inlined]
[13] getindex
@ ./broadcast.jl:610 [inlined]
[14] copy
@ ./broadcast.jl:912 [inlined]
[15] materialize
@ ./broadcast.jl:873 [inlined]
[16] broadcast(::ReverseDiff.var"#df#110"{Base.Broadcast.var"#12#14"{Base.Broadcast.var"#18#20"{Base.Broadcast.var"#11#13", Base.Broadcast.var"#18#20"{Base.Broadcast.var"#15#16"{Base.Broadcast.var"#17#19"}, Base.Broadcast.var"#15#16"{Base.Broadcast.var"#17#19"}, Base.Broadcast.var"#25#26"{Base.Broadcast.var"#27#28"}, Base.Broadcast.var"#21#22"{Base.Broadcast.var"#23#24"}, DataType}, Base.Broadcast.var"#25#26"{Base.Broadcast.var"#25#26"{Base.Broadcast.var"#27#28"}}, Base.Broadcast.var"#21#22"{Base.Broadcast.var"#21#22"{Base.Broadcast.var"#23#24"}}, typeof(/)}, typeof(abs2)}, DiffResults.ImmutableDiffResult{1, Float64, Tuple{StaticArraysCore.SVector{2, Float64}}}, Tuple{}, Val{(1, 2)}}, ::Vector{Float64}, ::Vector{Float64})
@ Base.Broadcast ./broadcast.jl:811
[17] ∇broadcast(::Base.Broadcast.var"#12#14"{Base.Broadcast.var"#18#20"{Base.Broadcast.var"#11#13", Base.Broadcast.var"#18#20"{Base.Broadcast.var"#15#16"{Base.Broadcast.var"#17#19"}, Base.Broadcast.var"#15#16"{Base.Broadcast.var"#17#19"}, Base.Broadcast.var"#25#26"{Base.Broadcast.var"#27#28"}, Base.Broadcast.var"#21#22"{Base.Broadcast.var"#23#24"}, DataType}, Base.Broadcast.var"#25#26"{Base.Broadcast.var"#25#26"{Base.Broadcast.var"#27#28"}}, Base.Broadcast.var"#21#22"{Base.Broadcast.var"#21#22"{Base.Broadcast.var"#23#24"}}, typeof(/)}, typeof(abs2)}, ::Vector{Float64}, ::Vararg{Any})
@ ReverseDiff ~/.julia/packages/ReverseDiff/wIfrd/src/derivatives/broadcast.jl:154
[18] copy(_bc::Base.Broadcast.Broadcasted{ReverseDiff.TrackedStyle, Tuple{Base.OneTo{Int64}}, typeof(abs2), Tuple{Base.Broadcast.Broadcasted{ReverseDiff.TrackedStyle, Nothing, typeof(/), Tuple{Base.Broadcast.Broadcasted{Base.Broadcast.DefaultArrayStyle{1}, Nothing, Type{Float64}, Tuple{Vector{Float64}}}, ReverseDiff.TrackedArray{Float64, Float64, 1, Vector{Float64}, Vector{Float64}}}}}})
@ ReverseDiff ~/.julia/packages/ReverseDiff/wIfrd/src/derivatives/broadcast.jl:94
[19] materialize
@ ./broadcast.jl:873 [inlined]
[20] (::var"#7#8")(x::ReverseDiff.TrackedArray{Float64, Float64, 1, Vector{Float64}, Vector{Float64}})
@ Main ./REPL[4]:1
[21] ReverseDiff.GradientTape(f::var"#7#8", input::Vector{Float64}, cfg::ReverseDiff.GradientConfig{ReverseDiff.TrackedArray{Float64, Float64, 1, Vector{Float64}, Vector{Float64}}})
@ ReverseDiff ~/.julia/packages/ReverseDiff/wIfrd/src/api/tape.jl:199
[22] gradient(f::Function, input::Vector{Float64}, cfg::ReverseDiff.GradientConfig{ReverseDiff.TrackedArray{Float64, Float64, 1, Vector{Float64}, Vector{Float64}}})
@ ReverseDiff ~/.julia/packages/ReverseDiff/wIfrd/src/api/gradients.jl:22
[23] gradient(f::Function, input::Vector{Float64})
@ ReverseDiff ~/.julia/packages/ReverseDiff/wIfrd/src/api/gradients.jl:22
[24] top-level scope
@ REPL[4]:1 So it seems this bug was introduced in FillArrays 1.1.1 (presumably #264) and therefore tests still failed when I checked with FillArrays 1.1.1 even though the initial issues were (seemingly) fixed (#252 (comment)). |
Hmm, seems these broadcasting specializations are a bit tricky for AD (and Tracker + ReverseDiff in particular). Changing FillArrays.jl/src/fillbroadcast.jl Line 208 in 9be3ba2
_copy_oftype(a, TT) would fix the MWE but I'm not sure if it could be problematic in other cases.
|
Oh, actually the problem might be TT = typeof($op(zero(T), zero(V))) seems to fix it (and seems more correct if e.g. |
Hej!
The latest release of FillArrays broke DistributionsAD. More precisely, some tests of ReverseDiff and Tracker started to fail. Due to the large number of changes it's not immediately clear to me what change exactly is the problem and hence I was wondering if maybe for some of the contributors in this repo it might be more obvious.
Two days ago tests passed without problems: https://github.com/TuringLang/DistributionsAD.jl/actions/runs/4992157009/jobs/8939577198 (the single failing test is unrelated, this specific job has been terminated in all recent runs)
Whereas since yesterday many tests fail: https://github.com/TuringLang/DistributionsAD.jl/actions/runs/4992157009
I compared the installed packages in https://github.com/TuringLang/DistributionsAD.jl/actions/runs/4992157009/jobs/8988760248 (fails) and https://github.com/TuringLang/DistributionsAD.jl/actions/runs/4992157009/jobs/8939577198 (succeeds). It turns out the diff is simple, namely
The changes in Distributions are completely unrelated: JuliaStats/Distributions.jl@v0.25.92...v0.25.93 only fixed some type inference issues of
Truncated{<:Normal}
but the failing tests are caused byMvNormal
(no truncated distributions).Thus FillArrays 1.0.1 must have broken it.
The text was updated successfully, but these errors were encountered: