【Bug已解决】torch.export.export 对 CUDA:MPS 示例输入报 Unhandled FakeTensor Device Propagation 解决方案

发布时间:2026/7/17 2:11:02

【Bug已解决】torch.export.export 对 CUDA:MPS 示例输入报 Unhandled FakeTensor Device Propagation 解决方案
[Bug已解决] torch.export.export 对 CUDA/MPS 示例输入报 Unhandled FakeTensor Device Propagation 解决方案一、报错长什么样你用torch.export.export(model, example_inputs)把模型导出成稳定计算图时如果example_inputs是CUDA 或 MPS 设备上的张量可能遇到RuntimeError: Unhandled FakeTensor Device Propagation而不是一个「清晰的、面向用户的错误」比如「export 暂不支持 MPS 设备」。也就是官方描述的torch.export.export raises RuntimeError: Unhandled FakeTensor Device Propagation for CUDA/MPS example inputs instead of a clear user-facing errortorch.export在导出时内部用 FakeTensor 模式推导整张图的形状 / 设备。当示例输入在 CUDA / MPS 上时FakeTensor 的「设备传播」逻辑遇到某些情况没处理好就抛出这个内部错误而不是友好提示。本文讲清楚 torch.export 的流程、为何 CUDA/MPS 示例输入会触发、以及如何规避。二、torch.export 是什么torch.export.export(model, example_inputs)把模型「捕获」成一个ExportedProgram稳定计算图可用于 AOTInductor 部署见 26 节、移动端、边缘设备。import torch model torch.nn.Linear(8, 4) x torch.randn(2, 8) ep torch.export.export(model, (x,)) print(ep.graph_module) # 稳定的计算图导出过程用 FakeTensor 模式「跑一遍」模型不碰真实数据记录所有算子的形状 / 设备 / 控制流生成图。三、为什么 CUDA/MPS 示例输入会触发 FakeTensor 设备传播错误torch.export的 FakeTensor 推导主要假设示例输入在CPU上CPU FakeTensor 支持最完整。当示例输入在 CUDA / MPS 上时FakeTensor 需要把「真实 CUDA 张量」转成「假的 CUDA 张量」来推导但某些算子在 FakeTensor 模式下对「CUDA / MPS 设备」的传播逻辑没实现好遇到Unhandled于是抛出内部错误而不是「export 暂不支持在 CUDA 上直接导出请先用 CPU 示例输入」这种清晰提示。简单说export 期望你用 CPU 示例输入做推导但你给了 CUDA/MPS 输入它没优雅处理。四、可运行复现与对比下面脚本演示「CPU 示例输入正常、CUDA 示例输入可能报错」无 GPU 时只演示 CPUimport torch def demo_export(device): model torch.nn.Linear(8, 4) x torch.randn(2, 8, devicedevice) try: ep torch.export.export(model, (x,)) print(f[{device}] 导出成功) except Exception as e: print(f[{device}] 导出失败{type(e).__name__}: {str(e)[:120]}) if __name__ __main__: demo_export(cpu) # 通常成功 if torch.cuda.is_available(): demo_export(cuda) # 可能报 Unhandled FakeTensor Device Propagation elif torch.backends.mps.is_available(): demo_export(mps)如果你看到cuda/mps那行报Unhandled FakeTensor Device Propagation就复现了该问题。五、解决方案一用 CPU 示例输入做 export最稳torch.export本质是「形状 / 设备推导」用 CPU 示例输入就能完成。导出后再在实际设备CUDA/MPS上跑import torch model torch.nn.Linear(8, 4) # 用 CPU 示例输入导出FakeTensor 在 CPU 上支持最完整 x_cpu torch.randn(2, 8) ep torch.export.export(model, (x_cpu,)) # 之后在实际设备上运行用 AOTInductor 或直接调用 if torch.cuda.is_available(): model_cuda ep.module().cuda() x_cuda torch.randn(2, 8, devicecuda) out model_cuda(x_cuda) print(CUDA 上运行导出模型输出, out.shape)这是官方推荐的 export 流程导出用 CPU 示例部署用目标设备。六、解决方案二导出后用 .to(device) 移到目标设备ExportedProgram可以先在 CPU 上导出再整体.to()到 CUDA / MPSimport torch model torch.nn.Sequential(torch.nn.Linear(8, 4), torch.nn.ReLU()) ep torch.export.export(model, (torch.randn(2, 8),)) # 移到目标设备 device cuda if torch.cuda.is_available() else cpu ep_cuda ep.to(device) x torch.randn(2, 8, devicedevice) out ep_cuda.module()(x) print(设备, device, 输出, out.shape)ep.to(device)把导出图里的参数 / 缓冲区搬到目标设备避免导出阶段就用 CUDA 示例输入踩 FakeTensor 坑。七、解决方案三用 dynamic_shapes 时也要 CPU 示例如果你的模型用动态形状dynamic_shapes示例输入同样用 CPUimport torch from torch.export import Dim model torch.nn.Linear(8, 4) batch Dim(batch, min1, max32) ep torch.export.export( model, (torch.randn(2, 8),), # CPU 示例 dynamic_shapes{x: {0: batch}}, ) print(带动态形状的 CPU 导出成功)示例输入保持 CPU动态约束用Dim声明FakeTensor 推导最稳。八、解决方案四MPS 用户特别注意MPSApple Silicon上的 export 支持比 CUDA 更滞后见 034 的 MPS dtype 缺口。如果你在 MPS 上 export 报错几乎肯定要退回 CPU 示例输入# MPS 用户export 一律用 CPU 示例运行再 .to(mps) x_cpu torch.randn(2, 8) # CPU ep torch.export.export(model, (x_cpu,)) ep_mps ep.to(mps)九、解决方案五升级 PyTorch错误信息改善Unhandled FakeTensor Device Propagation是「内部错误未转成用户友好提示」的 bug。新版本可能已让它「清晰报错」或直接支持 CUDA/MPS 示例输入。查看并升级import torch print(PyTorch, torch.__version__)十、如何判断你踩的是同一条你调用torch.export.export示例输入在 CUDA 或 MPS 上报错是Unhandled FakeTensor Device Propagation内部错误不清晰改用 CPU 示例输入后导出成功。命中即说明踩中该 export 的设备传播 bug。十一、小结torch.export.export对 CUDA/MPS 示例输入报Unhandled FakeTensor Device Propagation是导出期的 FakeTensor 设备推导不支持这些设备且没转成清晰错误。应对用 CPU 示例输入做 export第五节最稳官方推荐导出后.to(device)移到目标设备运行第六节动态形状也用 CPU 示例 Dim声明第七节MPS 用户必须退回 CPU 示例第八节升级到改善错误 / 支持该设备的 PyTorch第九节。torch.export的 FakeTensor 推导在 CPU 上最成熟。把示例输入留在 CPU、把设备搬运留到导出之后——这个「先推导、后部署」的顺序能避开绝大多数 export 期的设备传播错误。

相关新闻

[Bug已解决] libcudnn_engines_tensor_ir.so.9 缺失:CUDA 13.0 版 PyTorch 找不到 cuDNN 引擎库解决方案

[Bug已解决] libcudnn_engines_tensor_ir.so.9 缺失:CUDA 13.0 版 PyTorch 找不到 cuDNN 引擎库解决方案

2026/7/17 2:11:02

[Bug已解决] libcudnn_engines_tensor_ir.so.9 缺失:CUDA 13.0 版 PyTorch 找不到 cuDNN 引擎库解决方案 一、报错长什么样 你在 CUDA 13.0 的 PyTorch 上跑需要 cuDNN 的操作(卷积、RNN、归一化等)时,可能遇到: OSErr…

Windows PowerShell Web 访问(PSWA)配置与安全实践指南

Windows PowerShell Web 访问(PSWA)配置与安全实践指南

2026/7/17 2:01:02

1. Windows PowerShell Web 访问概述Windows PowerShell Web 访问(PSWA)是Windows Server 2012引入的一项功能,它允许管理员通过Web浏览器远程执行PowerShell命令和脚本。这项技术特别适合以下场景:需要在非工作设备(如…

Ubuntu 25.04安装与优化全指南

Ubuntu 25.04安装与优化全指南

2026/7/17 2:01:02

1. Ubuntu 25.04 安装前的准备工作1.1 硬件需求评估Ubuntu 25.04作为Linux发行版的新版本,对硬件配置有着明确的要求。根据官方文档,建议的最低配置为双核2GHz处理器、6GB内存和25GB存储空间。但实际使用中,特别是对于开发环境或日常办公&…

CatlikeCoding:一套可生长的Unity工程实践体系

CatlikeCoding:一套可生长的Unity工程实践体系

2026/7/17 3:21:05

1. 这不是教程合集,而是一套“可生长”的Unity工程实践体系你点开CatlikeCoding首页时,第一眼看到的可能是一排排带编号的标题:Pseudorandom Noise、Custom SRP、Hex Map……但如果你把它当成普通教程网站——按顺序点开、复制代码、跑通Demo…

AI Agent开发全攻略:跨平台环境搭建与LangChain实战指南

AI Agent开发全攻略:跨平台环境搭建与LangChain实战指南

2026/7/17 3:21:05

最近在AI开发圈子里有个有趣的现象:很多开发者认为学习AI Agent开发必须使用Mac设备,甚至出现了"Mac Mini卖断货因为大家都在买来部署自己的AI Agent"的情况。但事实真的是这样吗?作为长期在Windows和Linux环境下进行AI开发的工程师…

电脑卡顿根源分析与性能优化实战指南

电脑卡顿根源分析与性能优化实战指南

2026/7/17 3:21:05

1. 电脑卡顿的根源分析电脑卡顿这个看似简单的问题,背后往往隐藏着复杂的系统运行机制。作为一名经历过数百台电脑维护的技术人员,我发现90%的卡顿问题都源于以下几个核心因素:1.1 内存资源耗尽当物理内存(RAM)使用率超…

AI Agent自进化架构:Hermes三层引擎设计解析

AI Agent自进化架构:Hermes三层引擎设计解析

2026/7/17 3:21:05

1. Hermes技能自进化架构概览在当今AI Agent技术快速发展的背景下,如何让智能体系统具备持续学习和自我优化的能力成为行业核心挑战。Hermes技能自进化体系通过创新的三层引擎架构,解决了传统Agent框架"经验无法沉淀、技能无法迭代"的痛点问题…

Windows虚拟机安装macOS全攻略:开发环境搭建与优化

Windows虚拟机安装macOS全攻略:开发环境搭建与优化

2026/7/17 3:21:05

1. 项目概述:Windows环境下搭建macOS虚拟系统的核心价值作为跨平台开发者或设计从业者,经常需要同时处理Windows和macOS两个生态系统的兼容性问题。特别是在iOS应用开发、Swift编程或Final Cut Pro视频制作等场景下,macOS环境成为刚需。本方案…

Kiro与Spec工作流:AI编程新范式解析与实践

Kiro与Spec工作流:AI编程新范式解析与实践

2026/7/17 3:11:05

1. Kiro与Spec工作流:新一代AI编程范式解析 最近在开发者社区掀起热议的Kiro工具,以其独特的Spec工作流设计彻底改变了AI辅助编程的体验。作为一名深度使用过Cursor、Claude Code等多款AI编程工具的开发者,我必须说Kiro带来的Spec驱动开发模式…

Unity游戏文本翻译架构深度解析:XUnity.AutoTranslator的技术实现与工程实践

Unity游戏文本翻译架构深度解析:XUnity.AutoTranslator的技术实现与工程实践

2026/7/16 0:35:09

Unity游戏文本翻译架构深度解析:XUnity.AutoTranslator的技术实现与工程实践 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator XUnity.AutoTranslator作为Unity游戏社区中最成熟的文本翻译解决方…

openEuler Raspberry Pi Kernel设备驱动开发指南:为树莓派硬件添加支持

openEuler Raspberry Pi Kernel设备驱动开发指南:为树莓派硬件添加支持

2026/7/16 14:29:31

openEuler Raspberry Pi Kernel设备驱动开发指南:为树莓派硬件添加支持 【免费下载链接】raspberrypi-kernel It provides openEuler kernel source for Raspberry Pi 项目地址: https://gitcode.com/openeuler/raspberrypi-kernel 前往项目官网免费下载&…

openEuler系统集成测试实战:基于smoke-test套件的环境验证技巧

openEuler系统集成测试实战:基于smoke-test套件的环境验证技巧

2026/7/16 14:18:17

openEuler系统集成测试实战:基于smoke-test套件的环境验证技巧 【免费下载链接】integration-test The repo contains test suits for system integration test 项目地址: https://gitcode.com/openeuler/integration-test 前往项目官网免费下载:…

Cursor终端插件生态避坑指南:23个实测低效插件黑名单,附3个自研轻量替代方案

Cursor终端插件生态避坑指南:23个实测低效插件黑名单,附3个自研轻量替代方案

2026/7/17 0:00:57

更多请点击: https://intelliparadigm.com 第一章:Cursor终端插件生态避坑指南概览 Cursor 作为基于 VS Code 内核构建的 AI 原生编辑器,其终端插件生态虽活跃,但存在兼容性断层、权限策略突变与调试链路断裂等典型风险。开发者常…

ChatGPT写作提示词效率革命:单条提示词响应质量提升3.8倍的关键变量(附可复用提示词矩阵表)

ChatGPT写作提示词效率革命:单条提示词响应质量提升3.8倍的关键变量(附可复用提示词矩阵表)

2026/7/17 0:00:57

更多请点击: https://codechina.net 第一章:ChatGPT写作提示词效率革命:单条提示词响应质量提升3.8倍的关键变量(附可复用提示词矩阵表) 提示词工程已从经验试错迈入变量驱动的科学阶段。实证研究表明,影响…

DeepSeek V4替换Codex底座模型的实践与优化

DeepSeek V4替换Codex底座模型的实践与优化

2026/7/17 0:00:57

1. 为什么选择用DeepSeek V4替换Codex的底座模型去年我在开发一个智能代码补全工具时,发现Codex的默认底座模型在复杂业务逻辑场景下表现不尽如人意。经过多次测试对比,DeepSeek V4在以下几个关键指标上展现出明显优势:代码补全准确率&#x…