快捷方式

运行时集成

本节介绍了配置和定制 ExecuTorch 运行时的选项。预构建包旨在提供“开箱即用”的体验,但在投入生产时通常需要额外的配置。ExecuTorch 提供了在编译时控制功能(例如日志记录)、定制系统集成以及仅包含运行特定模型所需的算子(选择性构建)的能力。

日志记录

ExecuTorch 运行时代码包含各种级别的日志记录语句,以帮助集成和调试。日志记录的包含由 EXECUTORCH_ENABLE_LOGGINGEXECUTORCH_LOG_LEVEL CMake 选项在构建时控制。将这些作为编译时配置公开,可以在不使用日志时排除所有与日志相关的代码,这对于资源受限的系统至关重要。

在主机平台上,日志默认发送到 STDOUT 和 STDERR,在 Android 和 iOS 上则重定向到操作系统特定的日志系统。有关日志路由的更多信息,请参阅下方的平台抽象层

从源代码构建时,要配置日志级别,请将 EXECUTORCH_ENABLE_LOG_LEVEL 指定为 on 或 off,并将 EXECUTORCH_LOG_LEVEL 指定为 debug、info、error 或 fatal 中的一个。日志默认在 debug 构建中启用,在 release 构建中禁用。日志级别默认为 info。

有关更多信息,请参阅从源代码构建

cmake -b cmake-out -DEXECUTORCH_ENABLE_LOGGING=ON -DEXECUTORCH_LOG_LEVEL=DEBUG ...

平台抽象层 (PAL)

ExecuTorch 平台抽象层(PAL)是一个胶合层(glue layer),负责提供与特定宿主系统的集成。这包括日志路由、时间戳和中止处理。ExecuTorch 为符合 POSIX 标准的目标提供了默认实现,并在适当的扩展下提供了 Android 和 iOS 特定的实现。

对于不符合 POSIX 标准的系统,提供了最小的 no-op PAL 实现。用户需要覆盖相关的 PAL 方法以启用日志记录、时间戳和中止。通过使用 -DEXECUTORCH_PAL_DEFAULT=minimal 进行构建可以选择最小 PAL。

覆盖 PAL

通常覆盖默认 PAL 实现是为了将日志路由到用户指定的目标,或者在嵌入式系统上提供 PAL 功能。要覆盖一个或多个 PAL 方法,请执行以下步骤:

默认 PAL 函数是弱符号,因此提供您自己的强符号定义可以在链接时覆盖它们。为确保您的定义优先,您可能需要确保强定义在链接顺序中位于弱定义之前。

有关 PAL 函数签名,请参阅 runtime/platform/platform.h;有关参考 POSIX 实现,请参阅 runtime/platform/default/posix.cpp

内核库

在导出过程中,模型被分解为算子列表,每个算子提供一些基本计算。两个张量相加是一个算子,卷积也是。每个算子都需要一个相应的算子内核(kernel)来在目标硬件上执行计算。ExecuTorch 后端是实现这一目标的首选方法,但并非所有后端都支持所有算子。

为了处理这个问题,ExecuTorch 提供了两种实现:可移植(portable)内核库和优化(optimized)内核库。可移植内核库以平台无关的方式提供对所有算子的全面支持。优化库需要额外的系统要求,但能够利用多线程和向量化代码来实现更高的性能。单个构建可以同时使用这两种库的算子,允许在可用时使用优化库,并以可移植库作为备用(fallback)。

使用移动预构建包时,内核库的选择对用户是透明的。然而,从源代码构建时,尤其是在嵌入式系统上,这一点很重要。在移动设备上,优先使用可用的优化算子。有关更多信息,请参阅ExecuTorch 内核库概述

选择性构建

默认情况下,ExecuTorch 附带所有支持的算子内核,使其能够以任何精度运行任何支持的模型。这会导致二进制文件大小达到几兆字节,这对于生产用例或资源受限的系统可能是不理想的。为了最小化二进制文件大小,ExecuTorch 提供了选择性构建功能,以便仅包含运行特定模型所需的算子。

请注意,选择性构建仅适用于可移植和优化内核库。Delegate 不参与选择性构建,可以通过单独链接来包含或排除。有关更多信息,请参阅内核库选择性构建

文档

访问 PyTorch 全面的开发者文档

查看文档

教程

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

查看教程

资源

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

查看资源