diff --git a/test/Project.toml b/test/Project.toml index 1c1ffc16d1..04ab464668 100644 --- a/test/Project.toml +++ b/test/Project.toml @@ -22,12 +22,13 @@ Pkg = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f" Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" ReverseDiff = "37e2e3b7-166d-5795-8a7a-e32c996b4267" SpecialFunctions = "276daf66-3868-5448-9aa4-cd146d93841b" +StableRNGs = "860ef19b-820b-49d6-a774-d7a799459cd3" StatsBase = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91" StatsFuns = "4c63d2b9-4356-54db-8cca-17b64c39e42c" Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" +TimerOutputs = "a759f4b9-e2f1-59dc-863e-4aeb61b1ea8f" Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c" Zygote = "e88e6eb3-aa80-5325-afca-941959d7151f" -StableRNGs = "860ef19b-820b-49d6-a774-d7a799459cd3" [compat] AbstractMCMC = "3.2.1" @@ -50,9 +51,10 @@ Optim = "0.22, 1.0" PDMats = "0.10, 0.11" ReverseDiff = "1.4.2" SpecialFunctions = "0.10.3, 1, 2" +StableRNGs = "1" StatsBase = "0.33" StatsFuns = "0.9.5" +TimerOutputs = "0.5" Tracker = "0.2.11" Zygote = "0.5.4, 0.6" -StableRNGs = "1" julia = "1.3" diff --git a/test/runtests.jl b/test/runtests.jl index bdc64df8f3..c5d69031f2 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -35,6 +35,7 @@ using DynamicPPL: getval, getlogp using ForwardDiff: Dual using MCMCChains: Chains using StatsFuns: binomlogpdf, logistic, logsumexp +using TimerOutputs: TimerOutputs, @timeit using Turing: BinomialLogit, ForwardDiffAD, Sampler, SampleFromPrior, NUTS, TrackerAD, Variational, ZygoteAD, getspace, gradient_logp using Turing.Essential: TuringDenseMvNormal, TuringDiagMvNormal @@ -44,61 +45,65 @@ setprogress!(false) include(pkgdir(Turing)*"/test/test_utils/AllUtils.jl") +# Collect timing and allocations information to show in a clear way. +const TIMEROUTPUT = TimerOutputs.TimerOutput() +macro timeit_include(path::AbstractString) :(@timeit TIMEROUTPUT $path include($path)) end + @testset "Turing" begin @testset "essential" begin - include("essential/ad.jl") + @timeit_include("essential/ad.jl") end @testset "samplers (without AD)" begin - include("inference/AdvancedSMC.jl") - include("inference/emcee.jl") - include("inference/ess.jl") - include("inference/is.jl") + @timeit_include("inference/AdvancedSMC.jl") + @timeit_include("inference/emcee.jl") + @timeit_include("inference/ess.jl") + @timeit_include("inference/is.jl") end Turing.setrdcache(false) for adbackend in (:forwarddiff, :tracker, :reversediff) - Turing.setadbackend(adbackend) - @info "Testing $(adbackend)" - start = time() - @testset "inference: $adbackend" begin - @testset "samplers" begin - include("inference/gibbs.jl") - include("inference/gibbs_conditional.jl") - include("inference/hmc.jl") - include("inference/Inference.jl") - include("contrib/inference/dynamichmc.jl") - include("contrib/inference/sghmc.jl") - include("inference/mh.jl") + @timeit TIMEROUTPUT "inference: $adbackend" begin + Turing.setadbackend(adbackend) + @info "Testing $(adbackend)" + @testset "inference: $adbackend" begin + @testset "samplers" begin + @timeit_include("inference/gibbs.jl") + @timeit_include("inference/gibbs_conditional.jl") + @timeit_include("inference/hmc.jl") + @timeit_include("inference/Inference.jl") + @timeit_include("contrib/inference/dynamichmc.jl") + @timeit_include("contrib/inference/sghmc.jl") + @timeit_include("inference/mh.jl") + end end - end - @testset "variational algorithms : $adbackend" begin - include("variational/advi.jl") - end + @testset "variational algorithms : $adbackend" begin + @timeit_include("variational/advi.jl") + end - @testset "modes" begin - include("modes/ModeEstimation.jl") - include("modes/OptimInterface.jl") - end + @testset "modes : $adbackend" begin + @timeit_include("modes/ModeEstimation.jl") + @timeit_include("modes/OptimInterface.jl") + end - # Useful for - # a) discovering performance regressions, - # b) figuring out why CI is timing out. - @info "Tests for $(adbackend) took $(time() - start) seconds" + end end + @testset "variational optimisers" begin - include("variational/optimisers.jl") + @timeit_include("variational/optimisers.jl") end Turing.setadbackend(:forwarddiff) @testset "stdlib" begin - include("stdlib/distributions.jl") - include("stdlib/RandomMeasures.jl") + @timeit_include("stdlib/distributions.jl") + @timeit_include("stdlib/RandomMeasures.jl") end @testset "utilities" begin # include("utilities/stan-interface.jl") - include("inference/utilities.jl") + @timeit_include("inference/utilities.jl") end end + +show(TIMEROUTPUT; compact=true, sortby=:firstexec)