• 文档 >
  • Backend Delegates 的第三方依赖项管理
快捷键

Backend Delegates 的第三方依赖项管理

免责声明:我们计划围绕 delegates 重组存储库。因此,其中一些指南将来会有所改变。

Delegate 可能依赖于外部第三方库,以高效地实现预先编译 (AOT) partition()preprocess() 函数,和/或实现运行时函数,如 init()execute(),或者以特定方式运行测试。本指南旨在对 delegate 可能依赖的不同类型的第三方依赖项进行分类,并提供关于如何包含它们的高级指导。

预先编译依赖项

这包括 delegate 的 partitioner()preprocess() 函数使用的依赖项,用于生成预处理结果,该结果将在稍后的运行时使用。

根据 preprocess() 函数的实现方式,这可以是 Python 或 C++ 依赖项。本指南仅讨论 Python AOT 依赖项。

指南

  • 如果 ExecuTorch 已经包含您需要的依赖项,请尽可能优先使用它。

  • 如果依赖项仅由 executorch/backends/<delegate_name>/ 目录内的文件需要,则应以仅供该目录下的代码使用的方式引入它。

  • 安装 ExecuTorch Python 包时,不应默认安装该依赖项。

更多详情请参阅 下方 章节。

运行时依赖项

此类别涵盖 delegate 运行时代码使用的 C++ 依赖项。它可以像实现某些 delegate 运算符的第三方数学库一样简单,也可以是处理 delegate 降低的子图的整个框架。

指南

在较高层面,“仅为您使用的部分付费”应该是这些第三方依赖项的期望方法。

  • 与 AOT 依赖项类似,此依赖项的使用也应仅限于 delegate 运行时源文件。

  • 如果 delegate 具有 executorch/third-party 中已包含的依赖项,请尽可能尝试使用它。这有助于在启用 delegate 时减小二进制文件大小。

  • Delegate 之外的 ExecuTorch 代码的其余部分不应依赖于此。并且在构建时禁用 delegate 时,它应该能够正确构建和运行,而无需此依赖项。

更多详情请参阅 下方 章节。

仅测试依赖项

某些库或工具仅用于执行 delegate 测试。根据测试的类型,这些可以是 Python 依赖项或 C++ 依赖项。

指南

  • 对于 Python 测试依赖项,安装 ExecuTorch Python 包时,不应默认安装它。

  • 对于 C++ 测试依赖项,即使在构建/启用 delegate 时,它也不应成为 ExecuTorch 运行时的一部分。

其他注意事项

版本控制

显式和特定版本是首选。例如,PyPI 版本(或范围)或 git 标签/发布版本。

记录依赖项

在引入新依赖项时,至少应在 executorch/backends/<delegate_name>/ 下提供一些文档,其中包括:

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

  • 如何升级依赖项

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


在列出高级指南之后,现在让我们讨论实际包含 delegate 依赖项的具体步骤:

Python 依赖项

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

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

本地 Python 包

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

C++ 依赖项

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

CMake 支持

至少需要 CMake 支持。

文档

访问 PyTorch 的全面开发者文档

查看文档

教程

获取面向初学者和高级开发者的深入教程

查看教程

资源

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

查看资源