目录

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

免责声明:我们计划围绕委托重组存储库。 因此,其中一些准则将来会发生变化。

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

预先依赖项

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

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

指引:

  • 如果 ExecuTorch 已经包含您需要的依赖项,请首选 如果可能的话,使用它。

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

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

更多详细信息,请参阅以下部分。

运行时依赖项

此类别涵盖委托运行时代码使用的 C++ 依赖项。 它可以像第三方数学库一样简单,实现一些 delegate 运算符,也可以是处理降低的 代表的 subgraph 中。

指引:

概括地说,“只按使用量付费”应该是理想的方法 对于这些第三方依赖项。

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

  • 如果委托具有已是 Part Part 的依赖项,请尽可能尝试使用该依赖项。这 有助于在启用委托时减小二进制大小。executorch/third-party

  • 委托之外的其余 ExecuTorch 代码不应依赖于 这。它应该在没有这种依赖的情况下正确构建和运行 在构建时禁用委托时。

更多详细信息,请参阅以下部分。

仅测试依赖项

某些库或工具仅用于执行委托测试。这些 可以是 Python 依赖项或 C++ 依赖项,具体取决于 测试。

指引:

  • 对于 Python 测试依赖项,在以下情况下,默认情况下不应安装它 安装 ExecuTorch Python 包。

  • 对于 C++ 测试依赖项,它不应是 ExecuTorch 运行时的一部分 即使构建/启用了委托。

其他注意事项

版本控制

Explicit 和 Specific 是首选。例如,PyPI 版本(或范围)或 git 标签/release。

记录依赖关系

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

  • 引入新的第三方依赖项的基本原理

  • 如何升级依赖项

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


在列出了高级准则之后,我们现在来谈谈具体的 logistics 实际包含委托人的依赖项,

Python 依赖项

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

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

本地 Python 包

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

C++ 依赖项

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

CMake 支持

至少需要 CMake 支持。

文档

访问 PyTorch 的全面开发人员文档

查看文档

教程

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

查看教程

资源

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

查看资源