后端委托方第三方依赖管理¶
免责声明:我们计划围绕委托方重构存储库。因此,其中一些指南将在未来发生变化。
委托方可能会依赖外部的第三方库,以高效地实现提前(AOT)partition()
或 preprocess()
函数,和/或实现运行时函数,例如 init()
或 execute()
,或以特定方式运行测试。本指南旨在对委托方可能依赖的不同类型的第三方依赖进行分类,并提供有关如何包含它们的总体指导。
提前(AOT)依赖¶
这包括委托方的 partitioner()
和 preprocess()
函数使用的依赖项,用于生成将在以后运行时使用的预处理结果。
根据 preprocess()
函数的实现方式,它可以是 Python 或 C++ 依赖。本指南将只讨论 Python AOT 依赖。
指南
如果 ExecuTorch 已经包含您需要的依赖项,请尽可能优先使用它。
如果该依赖项仅被
executorch/backends/<delegate_name>/
目录中的文件需要,则应以一种方式引入它,使其仅被该目录下的代码使用。在安装 ExecuTorch Python 包时,不应默认安装该依赖项。
更多详情请参见 下文。
运行时依赖¶
此类别涵盖委托方运行时代码使用的 C++ 依赖项。它可以是用于实现某些委托方操作的第三方数学库,也可以是处理委托方已降低的子图的整个框架。
指南
总的来说,“按需付费”应是这些第三方依赖项的首选方法。
与 AOT 依赖项类似,其使用也应仅限于委托方运行时源文件。
如果某个委托方依赖的项已包含在
executorch/third-party
中,请尽可能尝试使用它。这有助于减少启用该委托方时二进制文件的大小。ExecuTorch 代码的其他部分(委托方外部)不应依赖于此。并且,在构建时禁用委托方的情况下,它应该能够正确构建和运行,而无需此依赖项。
更多详情请参见 下文。
仅用于测试的依赖¶
某些库或工具仅用于执行委托方测试。根据测试的类型,它们可以是 Python 依赖项,也可以是 C++ 依赖项。
指南
对于 Python 测试依赖项,在安装 ExecuTorch Python 包时,不应默认安装它。
对于 C++ 测试依赖项,即使在构建/启用委托方时,它也不应成为 ExecuTorch 运行时的一部分。
其他注意事项¶
版本控制¶
首选明确和具体的版本。例如,PyPI 版本(或范围)或 git 标签/发布。
记录依赖项¶
最低限度,在引入新的依赖项时,应在 executorch/backends/<delegate_name>/
下提供一些文档,包括:
引入新的第三方依赖项的理由
如何升级依赖项
对新依赖项的任何特殊考虑
在列出总体指南后,现在让我们来谈谈实际为您的委托方包含依赖项的具体后勤安排: