Skip to content

Commit

Permalink
build based on f9465ab
Browse files Browse the repository at this point in the history
  • Loading branch information
Documenter.jl committed Oct 27, 2024
1 parent f5e684c commit ab10916
Show file tree
Hide file tree
Showing 53 changed files with 2,742 additions and 2,742 deletions.
2 changes: 1 addition & 1 deletion dev/.documenter-siteinfo.json
Original file line number Diff line number Diff line change
@@ -1 +1 @@
{"documenter":{"julia_version":"1.11.1","generation_timestamp":"2024-10-27T12:14:29","documenter_version":"1.7.0"}}
{"documenter":{"julia_version":"1.11.1","generation_timestamp":"2024-10-27T12:15:31","documenter_version":"1.7.0"}}
6 changes: 3 additions & 3 deletions dev/API/index.html

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions dev/Bachmann/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
petab_prob2.grad!(g2, x)
@printf("Runtime InterpolatingAdjoint: %.1fs\n", b1)
@printf(&quot;Runtime GaussAdjoint: %.1fs\n&quot;, b2)</code></pre><pre class="documenter-example-output"><code class="nohighlight hljs ansi">Runtime InterpolatingAdjoint: 0.5s
Runtime GaussAdjoint: 0.9s</code></pre><p>In this case <code>InterpolatingAdjoint</code> performs best (this can change dependent on computer). As mentioned above, another important argument is the VJP method; let us explore the best two options for <code>InterpolatingAdjoint</code>:</p><pre><code class="language-julia hljs">petab_prob1 = PEtabODEProblem(model; gradient_method = :Adjoint,
Runtime GaussAdjoint: 1.0s</code></pre><p>In this case <code>InterpolatingAdjoint</code> performs best (this can change dependent on computer). As mentioned above, another important argument is the VJP method; let us explore the best two options for <code>InterpolatingAdjoint</code>:</p><pre><code class="language-julia hljs">petab_prob1 = PEtabODEProblem(model; gradient_method = :Adjoint,
odesolver = osolver, odesolver_gradient = osolver,
sensealg = InterpolatingAdjoint(autojacvec = EnzymeVJP()))
petab_prob2 = PEtabODEProblem(model; gradient_method = :Adjoint,
Expand All @@ -25,4 +25,4 @@
b2 = @elapsed petab_prob2.grad!(g2, x)
@printf(&quot;Runtime EnzymeVJP() : %.1fs\n&quot;, b1)
@printf(&quot;Runtime ReverseDiffVJP(true): %.1fs\n&quot;, b2)</code></pre><pre class="documenter-example-output"><code class="nohighlight hljs ansi">Runtime EnzymeVJP() : 0.7s
Runtime ReverseDiffVJP(true): 0.6s</code></pre><p>In this case, <code>ReverseDiffVJP(true)</code> performs best (this can vary depending on the computer), but often <code>EnzymeVJP</code> is the better choice. Generally, <code>GaussAdjoint</code> with <code>EnzymeVJP</code> is often the best combination, but as seen above, this is not always the case. Therefore, for larger models where runtime can be substantial, we recommend benchmarking different adjoint algorithms and VJP methods to find the best configuration for your specific problem.</p><p>Lastly, it should be noted that even if <code>gradient_method=:Adjoint</code> is the fastest option for larger models, we still recommend using <code>:ForwardDiff</code> if it is not substantially slower. This is because computing the gradient via adjoint methods is much more challenging than with forward methods, as the adjoint approach requires solving a difficult adjoint ODE. In our benchmarks, we have observed that sometimes <code>:ForwardDiff</code> successfully computes the gradient, while <code>:Adjoint</code> does not. Moreover, forward methods tend to produce more accurate gradients.</p><h2 id="References"><a class="docs-heading-anchor" href="#References">References</a><a id="References-1"></a><a class="docs-heading-anchor-permalink" href="#References" title="Permalink"></a></h2><div class="citation noncanonical"><dl><dt>[2]</dt><dd><div>A. Raue, M. Schilling, J. Bachmann, A. Matteson, M. Schelke, D. Kaschek, S. Hug, C. Kreutz, B. D. Harms, F. J. Theis and others. <em>Lessons learned from quantitative dynamical modeling in systems biology</em>. PloS one <strong>8</strong>, e74335 (2013).</div></dd><dt>[5]</dt><dd><div>A. F. Villaverde, F. Fröhlich, D. Weindl, J. Hasenauer and J. R. Banga. <em>Benchmarking optimization methods for parameter estimation in large kinetic models</em>. Bioinformatics <strong>35</strong>, 830–838 (2019).</div></dd><dt>[16]</dt><dd><div>F. Sapienza, J. Bolibar, F. Schäfer, B. Groenke, A. Pal, V. Boussange, P. Heimbach, G. Hooker, F. Pérez, P.-O. Persson and others. <em>Differentiable Programming for Differential Equations: A Review</em>, arXiv preprint arXiv:2406.09699 (2024).</div></dd><dt>[20]</dt><dd><div>F. Fröhlich, B. Kaltenbacher, F. J. Theis and J. Hasenauer. <em>Scalable parameter estimation for genome-scale biochemical reaction networks</em>. PLoS computational biology <strong>13</strong>, e1005331 (2017).</div></dd><dt>[21]</dt><dd><div>Y. Ma, V. Dixit, M. J. Innes, X. Guo and C. Rackauckas. <em>A comparison of automatic differentiation and continuous sensitivity analysis for derivatives of differential equation solutions</em>. In: <em>2021 IEEE High Performance Extreme Computing Conference (HPEC)</em> (IEEE, 2021); pp. 1–9.</div></dd><dt>[25]</dt><dd><div>J. Bachmann, A. Raue, M. Schilling, M. E. Böhm, C. Kreutz, D. Kaschek, H. Busch, N. Gretz, W. D. Lehmann, J. Timmer and others. <em>Division of labor by dual feedback regulators controls JAK2/STAT5 signaling over broad ligand range</em>. Molecular systems biology <strong>7</strong>, 516 (2011).</div></dd></dl></div></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../Beer/">« Condition-Specific Parameters</a><a class="docs-footer-nextpage" href="../references/">References »</a><div class="flexbox-break"></div><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="auto">Automatic (OS)</option><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option><option value="catppuccin-latte">catppuccin-latte</option><option value="catppuccin-frappe">catppuccin-frappe</option><option value="catppuccin-macchiato">catppuccin-macchiato</option><option value="catppuccin-mocha">catppuccin-mocha</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> version 1.7.0 on <span class="colophon-date" title="Sunday 27 October 2024 12:13">Sunday 27 October 2024</span>. Using Julia version 1.11.1.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>
Runtime ReverseDiffVJP(true): 0.5s</code></pre><p>In this case, <code>ReverseDiffVJP(true)</code> performs best (this can vary depending on the computer), but often <code>EnzymeVJP</code> is the better choice. Generally, <code>GaussAdjoint</code> with <code>EnzymeVJP</code> is often the best combination, but as seen above, this is not always the case. Therefore, for larger models where runtime can be substantial, we recommend benchmarking different adjoint algorithms and VJP methods to find the best configuration for your specific problem.</p><p>Lastly, it should be noted that even if <code>gradient_method=:Adjoint</code> is the fastest option for larger models, we still recommend using <code>:ForwardDiff</code> if it is not substantially slower. This is because computing the gradient via adjoint methods is much more challenging than with forward methods, as the adjoint approach requires solving a difficult adjoint ODE. In our benchmarks, we have observed that sometimes <code>:ForwardDiff</code> successfully computes the gradient, while <code>:Adjoint</code> does not. Moreover, forward methods tend to produce more accurate gradients.</p><h2 id="References"><a class="docs-heading-anchor" href="#References">References</a><a id="References-1"></a><a class="docs-heading-anchor-permalink" href="#References" title="Permalink"></a></h2><div class="citation noncanonical"><dl><dt>[2]</dt><dd><div>A. Raue, M. Schilling, J. Bachmann, A. Matteson, M. Schelke, D. Kaschek, S. Hug, C. Kreutz, B. D. Harms, F. J. Theis and others. <em>Lessons learned from quantitative dynamical modeling in systems biology</em>. PloS one <strong>8</strong>, e74335 (2013).</div></dd><dt>[5]</dt><dd><div>A. F. Villaverde, F. Fröhlich, D. Weindl, J. Hasenauer and J. R. Banga. <em>Benchmarking optimization methods for parameter estimation in large kinetic models</em>. Bioinformatics <strong>35</strong>, 830–838 (2019).</div></dd><dt>[16]</dt><dd><div>F. Sapienza, J. Bolibar, F. Schäfer, B. Groenke, A. Pal, V. Boussange, P. Heimbach, G. Hooker, F. Pérez, P.-O. Persson and others. <em>Differentiable Programming for Differential Equations: A Review</em>, arXiv preprint arXiv:2406.09699 (2024).</div></dd><dt>[20]</dt><dd><div>F. Fröhlich, B. Kaltenbacher, F. J. Theis and J. Hasenauer. <em>Scalable parameter estimation for genome-scale biochemical reaction networks</em>. PLoS computational biology <strong>13</strong>, e1005331 (2017).</div></dd><dt>[21]</dt><dd><div>Y. Ma, V. Dixit, M. J. Innes, X. Guo and C. Rackauckas. <em>A comparison of automatic differentiation and continuous sensitivity analysis for derivatives of differential equation solutions</em>. In: <em>2021 IEEE High Performance Extreme Computing Conference (HPEC)</em> (IEEE, 2021); pp. 1–9.</div></dd><dt>[25]</dt><dd><div>J. Bachmann, A. Raue, M. Schilling, M. E. Böhm, C. Kreutz, D. Kaschek, H. Busch, N. Gretz, W. D. Lehmann, J. Timmer and others. <em>Division of labor by dual feedback regulators controls JAK2/STAT5 signaling over broad ligand range</em>. Molecular systems biology <strong>7</strong>, 516 (2011).</div></dd></dl></div></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../Beer/">« Condition-Specific Parameters</a><a class="docs-footer-nextpage" href="../references/">References »</a><div class="flexbox-break"></div><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="auto">Automatic (OS)</option><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option><option value="catppuccin-latte">catppuccin-latte</option><option value="catppuccin-frappe">catppuccin-frappe</option><option value="catppuccin-macchiato">catppuccin-macchiato</option><option value="catppuccin-mocha">catppuccin-mocha</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> version 1.7.0 on <span class="colophon-date" title="Sunday 27 October 2024 12:14">Sunday 27 October 2024</span>. Using Julia version 1.11.1.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>
4 changes: 2 additions & 2 deletions dev/Beer/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -20,5 +20,5 @@
b1 = @elapsed petab_prob1.hess!(h1, x)
b2 = @elapsed petab_prob2.hess!(h2, x)
@printf(&quot;Runtime split_over_conditions = true: %.1fs\n&quot;, b1)
@printf(&quot;Runtime split_over_conditions = false: %.1fs\n&quot;, b2)</code></pre><pre class="documenter-example-output"><code class="nohighlight hljs ansi">Runtime split_over_conditions = true: 0.5s
Runtime split_over_conditions = false: 25.8s</code></pre><p>Given that <code>split_over_conditions=true</code> reduces runtime in the example above, a natural question is: why is it not the default option in PEtab.jl? This is because calling <code>ForwardDiff.gradient</code> for each simulation condition, instead of once for all conditions, introduces an overhead. Therefore, for models with none or very few condition-specific parameters, <code>split_over_conditions=false</code> is faster. Determining exactly how many condition-specific parameters are needed to make <code>true</code> the faster option is difficult. Currently, the default is to enable this option when the number of condition-specific parameters is at least twice the number of parameters to estimate in the ODE model. For the Beer model, this means <code>split_over_conditions=true</code> is set by default, but this is a rough heuristic. Therefore, for models like these, we recommend benchmarking the two configurations to determine which is fastest.</p><h2 id="References"><a class="docs-heading-anchor" href="#References">References</a><a id="References-1"></a><a class="docs-heading-anchor-permalink" href="#References" title="Permalink"></a></h2><div class="citation noncanonical"><dl><dt>[24]</dt><dd><div>R. Beer, K. Herbst, N. Ignatiadis, I. Kats, L. Adlung, H. Meyer, D. Niopek, T. Christiansen, F. Georgi, N. Kurzawa and others. <em>Creating functional engineered variants of the single-module non-ribosomal peptide synthetase IndC by T domain exchange</em>. Molecular BioSystems <strong>10</strong>, 1709–1718 (2014).</div></dd></dl></div></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../nonstiff_models/">« Non-Biology (Non-Stiff) Models</a><a class="docs-footer-nextpage" href="../Bachmann/">Adjoint Sensitivity Analysis (Large Models) »</a><div class="flexbox-break"></div><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="auto">Automatic (OS)</option><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option><option value="catppuccin-latte">catppuccin-latte</option><option value="catppuccin-frappe">catppuccin-frappe</option><option value="catppuccin-macchiato">catppuccin-macchiato</option><option value="catppuccin-mocha">catppuccin-mocha</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> version 1.7.0 on <span class="colophon-date" title="Sunday 27 October 2024 12:14">Sunday 27 October 2024</span>. Using Julia version 1.11.1.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>
@printf(&quot;Runtime split_over_conditions = false: %.1fs\n&quot;, b2)</code></pre><pre class="documenter-example-output"><code class="nohighlight hljs ansi">Runtime split_over_conditions = true: 0.6s
Runtime split_over_conditions = false: 26.1s</code></pre><p>Given that <code>split_over_conditions=true</code> reduces runtime in the example above, a natural question is: why is it not the default option in PEtab.jl? This is because calling <code>ForwardDiff.gradient</code> for each simulation condition, instead of once for all conditions, introduces an overhead. Therefore, for models with none or very few condition-specific parameters, <code>split_over_conditions=false</code> is faster. Determining exactly how many condition-specific parameters are needed to make <code>true</code> the faster option is difficult. Currently, the default is to enable this option when the number of condition-specific parameters is at least twice the number of parameters to estimate in the ODE model. For the Beer model, this means <code>split_over_conditions=true</code> is set by default, but this is a rough heuristic. Therefore, for models like these, we recommend benchmarking the two configurations to determine which is fastest.</p><h2 id="References"><a class="docs-heading-anchor" href="#References">References</a><a id="References-1"></a><a class="docs-heading-anchor-permalink" href="#References" title="Permalink"></a></h2><div class="citation noncanonical"><dl><dt>[24]</dt><dd><div>R. Beer, K. Herbst, N. Ignatiadis, I. Kats, L. Adlung, H. Meyer, D. Niopek, T. Christiansen, F. Georgi, N. Kurzawa and others. <em>Creating functional engineered variants of the single-module non-ribosomal peptide synthetase IndC by T domain exchange</em>. Molecular BioSystems <strong>10</strong>, 1709–1718 (2014).</div></dd></dl></div></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../nonstiff_models/">« Non-Biology (Non-Stiff) Models</a><a class="docs-footer-nextpage" href="../Bachmann/">Adjoint Sensitivity Analysis (Large Models) »</a><div class="flexbox-break"></div><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="auto">Automatic (OS)</option><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option><option value="catppuccin-latte">catppuccin-latte</option><option value="catppuccin-frappe">catppuccin-frappe</option><option value="catppuccin-macchiato">catppuccin-macchiato</option><option value="catppuccin-mocha">catppuccin-mocha</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> version 1.7.0 on <span class="colophon-date" title="Sunday 27 October 2024 12:15">Sunday 27 October 2024</span>. Using Julia version 1.11.1.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>
Loading

0 comments on commit ab10916

Please sign in to comment.