ExecuTorch
ExecuTorch 是一种端到端解决方案,旨在为包括可穿戴设备、嵌入式设备和微控制器在内的移动及边缘设备提供端侧推理能力。它属于 PyTorch 生态系统的一部分,支持部署 PyTorch 模型,并专注于可移植性、生产力和性能。
ExecuTorch 提供了明确定义的入口点,用于执行针对特定模型、设备和/或使用场景的优化,例如后端委托、用户自定义的编译器转换、内存规划等。使用 ExecuTorch 在边缘设备上运行 PyTorch 模型的第一步是导出模型。这通过名为 torch.export 的 PyTorch API 来实现。
ExecuTorch 集成
正在开发一个集成点,以确保 🤗 Transformers 能够通过 torch.export 进行导出。该集成的目标不仅是实现导出,还要确保导出的产物能够进一步降低和优化,从而在 ExecuTorch 中高效运行,特别是针对移动和边缘用例。
class transformers.TorchExportableModuleWithStaticCache
< source >( model: PreTrainedModelbatch_size: int | None = Nonemax_cache_len: int | None = Nonedevice: typing.Optional[torch.device] = None )
一个配方模块,旨在使 PreTrainedModel 能够通过 torch.export 进行导出,
专门用于将仅解码器语言模型导出为 StaticCache。该模块确保
导出的模型兼容 ExecuTorch 中的进一步降低和运行。
注意:
此类专门设计用于支持使用 torch.export 的导出流程,以确保模型能够进一步降低并高效地在 ExecuTorch 中运行。
forward
< source >( input_ids: typing.Optional[torch.LongTensor] = Noneinputs_embeds: typing.Optional[torch.Tensor] = Nonecache_position: typing.Optional[torch.Tensor] = None ) → torch.Tensor
该模块的前向传播,与 ExecuTorch 运行时兼容。
此正向适配器有两个主要用途:
使模型兼容
torch.export: 该适配器会将Cache等不受支持的对象从图的输入和输出中隐藏起来, 从而确保模型能够使用torch.export进行导出,而不会遇到任何问题。确保与
ExecuTorch运行时兼容: 该适配器将模型的前向签名与executorch/extension/llm/runner中的签名进行匹配, 从而确保导出的模型可以直接在ExecuTorch中运行。
transformers.convert_and_export_with_cache
< source >( model: PreTrainedModelexample_input_ids: typing.Optional[torch.Tensor] = Noneexample_cache_position: typing.Optional[torch.Tensor] = Nonedynamic_shapes: dict | None = Nonestrict: bool | None = None ) → Exported program (torch.export.ExportedProgram)
参数
- model (
PreTrainedModel) — 要导出的预训练模型。 - example_input_ids (
Optional[torch.Tensor]) — 供torch.export使用的示例输入 token id。 - example_cache_position (
Optional[torch.Tensor]) —torch.export使用的当前缓存位置示例。 - dynamic_shapes(
Optional[dict]) — 供torch.export使用的动态形状。 - strict(
Optional[bool]) — 指示torch.export使用dynamo的标志。
返回值
导出的程序(torch.export.ExportedProgram)
通过 torch.export 生成的导出程序。
将 PreTrainedModel 转换为可导出的模块,并使用 torch.export 进行导出,确保导出的模型与 ExecuTorch 兼容。