后端委托的第三方依赖管理¶
免责声明:我们计划围绕委托重新构建存储库。因此,其中一些指南将在将来发生变化。
委托可能依赖于外部第三方库,以有效地实现提前 (AOT) partition()
或 preprocess()
函数,以及/或者实现运行时函数,例如 init()
或 execute()
,或者以特定方式运行测试。本指南旨在对委托可能依赖的不同类型的第三方依赖关系进行分类,并提供有关如何包含它们的高级指导。
提前依赖关系¶
这包括委托的 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>/
下提供一些文档,其中包括:
引入新第三方依赖项的理由
如何升级依赖项
该新依赖项的任何特殊注意事项
在列出高级指南之后,现在让我们谈谈实际包含委托依赖项的具体物流,