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

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

免责声明:我们计划围绕委托重构存储库。随着一些这些指南将在未来发生变化。

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

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

  • 如何升级依赖项

  • 新依赖项的任何特殊注意事项


在列出高级别指南后,现在让我们讨论一些具体的物流,以便实际为您的委托包含依赖项。

Python 依赖项

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

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

本地 Python 包

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

C++ 依赖项

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

buck2/CMake 支持

至少需要 CMake 支持。添加 buck2 支持是可选的,但将使委托对更多 ExecuTorch 用户可用。

文档

访问 PyTorch 的全面开发者文档

查看文档

教程

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

查看教程

资源

查找开发资源并获得问题的解答

查看资源