目录

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

免责声明:我们计划重新组织仓库结构,围绕委托进行重构。 随着这一变化,其中一些指南在未来可能会发生变化。

委托可能依赖外部的第三方库来高效地实现提前编译(AOT)partition()preprocess()函数,以及/或者实现运行时函数,例如init()execute(),或者以特定方式运行测试。本指南旨在对委托可能依赖的不同类型的第三方依赖进行分类,并提供高层次的指导,说明如何包含这些依赖。

即时编译依赖

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

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

Guidelines:

  • 如果 ExecuTorch 已包含您所需的依赖项,请优先使用它。

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

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

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

运行时依赖

本类别涵盖委托运行时代码所使用的 C++ 依赖项。这些依赖项可以简单到仅为实现某些委托算子的第三方数学库,也可以是一个完整的框架,用于处理为委托优化的子图。

Guidelines:

在高层面上,“按需付费”应是这些第三方依赖项的理想方式。

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

  • 如果委托具有依赖项,而该依赖项已经是 executorch/third-party 的一部分,则尽可能使用它。这有助于在启用委托时减少二进制大小。

  • 除委托(delegate)之外的其余 ExecuTorch 代码不应依赖于此。当在构建时禁用委托时,即使没有此依赖项,代码也应能够正确构建和运行。

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

测试专用依赖

某些库或工具仅用于执行委托测试。根据测试类型的不同,这些依赖项可能是 Python 依赖项,也可能是 C++ 依赖项。

Guidelines:

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

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

其他注意事项

版本控制

更倾向于明确且具体的指定,例如 PyPI 版本(或版本范围)或 Git 标签/发布版本。

记录依赖项

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

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

  • 如何升级依赖项

  • 新依赖项是否有任何特殊注意事项


在列出高层指导原则后,我们现在来具体讨论如何为您的委托(delegate)实际添加依赖项。

Python 依赖

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

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

本地Python包

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

C++ 依赖

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

CMake支持

至少需要支持 CMake。

文档

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

查看文档

教程

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

查看教程

资源

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

查看资源