-
Notifications
You must be signed in to change notification settings - Fork 220
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
Replace internal AD backend types with ADTypes #2047
Conversation
Love it! |
We'll also need to make equivalent changes in AdvancedVI, I believe. |
I think @Red-Portal already did it in the AdvancedVI rewrite PR. |
Hi, yes that's already up to date! |
I opened tpapp/LogDensityProblemsAD.jl#21. |
AutoForwardDiff, | ||
AutoTracker, | ||
AutoZygote, | ||
AutoReverseDiff, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Do we actually want to export these types? Or should we tell users to use ADTypes.AutoForwardDiff
etc. (in particular when these types would be used in other packages such as e.g. AdvancedVI as well).
test/essential/ad.jl
Outdated
f_rd = LogDensityProblemsAD.ADgradient(Turing.Essential.ReverseDiffAD{false}(), f) | ||
f_rd_compiled = LogDensityProblemsAD.ADgradient(Turing.Essential.ReverseDiffAD{true}(), f) | ||
f_rd = LogDensityProblemsAD.ADgradient(Turing.Essential.ReverseDiffAD(false), f) | ||
f_rd_compiled = LogDensityProblemsAD.ADgradient(Val(:ReverseDiff), f; compile=Val(true), x=θ) # need to compile with non-zero inputs |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@devmotion I had to pass in θ
for the result to be correct, started a PR tpapp/LogDensityProblemsAD.jl#22
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think we should not add a keyword argument but just continue overloading ADgradient
for TuringLogDensityFunction
. I wouldn't want users to have to deal with such a keyword argument.
) where AD | ||
return HMC{AD}(ϵ, n_leapfrog, metricT, space) | ||
return HMC(ϵ, n_leapfrog, metricT, space; adtype = adtype) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@devmotion, we can probably consider removing the global AD flag ADBACKEND
, and always specify the autodiff backend in inference algorithms. What are your thoughts?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
And set the default AD type for each algorithm/sampler to a specific default such as AutoForwardDiff, you mean? Or would you like users to always specify the AD type explicitly?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes, we can set the default AD type to AutoForwardDiff
for all algorithms and allow users to override them via keyword arguments. That way, we don't need to maintain a global AD flag and can remove the messy code around it. But that should probably be done in a separate PR.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I would like to get rid of the global flag 👍 If we make it in a separate PR we should maybe wait with tagging a breaking release until this follow-up PR is merged as well, to avoid two breaking releases in a row.
Pull Request Test Coverage Report for Build 6887921533
💛 - Coveralls |
Codecov ReportAttention:
Additional details and impacted files@@ Coverage Diff @@
## master #2047 +/- ##
======================================
Coverage 0.00% 0.00%
======================================
Files 21 21
Lines 1435 1421 -14
======================================
+ Misses 1435 1421 -14 ☔ View full report in Codecov by Sentry. |
kwargs... | ||
) where AD | ||
return HMC{AD}(ϵ, n_leapfrog; kwargs...) | ||
function HMC(ϵ::Float64, n_leapfrog::Int, ::Type{metricT}, space::Tuple; adtype::ADTypes.AbstractADType = ADBackend()) where {metricT <: AHMC.AbstractMetric} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should we remove this constructor and only support metricT
as keyword argument? Or make all arguments keyword arguments?
Generally, these HMC constructors are quite messy...
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We plan to depreciate and then remove this old interface once the AbstractMCMC
-based externalsampler
interface works for Gibbs.
CI errors about |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks @sunxd3 @devmotion -- good work!
* Update autodiff.jmd following adaptation of `ADTypes` TuringLang/Turing.jl#2047 * Update tutorials/docs-10-using-turing-autodiff/autodiff.jmd Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> * Using `ADTypes` for ad doc * Update tutorials/docs-10-using-turing-autodiff/autodiff.jmd Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> * Update tutorials/docs-10-using-turing-autodiff/autodiff.jmd Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> * Apply suggestions from code review Co-authored-by: Hong Ge <[email protected]> * Update tutorials/docs-10-using-turing-autodiff/autodiff.jmd * Update tutorials/docs-10-using-turing-autodiff/autodiff.jmd Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> * Apply suggestions from code review * Update tutorials/docs-10-using-turing-autodiff/autodiff.jmd * Update tutorials/docs-10-using-turing-autodiff/autodiff.jmd * Update tutorials/docs-10-using-turing-autodiff/autodiff.jmd * Update tutorials/docs-10-using-turing-autodiff/autodiff.jmd Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Hong Ge <[email protected]>
So the tape gets compiled by default now when using |
You need to pass |
Yes, but still is not clear. The example has only Also, https://github.com/SciML/ADTypes.jl doesn't have docs, so it is even harder to figure it out. |
@sunxd3, maybe add a few concrete examples for each popular autodiff backend to |
Yeah, it is confusing, I'll have a PR |
I can do that if you want to. I am hours away from my Holiday break. EDIT: here (https://turinglang.org/v0.30/docs/using-turing/autodiff) |
@storopoli yep, the tutorial is updated. I just updated the release information too |
This PR is a draft proposal for replacing our internal AD backend types with ADTypes.
Needs support of ADTypes in LogDensityProblemsAD: tpapp/LogDensityProblemsAD.jl#17