executorch
PyTorch官方端侧AI推理框架,50KB基础包支持从MCU到手机的全平台模型部署,已在Meta旗下Instagram/WhatsApp/Quest等产品规模化落地
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
PyTorch官方端侧AI推理框架,50KB基础包支持从MCU到手机的全平台模型部署,已在Meta旗下Instagram/WhatsApp/Quest等产品规模化落地
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
**想象一个场景:**你在地铁里想用手机和大模型对话,但网络信号时断时续、云端延迟令人崩溃——如果模型能直接在你的手机芯片上本地运行,那该多好。PyTorch团队用ExecuTorch把这个场景变成了现实。
在ExecuTorch出现之前,把PyTorch训练好的模型部署到手机、手表、摄像头等端侧设备,是一件极其痛苦的事。主流方案有三条路:
ExecuTorch的答案是:直接从PyTorch导出,不经过任何中间格式,用原生API在端侧运行。
ExecuTorch的工作流程分为三步,每一步都有明确的价值:
第一步:Export(导出)
使用PyTorch原生API torch.export.export() 捕获模型计算图,保留PyTorch动态图的语义,同时生成可序列化的中间表示(IR)。与传统的trace/script方式不同,export API能更好地处理动态控制流。
第二步:Compile(编译)
对导出的模型进行量化(8-bit/4-bit)、算子融合、内存规划,并通过分区器(Partitioner)将计算图分配到不同硬件加速器上。例如在Android手机上,可以将矩阵乘法分配给Hexagon NPU,将卷积分配给GPU。最后生成统一的.pte文件。
第三步:Execute(执行)
在目标设备上通过轻量级C++运行时加载.pte文件执行推理。运行时核心仅50KB,经过选择性编译(Selective Build)可进一步裁剪到更小体积。

ExecuTorch的野心是"一处导出,处处运行"。支持的硬件后端覆盖:
| 平台 | 加速后端 |
|---|---|
| Android | XNNPACK(通用CPU)、Vulkan GPU、Qualcomm QNN、MediaTek NPU、Samsung Exynos |
| iOS/macOS | CoreML(Neural Engine)、Metal GPU、XNNPACK |
| Linux/Windows | XNNPACK、OpenVINO、CUDA(实验性) |
| 嵌入式/MCU | ARM Ethos-U、NXP、Cadence DSP |
切换硬件只需修改一行代码中的Partitioner:
# CPU后端
program = to_edge_transform_and_lower(exported, partitioner=[XnnpackPartitioner()])
# iOS后端
program = to_edge_transform_and_lower(exported, partitioner=[CoreMLPartitioner()])
# Android高通后端
program = to_edge_transform_and_lower(exported, partitioner=[QnnPartitioner()])
ExecuTorch支持的模型类型非常广泛:
导出LLM模型的命令非常简洁:
python -m executorch.extension.llm.export.export_llm --model llama3_2 --output llama.pte
或使用HuggingFace Optimum工具:
optimum-cli export executorch --model meta-llama/Llama-3.2-1B --task text-generation --recipe xnnpack --output_dir llama_model
ExecuTorch不是实验室里的Demo,它已经在Meta旗下多个产品中规模化部署:
这些部署的共同特点是:延迟敏感(需本地推理)、隐私敏感(数据不上云)、功耗敏感(需高效运行)。ExecuTorch在这些约束下日均处理数十亿次推理请求,是目前生产验证最充分的端侧AI框架之一。
ExecuTorch的安装和使用非常直观:
# 安装Python包
pip install executorch
# Python端导出模型
from executorch.exir import to_edge_transform_and_lower
from executorch.backends.xnnpack.partition.xnnpack_partitioner import XnnpackPartitioner
model = MyModel().eval()
program = to_edge_transform_and_lower(
torch.export.export(model, (torch.randn(1, 3, 224, 224),)),
partitioner=[XnnpackPartitioner()]
).to_executorch()
with open("model.pte", "wb") as f:
f.write(program.buffer)
iOS/Android开发则使用原生SDK:
// Swift (iOS)
import ExecuTorch
let module = Module(filePath: "model.pte")
let input = Tensor<Float>([1.0, 2.0, 3.0, 4.0], shape: [2, 2])
let outputs = try module.forward(input)
// Kotlin (Android)
val module = Module.load("model.pte")
val inputTensor = Tensor.fromBlob(floatArrayOf(1.0f, 2.0f), longArrayOf(2))
val outputs = module.forward(EValue.from(inputTensor))
ExecuTorch并非银弹,以下几点需要理性看待:
随着ExecuTorch的成熟,端侧AI推理正在从"可行"走向"好用"。其核心价值在于:
PyTorch作为全球最流行的深度学习框架,推出ExecuTorch标志着端侧AI推理正式进入"主流框架原生支持"时代。随着移动芯片NPU性能的持续提升和量化技术的进步,可以预期未来1-2年内,端侧运行70B参数大模型将成为现实。
本报告基于pytorch/executorch仓库分析生成,数据截至2026年