PyPTO-Gym 模型转换矩阵解读:pypto-convert-model 的三格式 Round-Trip 校验与冻结测试证据
PyPTO-Gym 模型转换矩阵解读pypto-convert-model 的三格式 Round-Trip 校验与冻结测试证据【免费下载链接】pypto-gymPyPTO-Gym 是基于 PyPTO 编程框架构建的算子与模型样例仓库项目地址: https://gitcode.com/cann/pypto-gym本文以 PyPTO-Gym 仓库中pypto-convert-modelskill 自带的转换证据文件 matrix.md 为主体逐列解读这张模型 × 目标格式校验矩阵它由谁生成、七种状态码如何定义、测试设备如何自动检测、11 个被测模型从哪里来、每个格子结果背后的真实含义是什么以及如何在本地复现并刷新这张矩阵。读完后你可以独立读懂该仓库任何一次批量转换的 PASS/FAIL 证据并按同样的流程接入自己的模型。1. matrix.md 是什么一次批量转换实验的冻结证据pypto-convert-model是一个在onnx ↔ pt (TorchScript) ↔ safetensors三种格式之间双向互转的工具链核心承诺是每转换一次就把产物重新加载用同一个 dummy input 各跑一次 forward再与源模型输出比对以max_abs差异作为首要判据。详见 SKILL.md。matrix.md 就是这条工具链批量实验run.py跑完后提交进仓库的聚合结果表属于冻结测试证据它记录的是某一次真实运行环境下、11 个注册模型 × 3 个目标格式的全部结论。文件开头一行记录了当时的测试设备Test device (auto-detected):npu即该次实验运行在 Ascend NPU 环境上设备自动检测机制见第 3 节。2. 矩阵本体完整表格与状态码图例以下是该文件的完整内容逐行继承原文档modelonnxptsafetensorsresnet18L-FAILL-FAILL-FAILmobilenet_v2L-FAILL-FAILL-FAILefficientnet_b0L-FAILL-FAILL-FAILmlp_mixerL-FAILL-FAILL-FAILgmlpL-FAILL-FAILL-FAILresmlpL-FAILL-FAILL-FAILswitch_base_8L-FAILL-FAILL-FAILqwen_moeL-FAILL-FAILL-FAILtoy_moeC-FAILOKmax_abs0.00e00OKmax_abs0.00e00toy_soft_moeC-FAILOKmax_abs0.00e00OKmax_abs0.00e00toy_switch_moeC-FAILOKmax_abs0.00e00OKmax_abs0.00e00图例原文逐字继承Legend: OKpass, DIFFconverted but output differs, SKIPnot applicable, C-FAILconvert failed, T-FAILtest failed, T-SKIPtest skipped, L-FAILload failed.这 7 种状态码不是随手定的它们与 run.py 中的STATUS_EMOJI映射一一对应——矩阵格子里显示的是短标签内部记录的是全名矩阵显示内部 status含义OKPASS转换成功且 round-trip 比对通过allcloseDIFFDIFF转换成功但输出差异超出容差SKIPSKIP不适用转换器抛出 NotImplementedErrorC-FAILCONVERT_FAIL转换阶段本身失败T-FAILTEST_FAIL转换成功但产物复测阶段失败T-SKIPTEST_SKIP复测被跳过L-FAILLOAD_FAIL源模型加载失败还没走到转换矩阵的写盘逻辑在 run.py 的 write_matrix()行顺序取自注册表REGISTRY的插入顺序列固定为TARGET_FORMATS [onnx, pt, safetensors]见 registry.py当某格带 diff 数据时会在标签后追加br/max_abs...格式化为两位有效数字的科学计数法。每跑完一个模型就会立即重写一次矩阵文件因此矩阵天然支持部分进度累积——main() 启动时还会先读回references/results/*.json里的历史结果合并进来。3. Test device: npu 是怎么来的设备自动检测矩阵首行的设备标签由pick_device()在运行启动时确定。device_util.py 的检测优先级为NPU CUDA/ROCm XPU MPS CPUNPU 通过torch.npu.is_available()或尝试导入torch_npu判定结果会缓存进模块级变量_CACHED整个进程内只检测一次。两个细节值得注意强制覆盖环境变量CONVERT_EXP_DEVICEnpu|cuda|xpu|mps|cpu可覆盖自动检测若指定的设备不可用会直接抛错并列出可用设备而不是静默回退。ORT 执行器独立选择ONNX 产物复测走 onnxruntimeonnxruntime_providers() 按Tensorrt → CUDA → ROCm/MIGraphX → CANN(Ascend NPU) → QNN → Dml → CoreML → OpenVINO → Xnnpack → CPU的优先级从本机已安装的 provider 中挑选。也就是说即使 PyTorch 侧跑在 NPU 上ONNX 侧实际用哪个执行器取决于 ORT 的构建形态。比对阶段对设备同样敏感compare.py 的 reference_output() 会把模型临时搬上加速器算参考输出再恢复回 CPU——因为后续 ONNX/TorchScript 导出假定模型在 CPU 上若加速器 OOM统一内存主机上常见则自动回退 CPU 继续跑保证转换流程不因显存中断。4. 矩阵里的 11 个模型注册表与加载器矩阵每一行对应 registry.py 中REGISTRY的一个条目共 11 个模型、3 个类别cnn / mlp / moe类别模型来源仓库 id加载器输入cnnresnet18HFmicrosoft/resnet-18image-classification图像 (1,3,224,224)cnnmobilenet_v2HFgoogle/mobilenet_v2_1.0_224image-classification图像 (1,3,224,224)cnnefficientnet_b0timmtimm/efficientnet_b0.ra_in1ktimm图像 (1,3,224,224)mlpmlp_mixertimmtimm/mixer_b16_224.goog_in21k_ft_in1ktimm图像 (1,3,224,224)mlpgmlptimmtimm/gmlp_s16_224.ra3_in1ktimm图像 (1,3,224,224)mlpresmlptimmtimm/resmlp_12_224.fb_in1ktimm图像 (1,3,224,224)moeswitch_base_8HFgoogle/switch-base-8seq2seq-lm文本 promptmoeqwen_moeHFQwen/Qwen1.5-MoE-A2.7Bcausal-lm文本 promptsize_warning_gb: 14moetoy_moe / toy_soft_moe / toy_switch_moetoy本地本地构建toy张量 (2,64)加载器由 loaders.py 的 load() 分发统一返回(model, sample_input, meta)三元组image-classification / seq2seq-lm / causal-lm走transformers自动类加载并用TensorOutputAdapter、_CausalLogits这类薄包装把 HF 的 dataclass 输出剥成裸 logits、把输入固定成位置参数签名保证三种格式走同一条导出路径timmtimm.create_model(name, pretrainedTrue)causal-lm默认以fp16 low_cpu_mem_usageTrue加载可用CONVERT_EXP_DTYPE覆盖为 float16/bfloat16/float32这是针对统一内存主机上 14B 模型 fp32 加载爆 RAM 的对策toy不下载任何东西直接实例化 toy_moe.py 里三个用随机权重的小型 MoE 分类器TopKMoEtop-k2 门控、SoftMoE所有专家全加权、SwitchMoEtop-1 门控。build_toy()固定torch.manual_seed(42)输入为torch.randn(2, 64)——权重与输入完全确定性这正是第 5 节零差异结果的关键。注册表还提供了by_category()辅助函数qwen_moe条目带size_warning_gb: 14提醒 7B 量级 LLM 下载前需要向用户确认磁盘与时间成本。5. 逐行解读本矩阵L-FAIL、C-FAIL 与零差异 OK8 个 HF/timm 模型整行 L-FAIL。从源码结构看这对应 process_model() 中的加载分支源模型加载load()对 HF/timm 模型意味着从远端下载权重并实例化抛异常后三个目标格式会被统一标记为LOAD_FAIL并直接返回因此这些行连转换都未开始。值得注意的是该分支不会写每模型明细 JSONJSON 落盘在 L169-L170 的格式循环之后这与仓库references/results/目录下只提交了 3 个 toy 模型 JSON 的事实完全吻合。从源码结构看加载阶段的常见诱因是网络下载失败或依赖缺失但该文件本身未记录具体错误信息此处不做断言。3 个 toy 模型的 onnx 列为 C-FAIL。明细 toy_moe.json 给出了确切原因onnx: { status: CONVERT_FAIL, error: OnnxExporterError(Module onnx is not installed!) }即冻结这份证据的运行时没有安装onnx包——这是环境缺包问题而不是 ONNX 导出逻辑本身的缺陷pt 与 safetensors 两条路径不依赖 onnx 模块所以正常通过。toy 模型的 pt / safetensors 列为OK且max_abs0.00e00。明细 JSON 同时给出了耗时与产物体积pt 转换 0.35 s、产物 0.3 MBsafetensors 转换 0.0 s、产物 0.27 MB两者diff均为max_abs0.0, mean_abs0.0, max_rel0.0, allclosetrue。零差异的成因是双重的build_toy()固定随机种子使源模型确定而 ptTorchScript与 safetensors 的 round-trip 本质是权重的精确往返同一份权重在同一设备上 forward 结果逐位一致。对比判据本身由 compare.py 的 diff() 定义两端输出展平后以 float64 计算逐元素绝对/相对误差非有限值且非同符号无穷计为 invalid 并强制allclosefalse返回max_abs / mean_abs / max_rel / p50 / p95 / p99 / top_mismatch(前 5 个最大误差索引) / allclose等字段判定阈值默认atol1e-4, rtol1e-3。SKILL.md 同时给出了实践预期在 opset 差异、动态轴、dtype 转换下1e-4 ~ 1e-3 量级的漂移属正常应把矩阵中的max_abs作为第一信任信号CUDA 上由于 cudnn 重复 forward 有约 5e-4 噪声port.py会把容差放宽到atol5e-3CPU 校验仍用atol1e-4。6. 复现与刷新矩阵环境、命令与产物布局6.1 环境检查python -c import torch, onnx, onnxruntime, safetensors, onnx2torch; print(ok)依赖来自 requirements.txt按 SKILL.md 的划分用途依赖必装torch2.5, transformers4.46, onnx, onnxruntime, safetensorsonnx - pt / safetensorsonnx2torchsafetensors I/Otimm 或 transformers用于实例化 HF 仓库的架构6.2 批量实验生成/刷新矩阵# registry 中全部 11 个模型 python scripts/run.py # 只跑子集 python scripts/run.py mobilenet_v2 toy_moe注意路径约定run.py/port.py需以 scripts/ 目录为工作目录执行脚本内用Path(__file__).resolve().parent.parent定位 skill 根目录。6.3 单模型转换port.py# pt - onnxTorchScript 自包含只需 --input-shape python scripts/port.py model.pt out.onnx --input-shape 1,3,224,224 # safetensors - onnx仅权重架构经 HF repo 提供 python scripts/port.py model.safetensors out.onnx \ --hf-repo google/mobilenet_v2_1.0_224 # onnx - pt经 onnx2torch 重建计算图 python scripts/port.py model.onnx out.pt --input-shape 1,3,224,224常用选项--input-format/--output-format覆盖扩展名推断--hf-repo为 safetensors 端提供架构--skip-verify关闭 round-trip 校验超大模型-v输出各阶段计时、两端 forward 的 min/max/mean/std/first5 统计、diff 分布p50/p95/p99与 top-5 mismatch 索引。退出码语义0PASS、1DIFF转出但差异超容差、2转换失败。6.4 产物布局冻结证据提交进仓库references/matrix.md聚合表references/results/model.json每模型明细含 convert_seconds、artifact 路径、size_mb、diff。运行时产物gitignore默认位于~/.cache/pypto-convert-model/可用$CONVERT_MODEL_WORKDIR覆盖内含models/HF/timm 下载缓存、outputs/model/fmt/转换产物、logs/master.loglogs/model__format.log运行日志。6.5 已知限制与新增模型解读矩阵前应了解 SKILL.md 记录的四条限制transformers5的 attention 路径回归会导致 transformer-MoESwitch-T、Qwen-MoE的 onnx/pt 导出失败safetensors 权重路径始终可用绕过办法是降级transformers5或只走 safetensorsCUDA fp32 非确定性噪声aarch64 无onnxruntime-gpu轮子导致 ORT 回退 CPU统一内存主机的 RAM 压力已由 fp16 默认加载缓解。新增模型的固定动作在 registry.py 增加条目CNN 用image-classification或timm加载器transformer LM 用causal-lm/seq2seq-lm自定义架构用toy类别并按 toy_moe.py 的写法定义模块然后重新运行run.py刷新矩阵。转换逻辑一律复用 converters.py 中注册到CONVERTERS字典的函数不要另起炉灶。7. 小结matrix.md 不是一张静态结果表而是registry → load → convert → round-trip test → write_matrix整条流水线的可审计终点8 行 L-FAIL 说明那次实验的远端加载未成功3 行 toy 证据则以max_abs0.00e00证明了 pt/safetensors 往返的位级一致性onnx 列的 C-FAIL 则精确定位到运行环境缺onnx包。当你拿到一份新的矩阵时按先看设备行、再按状态码分层排查L-FAIL 查加载与网络、C-FAIL 查转换依赖、T-FAIL 查产物加载、DIFF 查 max_abs 与 opset/dtype、最后对照results/model.json取明细的顺序阅读就能快速定位问题所在阶段。【免费下载链接】pypto-gymPyPTO-Gym 是基于 PyPTO 编程框架构建的算子与模型样例仓库项目地址: https://gitcode.com/cann/pypto-gym创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Front-End-Checklist 中的关键请求链(Critical Request Chains)治理:从规则定义到源码级验证

Front-End-Checklist 中的关键请求链(Critical Request Chains)治理:从规则定义到源码级验证

Front-End-Checklist 中的关键请求链(Critical Request Chains)治理:从规则定义到源码级验证 【免费下载链接】Front-End-Checklist 🗂 The essential checklist for modern web development, for humans and AI agents 项目地址…

2026/9/18 22:31:42 阅读更多 →
Aspire 项目模板完全指南:模板包结构、版本更新、本地化与测试

Aspire 项目模板完全指南:模板包结构、版本更新、本地化与测试

Aspire 项目模板完全指南:模板包结构、版本更新、本地化与测试 【免费下载链接】aspire Aspire is the tool for code-first, extensible, observable dev and deploy. 项目地址: https://gitcode.com/GitHub_Trending/as/aspire Aspire(.NET Asp…

2026/9/18 22:31:42 阅读更多 →
Next.js App Router 状态共享实战:在 share-state 示例中掌握 Layout 与页面间的 Context 共享

Next.js App Router 状态共享实战:在 share-state 示例中掌握 Layout 与页面间的 Context 共享

Next.js App Router 状态共享实战:在 share-state 示例中掌握 Layout 与页面间的 Context 共享 【免费下载链接】examples Enjoy our curated collection of examples and solutions. Use these patterns to build your own robust and scalable applications. 项…

2026/9/18 22:31:42 阅读更多 →

最新新闻

如何用VimWiki构建标签分类体系:Tags完全指南

如何用VimWiki构建标签分类体系:Tags完全指南

如何用VimWiki构建标签分类体系:Tags完全指南 【免费下载链接】vimwiki Personal Wiki for Vim 项目地址: https://gitcode.com/GitHub_Trending/vi/vimwiki VimWiki 是一款运行在 Vim 里的个人 Wiki 插件,除了双向链接和日记外,它的 …

2026/9/18 23:15:05 阅读更多 →
AutoRAG 集成 Chroma 向量数据库实战指南:四种客户端模式、YAML 配置与检索节点调用

AutoRAG 集成 Chroma 向量数据库实战指南:四种客户端模式、YAML 配置与检索节点调用

AutoRAG 集成 Chroma 向量数据库实战指南:四种客户端模式、YAML 配置与检索节点调用 【免费下载链接】AutoRAG AutoRAG: Now your agent can find anything in your computer. It gets smarter if you are using it frequently. 项目地址: https://gitcode.com/Gi…

2026/9/18 23:15:05 阅读更多 →
Kafka、RocketMQ、RabbitMQ怎么选?从架构原理到真实场景的选型指南

Kafka、RocketMQ、RabbitMQ怎么选?从架构原理到真实场景的选型指南

做后端开发的这几年,我跟这三款消息中间件都打过不少交道。你翻社区里的选型文章,经常看到一堆对比表格,什么吞吐量几十万每秒、延迟几毫秒、支持事务消息……表格背下来了,但真到自己做技术方案时,还是不知道选哪个。…

2026/9/18 23:15:05 阅读更多 →
settings.json 写完还连 Anthropic?千问走 TaoToken 时先跑 /status

settings.json 写完还连 Anthropic?千问走 TaoToken 时先跑 /status

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/18 23:15:05 阅读更多 →
LangChain V1.0构建高效RAG系统实战指南

LangChain V1.0构建高效RAG系统实战指南

1. 项目概述在自然语言处理领域,检索增强生成(Retrieval-Augmented Generation,简称RAG)正逐渐成为连接大型语言模型与领域知识的关键桥梁。LangChain作为当前最流行的LLM应用开发框架,其1.0版本对RAG模块进行了全面升…

2026/9/18 23:15:05 阅读更多 →
青海专业网页设计免费建站避坑指南3大技术选型注意事项

青海专业网页设计免费建站避坑指南3大技术选型注意事项

青海专业网页设计免费建站避坑指南3大技术选型注意事项 网站做好了没人访问,这简直是无数中小企业主和创业者的噩梦。你花钱请人做了个精美的官网,或者自己折腾了半天用免费模板搭了个站,结果打开一看,后台流量数据惨不忍睹,连个像样的询盘都没有。这时候你才意识到,问题根本不在美工把图片调得有多亮,而在于你从一…

2026/9/18 23:14:23 阅读更多 →

日新闻

Matlab手写逻辑回归:从数学原理到多变量概率预测模型实现

Matlab手写逻辑回归:从数学原理到多变量概率预测模型实现

很多朋友第一次看到"逻辑回归"这四个字,第一反应就是——这玩意儿是个回归模型吧?我当年也是在Matlab里跑完一段代码,看着输出的0.73、0.86这种概率值,才回过神来:这家伙其实是披着回归外衣的分类神器&#…

2026/9/18 0:00:28 阅读更多 →
高值医用耗材研报PDF:用Python完成字段抽取、清洗与趋势预测

高值医用耗材研报PDF:用Python完成字段抽取、清洗与趋势预测

简介:这份报告是2023-2028年高值医用耗材行业调研及发展前景趋势预测报告,面向医疗器械企业管理者、投资机构、行业研究人员及关注政策变化的从业者,用于把握行业监管动向、市场格局与未来趋势。报告以PDF格式呈现,共1个文件、整体…

2026/9/18 0:00:28 阅读更多 →
三维高斯场赋能世界模型:几何语义蒸馏与机器人决策实战

三维高斯场赋能世界模型:几何语义蒸馏与机器人决策实战

先把我自己的背景交代一下:我之前在搞具身智能和机器人导航相关的项目,很长一段时间里都被“环境表示”这件事卡着。传统做法是用点云或者网格做几何建模,语义信息另外再跑分割模型,两套东西各管各的,时间一长就会发现…

2026/9/18 0:00:28 阅读更多 →

周新闻

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验 【免费下载链接】ai The AI Toolkit for TypeScript. From the creators of Next.js, the AI SDK is a free open-source library for building AI-powered applications and ag…

2026/9/16 19:03:19 阅读更多 →
Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化 【免费下载链接】refine A React Framework for building internal tools, admin panels, dashboards & B2B apps with unmatched flexibility. 项目地址: https://gitcode.com/GitH…

2026/9/17 7:57:36 阅读更多 →
Flutter应用改名全指南:从Android到iOS的配置与工具实践

Flutter应用改名全指南:从Android到iOS的配置与工具实践

刚接一个外包项目时,甲方要求把工程里临时用的应用名改成正式产品名。我本来觉得“改名”这种小事,打开配置文件改一行不就完了?结果真动手才发现,Flutter项目里“应用名称”根本不是一处配置,而是一整套散落在 Androi…

2026/9/17 10:19:14 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/16 22:31:27 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/15 21:39:18 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/16 22:32:59 阅读更多 →