算法微分与带有分析导数的多个显式组件

问题描述 投票:0回答:2

我有一个由大约 6 个数学表达式组成的问题 - 即 (f(g(z(y(x))))),其中 x 是两个独立的数组。

我可以将此表达式划分为具有解析导数的多个显式组合,或者使用算法微分方法来获取导数,从而将系统简化为单个显式组件。

据我了解,提前告知这两种方法之间可能的计算性能差异并不容易。 这可能取决于反向模式情况下的算法微分工具功能,但系统可能会非常大,具有多个显式组件,因此仍然可以使用算法差异。

我的问题是:

算法差异。 任何开发人员/用户使用的通用工具? 我找到了 AlgoPY 但不确定其他 python 工具。

openmdao
2个回答
1
投票

从 OpenMDAO v2.4 开始,OpenMDAO 开发团队尚未在任何纯 python 组件上大量使用 AD 工具。我们对其进行了一些实验,发现计算与手动差异化组件大约增加了 2 倍。虽然预计计算成本会增加,但我不想表明我预计 2 倍是最终的经验法则。我们根本没有足够的数据来提供这样的估计。

基于Python的AD工具比编译语言的AD工具开发得要差得多。动态类型和通用语言灵活性都使得编写优秀的 AD 工具变得更具挑战性。

我们已将 OpenMDAO 与使用 AD 的编译代码(例如 CFD 和 FEA 工具)进行了接口。在这些情况下,您始终使用 OpenMDAO 的无矩阵导数 API(

apply_linear
compute_jacvec_product
)。

如果您的组件足够小以适合内存并且足够快以在单个进程上运行,我建议您手动区分您的代码。这将为您提供目前最好的整体性能。

我们将来会考虑支持小型串行组件的 AD 支持,但短期内我们无法为您提供任何内容(从 OpenMDAO v2.4 开始)


0
投票

关于您的首要问题,据我所知,原则上最好将 AD 计算分解为多个组件(但必须考虑组件之间传递数量的开销)。但我正在努力获得更多参考资料并证明这一点。在此期间您对问题是否有了更好的理解?这对我有很大帮助。

© www.soinside.com 2019 - 2024. All rights reserved.