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

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

免责声明:我们计划围绕委托重组仓库。未来这些指南可能会有所变化。

委托可能依赖外部第三方库来高效地实现提前编译 (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 代码中除委托之外的其他部分不应依赖此项。并且在构建时禁用委托后,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 submodule 添加。

C++ 依赖项

推荐的方法是在 executorch/backends/<delegate_name>/third-party 目录中为给定的 C++ 依赖项添加 git submodule。

CMake 支持

最低要求是支持 CMake。

文档

查阅 PyTorch 全面开发者文档

查看文档

教程

获取针对初学者和高级开发者的深入教程

查看教程

资源

查找开发资源并解答您的疑问

查看资源