导出至 ExecuTorch API 参考¶
有关 API 如何演变以及弃用过程的详细信息,请参阅 ExecuTorch API 生命周期和弃用策略.
- executorch.exir.to_edge(programs, constant_methods=None, compile_config=None)[source]¶
to_edge()
从 ATen 方言中的一组导出程序构建 EdgeProgramManager。构建后,这些程序将转换为边缘方言。- 参数
programs – 可以是单个 ExportedProgram 或一个字典,将函数名映射到其相应的 ExportedPrograms。如果只提供单个 ExportedProgram,它将被分配名称“forward”。
constant_methods – 方法名到在 eager 模式下该方法返回的常数值的可选字典。通常用于在边缘模型上存储配置信息。
compile_config – 一个可选参数,用于提供对转换为边缘方言过程的更多控制。
- 返回值
EdgeProgramManager
- executorch.exir.to_edge_transform_and_lower(programs, transform_passes=None, partitioner=None, constant_methods=None, compile_config=None)[source]¶
to_edge_transform_and_lower()
从 ATen 方言中的一组导出程序构建 EdgeProgramManager。它与 to_edge 的根本区别在于,它将 ATen 方言转换为边缘方言程序、运行转换传递以及随后将程序降低到其相应的后端,这一切都集成在一个 API 中。这对于降低到具有已注册运算符(它们不想分解)的后端非常有用,因此依靠与这些未分解的运算符的匹配。对于这些类型的后端,这是降低到边缘方言的唯一应使用的 API。使用 to_edge(…) 和 to_backend(…) 的组合将导致不一致或错误的行为。
此 API 是降低到基于 CPU 的 XNNPack 后端的首选方法。
- 参数
programs – 可以是单个 ExportedProgram 或一个字典,将函数名映射到其相应的 ExportedPrograms。如果只提供单个 ExportedProgram,它将被分配名称“forward”。
transform_passes – 传递可以是传递列表,也可以是将方法名映射到传递列表的字典。如果它只是传递列表,则给定 EdgeProgramManager 中的所有方法都将使用提供的传递进行转换。如果它是一个字典,则只会使用其相应的传递转换字典中指定的方法名。
partitioner – 分区器可以是 Partitioner 子类实例,也可以是将方法名映射到 Partitioner 子类实例的字典。如果它是 Partitioner 子类,则给定 EdgeProgramManager 中的所有程序都将使用给定的分区器降低。如果它是一个字典,则只会使用给定的分区器降低字典中指定的方法名。
constant_methods – 方法名到在 eager 模式下该方法返回的常数值的可选字典。通常用于在边缘模型上存储配置信息。
compile_config – 一个可选参数,用于提供对转换为边缘方言过程的更多控制。
- 返回值
EdgeProgramManager
- class executorch.exir.EdgeProgramManager(edge_programs, constant_methods=None, compile_config=None, ops_set_to_not_decompose=None)[source]¶
一个或多个 ExportedPrograms 的包,以 Edge 方言表示。旨在简化降低至 ExecuTorch。参见:https://pytorch.ac.cn/executorch/stable/ir-exir.html
允许轻松地在导出程序集合中应用转换,包括子图委托。
管理降低链中的第二环:ATen -> Edge -> ExecuTorch。
- property config_methods¶
返回此 EdgeProgramManager 中的配置方法集。
- property methods¶
返回此 EdgeProgramManager 中方法的集合。
- to_backend(partitioner)[source]¶
返回一个语义上等效于输入的程序,但 EdgeProgramManager 中每个程序的部分将根据分区器进行委托目标定位。
- 参数
partitioner –
分区器可以是 Partitioner 子类实例,也可以是将方法名称映射到 Partitioner 子类实例的字典。如果它是一个 Partitioner 子类,则给定 EdgeProgramManager 中的所有程序将使用给定的分区器进行降低。如果它是一个字典,则只有字典中指定的方法名称才会使用给定的分区器进行降低。
Partitioner 子类实例负责标记要委托的输入程序的部分。一个有效的 Partitioner 必须返回 PartitionerResult,包括有效的 partition_tags: Dict[str, DelegationSpec],其中每个键都是一个标签名称,具有相同标签的节点将被融合成一个子图,并被委托给委托规范中指定的后台。
- 返回值
调用 EdgeProgramManager 的副本,其中指定了降低的子图。
- 返回类型
- to_executorch(config=None)[source]¶
将程序转换为 ExecuTorch 后端。
- 参数
config – 用于提供对转换为 ExecuTorch 后端的更多控制的可选参数。
- 返回值
表示 EdgeProgramManager 状态的管理器,在它被转换为 ExecuTorch 后端之后。
- 返回类型
- transform(passes, compile_config=None)[source]¶
根据提供的传递进行程序转换。
- 参数
passes – 传递可以是传递列表,也可以是将方法名称映射到传递列表的字典。如果它只是一个传递列表,则给定 EdgeProgramManager 中的所有方法都将使用提供的传递进行转换。如果它是一个字典,则只有字典中指定的方法名称才会使用它们相应的传递进行转换。
compile_config – 用于验证每个传递后模型图正确性的编译配置。如果未指定,则将使用调用 EdgeProgramManager 的编译配置。它将被用作返回的 EdgeProgramManager 的编译配置。
- 返回值
调用 EdgeProgramManager 的副本,其中应用了转换。
- 返回类型
- class executorch.exir.ExecutorchProgramManager(execution_programs, config_methods=None, backend_config=None)[source]¶
一个或多个 ExportedPrograms 在 Execution 语法中的包。旨在简化降低到 ExecuTorch。参见:https://pytorch.ac.cn/executorch/stable/ir-exir.html
当构建 ExecutorchProgramManager 时,执行语法中的 ExportedPrograms 用于形成 executorch 二进制文件(在一个称为发射的过程中),然后序列化为一个缓冲区。
管理降低链中的最后环节:ATen -> Edge -> ExecuTorch。
- property buffer¶
返回序列化后的 ExecuTorch 二进制文件,以字节字符串形式。
注意,对 buffer 的调用可能会分配大量的连续内存,具体取决于模型大小。如果写入文件,请使用 write_to_file,它不会产生额外的副本。
- property config_methods¶
返回此 ExecutorchProgramManager 中配置方法的集合。
- dump_executorch_program(verbose=False, out=None)[source]¶
以人类可读的格式打印 ExecuTorch 二进制文件。
- 参数
verbose (bool) – 如果为 False,则以紧凑格式打印二进制文件。如果为 True,则以 1-1 的方式打印二进制文件,并与模式中的规范一致。
out –
如果为 None,则打印到标准输出。如果为非 None,则将字符串写入该流对象。它可以是
文件对象、StringIO 对象或任何其他 TextIO 子类。
- property methods¶
返回此 ExecutorchProgramManager 中方法的集合。
- executorch.exir.backend.backend_api.to_backend(args)[source]¶
- executorch.exir.backend.backend_api.to_backend(backend_id, edge_program, compile_specs)
- executorch.exir.backend.backend_api.to_backend(edge_program, partitioner_instance)
一个通用函数,分派发生在第一个参数的类型上。目前有两个重载的 to_backend 函数
注意:Python 是一种动态类型语言,因此不能像要求语言能够在编译时区分类型的那些语言那样具有适当的方法重载。@to_backend.register 将根据第一个参数的类型(需要类型注释)将函数附加到 to_backend()。但是,它不能将多个类型作为参数。
def to_backend( backend_id: str, edge_graph_module: ExportedProgram, compile_specs: List[CompileSpec], ) -> LoweredBackendModule: def to_backend( graph_module: torch.fx.GraphModule, partitioner: Type[TPartitioner], ) -> torch.fx.GraphModule
- class executorch.exir.backend.backend_api.LoweredBackendModule(edge_program, backend_id, processed_bytes, compile_specs)[source]¶
nn.Module 的子类,为包含委托函数的模块生成。这可以通过调用 to_backend 来创建。
- property backend_id¶
返回后端名称。
- buffer(extract_delegate_segments=False, segment_alignment=128, constant_tensor_alignment=None, delegate_alignment=None, memory_planning=None)[source]¶
返回包含序列化后的 ExecuTorch 二进制文件的缓冲区。
- property compile_specs¶
返回一个包含特定于后端的对象的列表,这些对象具有静态元数据来配置“编译”过程。
- property original_module¶
返回原始 EXIR 模块
- property processed_bytes¶
返回从 backend.preprocess 创建的委托 blob