1
- using DynamicPPL: @model
2
- using DynamicPPLBenchmarks: make_suite
1
+ using DynamicPPLBenchmarks: Models, make_suite
3
2
using BenchmarkTools: median, run
4
- using Distributions : Normal, Beta, Bernoulli
5
- using PrettyTables : pretty_table, PrettyTables
3
+ using PrettyTables : PrettyTables
4
+ using Random : seed!
6
5
7
- # Define models
8
- @model function demo1 (x)
9
- m ~ Normal ()
10
- x ~ Normal (m, 1 )
11
- return (m= m, x= x)
12
- end
6
+ seed! (23 )
13
7
14
- @model function demo2 (y)
15
- p ~ Beta (1 , 1 )
16
- N = length (y)
17
- for n in 1 : N
18
- y[n] ~ Bernoulli (p)
19
- end
20
- return (; p)
8
+ smorgasbord_instance = Models. smorgasbord (randn (100 ), randn (100 ))
9
+ loop_univariate1k, multivariate1k = begin
10
+ data_1k = randn (1_000 )
11
+ loop = Models. loop_univariate (length (data_1k)) | (; o= data_1k)
12
+ multi = Models. multivariate (length (data_1k)) | (; o= data_1k)
13
+ loop, multi
14
+ end
15
+ loop_univariate10k, multivariate10k = begin
16
+ data_10k = randn (10_000 )
17
+ loop = Models. loop_univariate (length (data_10k)) | (; o= data_10k)
18
+ multi = Models. multivariate (length (data_10k)) | (; o= data_10k)
19
+ loop, multi
20
+ end
21
+ lda_instance = begin
22
+ w = [1 , 2 , 3 , 2 , 1 , 1 ]
23
+ d = [1 , 1 , 1 , 2 , 2 , 2 ]
24
+ Models. lda (2 , d, w)
21
25
end
22
-
23
- demo1_data = randn ()
24
- demo2_data = rand (Bool, 10 )
25
-
26
- # Create model instances with the data
27
- demo1_instance = demo1 (demo1_data)
28
- demo2_instance = demo2 (demo2_data)
29
26
30
27
# Specify the combinations to test:
31
28
# (Model Name, model instance, VarInfo choice, AD backend)
32
29
chosen_combinations = [
33
- (" Demo1" , demo1_instance, :typed , :forwarddiff ),
34
- (" Demo1" , demo1_instance, :simple_namedtuple , :zygote ),
35
- (" Demo2" , demo2_instance, :untyped , :reversediff ),
36
- (" Demo2" , demo2_instance, :simple_dict , :forwarddiff ),
30
+ (" Simple assume observe" , Models. simple_assume_observe (randn ()), :typed , :forwarddiff ),
31
+ (" Smorgasbord" , smorgasbord_instance, :typed , :forwarddiff ),
32
+ (" Smorgasbord" , smorgasbord_instance, :simple_namedtuple , :forwarddiff ),
33
+ (" Smorgasbord" , smorgasbord_instance, :untyped , :forwarddiff ),
34
+ (" Smorgasbord" , smorgasbord_instance, :simple_dict , :forwarddiff ),
35
+ (" Smorgasbord" , smorgasbord_instance, :typed , :reversediff ),
36
+ # ("Smorgasbord", smorgasbord_instance, :typed, :mooncake),
37
+ (" Loop univariate 1k" , loop_univariate1k, :typed , :reversediff ),
38
+ (" Multivariate 1k" , multivariate1k, :typed , :reversediff ),
39
+ (" Loop univariate 10k" , loop_univariate10k, :typed , :reversediff ),
40
+ (" Multivariate 10k" , multivariate10k, :typed , :reversediff ),
41
+ (" Dynamic" , Models. dynamic (), :typed , :reversediff ),
42
+ (" Submodel" , Models. parent (randn ()), :typed , :reversediff ),
43
+ (" LDA" , lda_instance, :typed , :reversediff ),
37
44
]
38
45
39
46
results_table = Tuple{String,String,String,Float64,Float64}[]
@@ -42,9 +49,9 @@ for (model_name, model, varinfo_choice, adbackend) in chosen_combinations
42
49
suite = make_suite (model, varinfo_choice, adbackend)
43
50
results = run (suite)
44
51
45
- eval_time = median (results[" AD_Benchmarking " ][ " evaluation" ][" standard" ]). time
52
+ eval_time = median (results[" evaluation" ][" standard" ]). time
46
53
47
- grad_group = results[" AD_Benchmarking " ][ " gradient" ]
54
+ grad_group = results[" gradient" ]
48
55
if isempty (grad_group)
49
56
ad_eval_time = NaN
50
57
else
@@ -62,4 +69,4 @@ table_matrix = hcat(Iterators.map(collect, zip(results_table...))...)
62
69
header = [
63
70
" Model" , " AD Backend" , " VarInfo Type" , " Evaluation Time (ns)" , " AD Eval Time (ns)"
64
71
]
65
- pretty_table (table_matrix; header= header, tf= PrettyTables. tf_markdown)
72
+ PrettyTables . pretty_table (table_matrix; header= header, tf= PrettyTables. tf_markdown)
0 commit comments