第三方依赖管理用于后端委托¶
免责声明:我们计划重新组织仓库结构,围绕委托进行重构。 随着这一变化,其中一些指南在未来可能会发生变化。
委托可能依赖外部的第三方库来高效地实现提前编译(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)实际添加依赖项。