• 文档 >
  • 后端 Delegate 的第三方依赖项管理
快捷方式

后端委托方第三方依赖管理

免责声明:我们计划围绕委托方重构存储库。因此,其中一些指南将在未来发生变化。

委托方可能会依赖外部的第三方库,以高效地实现提前(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>/ 下提供一些文档,包括:

  • 引入新的第三方依赖项的理由

  • 如何升级依赖项

  • 对新依赖项的任何特殊考虑


在列出总体指南后,现在让我们来谈谈实际为您的委托方包含依赖项的具体后勤安排:

Python 依赖项

Python 打包很复杂且不断发展。对于委托方依赖项,我们建议委托方将其第三方依赖项指定在 executorch/backends/<delegate_name>/requirements.txt 中,以便在安装时提供给 pip。目标是将它们与核心 ExecuTorch 依赖项解耦。

应避免版本冲突,方法是尝试使用 ExecuTorch 或其他后端已包含的依赖项。否则,请尝试其他 推荐的 方法来缓解版本冲突。

本地 Python 包

如果是 git 存储库,应将其添加为 git 子模块。

C++ 依赖项

推荐的方法是在 executorch/backends/<delegate_name>/third-party 目录中包含一个给定 C++ 依赖项的 git 子模块。

CMake 支持

最低限度要求 CMake 支持。

文档

访问全面的 PyTorch 开发者文档

查看文档

教程

为初学者和高级开发者提供深入的教程

查看教程

资源

查找开发资源并让您的问题得到解答

查看资源