当前位置: 首页 > article >正文

写给前端的 CANN-GraphCompiler:昇腾图编译器到底是啥?

写给前端的 CANN-GraphCompiler昇腾图编译器到底是啥之前有兄弟问“哥PyTorch 模型怎么在昇腾上跑中间有什么编译过程”好问题。今天一次说清楚。GraphCompiler 是啥GraphCompiler 是昇腾的图编译器。把计算图编译成 NPU 可执行的代码。一句话说清楚GraphCompiler 是昇腾的图编译器把模型计算图编译成 NPU 执行代码优化性能。你说气人不气人同样的模型GraphCompiler 编译后能快 2-3 倍。为什么需要 GraphCompiler模型执行流程PyTorch 模型 ↓ 导出计算图ONNX/TorchScript ↓ GraphCompiler 编译 ↓ 生成 OM 模型 ↓ NPU 执行GraphCompiler 负责解析计算图、优化、生成可执行代码。GraphCompiler 核心能力1. 图解析解析不同框架的计算图。importgraph_compilerasgc# 解析 ONNXmodelgc.load_onnx(model.onnx)# 解析 TorchScriptmodelgc.load_torchscript(model.pt)# 解析 TensorFlowmodelgc.load_tensorflow(model.pb)# 查看图结构print(model.graph)2. 图优化优化计算图性能。importgraph_compilerasgc modelgc.load_onnx(model.onnx)# 应用优化optimizergc.GraphOptimizer()# 算子融合optimizer.fuse_ops(model.graph)# 死代码消除optimizer.eliminate_dead_code(model.graph)# 常量折叠optimizer.fold_constants(model.graph)# 内存优化optimizer.optimize_memory(model.graph)# 查看优化后的图print(model.graph)3. 算子映射映射到昇腾算子。importgraph_compilerasgc modelgc.load_onnx(model.onnx)# 算子映射mappergc.OpMapper()mapper.map_to_ascend(model.graph)# 查看映射结果fornodeinmodel.graph.nodes:print(f{node.op_type}-{node.ascend_op})4. 内存规划规划内存使用。importgraph_compilerasgc modelgc.load_onnx(model.onnx)# 内存规划plannergc.MemoryPlanner()memory_planplanner.plan(model.graph)print(fTotal memory:{memory_plan.total_memory/1024/1024:.2f}MB)print(fPeak memory:{memory_plan.peak_memory/1024/1024:.2f}MB)5. 编译生成生成 OM 模型。importgraph_compilerasgc# 编译modelgc.load_onnx(model.onnx)compilergc.Compiler()om_modelcompiler.compile(model)# 保存om_model.save(model.om)# 查看模型信息print(fInput shape:{om_model.input_shape})print(fOutput shape:{om_model.output_shape})print(fModel size:{om_model.size/1024/1024:.2f}MB)编译选项优化级别importgraph_compilerasgc compilergc.Compiler()# O0: 无优化compiler.set_opt_level(gc.OptLevel.O0)# O1: 基础优化compiler.set_opt_level(gc.OptLevel.O1)# O2: 标准优化默认compiler.set_opt_level(gc.OptLevel.O2)# O3: 激进优化compiler.set_opt_level(gc.OptLevel.O3)精度模式importgraph_compilerasgc compilergc.Compiler()# FP32compiler.set_precision(gc.Precision.FP32)# FP16compiler.set_precision(gc.Precision.FP16)# 混合精度compiler.set_precision(gc.Precision.MIXED)动态 Shapeimportgraph_compilerasgc compilergc.Compiler()# 静态 Shapecompiler.set_dynamic_shape(False)# 动态 Shapecompiler.set_dynamic_shape(True)compiler.set_dynamic_range(input,min_shape[1,3,224,224],max_shape[8,3,224,224])优化技术1. 算子融合# 原始图# Conv - BN - ReLU - Conv - BN - ReLU# 融合后# FusedConvBNReLU - FusedConvBNReLU融合规则Conv BN ReLU → FusedConvBNReLUMatMul Bias GELU → FusedMatMulBiasGELULinear ReLU → FusedLinearReLU2. 内存优化# 原始内存布局# Tensor1 - Tensor2 - Tensor3 (各占内存)# 优化后内存布局# Tensor1 和 Tensor3 复用同一块内存优化技术内存复用就地操作生命期分析3. 并行优化# 原始执行# Op1 - Op2 - Op3 (串行)# 优化后执行# Op1 || Op2 - Op3 (并行)4. 数据布局优化# 原始布局: NCHW# 优化布局: NHWC (昇腾更高效)ATC 工具ATC 是 GraphCompiler 的命令行工具。# ONNX 转 OMatc--modelmodel.onnx--outputmodel.om--framework5# TorchScript 转 OMatc--modelmodel.pt--outputmodel.om--framework7# 查看模型信息atc--mode1--ommodel.om# 设置优化级别atc--modelmodel.onnx--outputmodel.om--framework5--opt_level3# 设置精度atc--modelmodel.onnx--outputmodel.om--framework5--precision_modeallow_mix_precision# 设置动态 Shapeatc--modelmodel.onnx--outputmodel.om--framework5\--input_shape_rangeinput:[1~8,3,224,224]性能对比在昇腾 910 上编译 ResNet-50优化级别编译时间推理延迟内存占用O05s20ms800MBO110s15ms600MBO220s10ms400MBO360s8ms350MB你说气人不气人O3 优化比 O0 快 2.5 倍。编译流程详解Step 1: 加载模型importgraph_compilerasgc# 加载模型modelgc.load_onnx(resnet50.onnx)# 查看图信息print(fNodes:{len(model.graph.nodes)})print(fInputs:{model.graph.inputs})print(fOutputs:{model.graph.outputs})Step 2: 前处理# 标准化输入preprocessorgc.Preprocessor()preprocessor.normalize_inputs(model.graph)# 类型推断preprocessor.infer_types(model.graph)# Shape 推断preprocessor.infer_shapes(model.graph)Step 3: 图优化optimizergc.GraphOptimizer()# 算子融合optimizer.fuse_ops(model.graph)# 死代码消除optimizer.eliminate_dead_code(model.graph)# 常量折叠optimizer.fold_constants(model.graph)# 公共子表达式消除optimizer.eliminate_cse(model.graph)Step 4: 算子映射# 映射到昇腾算子mappergc.OpMapper()mapper.map_to_ascend(model.graph)# 检查支持checkergc.OpChecker()unsupportedchecker.check_unsupported(model.graph)ifunsupported:print(fUnsupported ops:{unsupported})Step 5: 内存规划plannergc.MemoryPlanner()memory_planplanner.plan(model.graph)print(fTotal memory:{memory_plan.total_memory/1024/1024:.2f}MB)Step 6: 代码生成compilergc.Compiler()om_modelcompiler.compile(model)om_model.save(resnet50.om)调试技巧查看中间图importgraph_compilerasgc modelgc.load_onnx(model.onnx)# 保存中间图gc.save_graph(model.graph,after_load.txt)optimizergc.GraphOptimizer()optimizer.fuse_ops(model.graph)gc.save_graph(model.graph,after_fuse.txt)验证编译结果importgraph_compilerasgc# 加载 OM 模型om_modelgc.load_om(model.om)# 验证输出input_datacreate_test_input()outputom_model.infer(input_data)# 对比原始模型original_outputoriginal_model(input_data)print(fMax diff:{abs(output-original_output).max()})总结GraphCompiler 是昇腾的图编译器图解析ONNX/TorchScript/TensorFlow图优化融合/消除/折叠算子映射映射到昇腾算子内存规划优化内存使用代码生成生成 OM 模型

相关文章:

写给前端的 CANN-GraphCompiler:昇腾图编译器到底是啥?

写给前端的 CANN-GraphCompiler:昇腾图编译器到底是啥? 之前有兄弟问:“哥,PyTorch 模型怎么在昇腾上跑?中间有什么编译过程?” 好问题。今天一次说清楚。 GraphCompiler 是啥? GraphCompiler 是…...

ElevenLabs河南话合成效果翻车?5大本地化陷阱与97.3%可听度提升实测方案

更多请点击: https://codechina.net 第一章:ElevenLabs河南话语音合成效果翻车现象全景扫描 近期多位河南本地开发者及方言内容创作者反馈,ElevenLabs官方API在调用其“multilingual v2”模型尝试生成河南话(中原官话郑开片&…...

将数据从 OPPO 传输到 iPhone 的 4 个有效方案

拥有华丽的设计和强大的功能,谁不想拥有一部新的 iPhone?如果您是Android OPPO 用户,现在正准备换用新 iPhone,您可能会担心数据传输的问题。由于 OPPO 和 iPhone 的操作系统不同,很多人觉得将 OPPO 手机转换为 iPhone…...

ElevenLabs荷兰文语音生成速度对比实测:从4.2s→0.8s的WebSocket流式优化路径(附可复用代码片段)

更多请点击: https://intelliparadigm.com 第一章:ElevenLabs荷兰文语音生成速度对比实测:从4.2s→0.8s的WebSocket流式优化路径(附可复用代码片段) ElevenLabs 的 Dutch(nl-NL)语音合成在默认…...

野兽派不是乱来:拆解Midjourney V6中色彩暴力、笔触失序与构图反叛的5层参数逻辑

更多请点击: https://kaifayun.com 第一章:野兽派不是乱来:Midjourney V6的美学暴动宣言 Midjourney V6 不是一次平滑迭代,而是一场蓄谋已久的视觉政变——它将“语义精确性”与“风格不可预测性”焊死在同一张提示词底片上。当 …...

前端架构演进:从单体到微前端

前端架构演进:从单体到微前端 前端架构的发展历程 第一阶段:单体应用(Mono Repo) ├── src/ │ ├── components/ │ ├── pages/ │ ├── services/ │ ├── utils/ │ └── styles/ └── index.html…...

Github创建项目(创建仓库、新建项目、新建仓库)步骤

文章目录 新建项目然后根据指示创建第一个提交并推送即可 新建项目 然后根据指示创建第一个提交并推送即可 echo "# xxxxxxxx" >> README.md git init git add README.md git commit -m "first commit" git branch -M main git remote add origin ht…...

大模型终于看懂立体几何!中科院联合阿里提出统一形式语言,刷新解析SOTA

论文详细解读:使用统一形式化语言的平面与立体几何图形解析 论文标题:Geoparsing: Diagram Parsing for Plane and Solid Geometry with a Unified Formal Language作者机构:中国科学院自动化研究所(CASIA)、中国科学…...

Agentic Search能替代GraphRAG吗,结论清晰了

2024 年 GraphRAG 爆火以来,「要不要建图」成了 RAG 系统设计中最常被讨论的决策。建图能显著提升多跳推理性能,但代价高昂——实体抽取、图谱构建、索引维护,每一步都是真金白银。 与此同时,agentic search 系统快速崛起——Sear…...

RAG 检索到了还是答错:从一个线上事故讲透 RAG 数据工程全链路

一个合同问答系统的线上事故 某企业法务团队上线了一套合同问答系统。用户问:“渠道商季度返点的计算条件是什么?” 系统返回了三段参考文档,生成了一段看起来完整的回答。法务审核时发现:引用的是 2024 年旧版渠道政策&#xf…...

印地语语音合成落地难?ElevenLabs官方未披露的4大限制、3种绕过技巧,及2个替代模型性能对比数据

更多请点击: https://kaifayun.com 第一章:印地语语音合成落地难?ElevenLabs官方未披露的4大限制、3种绕过技巧,及2个替代模型性能对比数据 ElevenLabs对印地语支持的真实现状 ElevenLabs虽在API文档中标注“支持印地语&#x…...

ElevenLabs波斯文TTS落地难题全破解:从Unicode乱码、音节切分失败到自然语调合成的5大技术卡点

更多请点击: https://codechina.net 第一章:ElevenLabs波斯文TTS落地难题全破解:从Unicode乱码、音节切分失败到自然语调合成的5大技术卡点 波斯文(Farsi)作为右向左(RTL)、连字密集、元音隐含…...

紧急通知:Claude文档解析API响应延迟突增300%?立即启用这3个异步缓存+增量摘要策略保生产可用性

更多请点击: https://intelliparadigm.com 第一章:Claude复杂文档分析工作流的稳定性危机本质 当处理百页PDF、嵌套Markdown表格、多语言混合注释及跨页公式引用的法律合同时,Claude模型常在推理链中出现非确定性断裂——并非简单“超时”或…...

揭秘Midjourney V6蒸汽波出图失败率高达63%的底层原因:3步绕过平台封禁,稳定生成霓虹故障美学

更多请点击: https://codechina.net 第一章:蒸汽波美学的数字幽灵:Midjourney V6封禁机制本质解构 蒸汽波(Vaporwave)以低保真采样、CRT扫描线、80年代商业图腾与数字怀旧为视觉语法,其美学内核恰恰在于对…...

Midjourney单色调风格失效诊断图谱(含8种典型失败案例+对应--no、--style、--seed三重校准方案)

更多请点击: https://intelliparadigm.com 第一章:Midjourney单色调风格失效诊断图谱(含8种典型失败案例对应--no、--style、--seed三重校准方案) 单色调(Monochrome)图像生成在Midjourney中高度依赖提示词…...

从扁平到触手可及,Midjourney拟物化全流程拆解,含12组高复用材质参数模板与避坑清单

更多请点击: https://kaifayun.com 第一章:从扁平到触手可及:Midjourney拟物化设计范式跃迁 当UI设计从iOS 7的极简扁平风席卷全球,我们曾笃信“去装饰即高级”。而Midjourney V6起悄然掀起一场静默革命——它不再满足于生成“看…...

谷歌收录怎么做比较快?Shopify过滤5个无效参数提升商品页收录

一个拥有5000个SPU的Shopify独立站,在Google Search Console后台的网页报告中,未收录网页数量高达45000个。索引分配明细标明,超过32000个URL带有“已抓取 - 目前未索引”标签。谷歌浏览器爬虫每天分配给该站点的抓取请求固定在4000次左右。检…...

我在大厂做开发的5年:那些996的日子

作为一名在互联网大厂摸爬滚打五年的开发工程师,如今转型成为软件测试团队的负责人,回望过去那些被996填满的日子,我有太多话想对同为技术从业者的测试同仁们说。这些经历不仅是我个人的成长印记,更藏着开发与测试岗位在高压环境下…...

谷歌收录怎么做比较快?提升网页打开速度至2秒内的优化方案

谷歌爬虫(Googlebot)在网站停留的时间存在硬性额度。网页文件若达到 6MB,传输会耗尽爬虫配额。调整网页体积到 1MB 以内,同等时间内抓取数量能提升 4倍。每日抓取页面从 1000 个爬升到 4000 个,新内容进入索引库的时间…...

做技术选型时,别只看Star数,这五个指标更重要

在软件研发的技术选型赛道上,GitHub的Star数常被当作“流量密码”,不少团队仅凭这一指标就敲定技术栈。但对于软件测试从业者而言,Star数只是技术生态的“表面繁华”,真正决定技术选型成败的,是那些能直接影响测试可行…...

福建话TTS落地难?手把手教你绕过ElevenLabs官方未公开的闽东方言/莆仙话语音注入方案,限时可复现

更多请点击: https://kaifayun.com 第一章:福建话TTS落地难?手把手教你绕过ElevenLabs官方未公开的闽东方言/莆仙话语音注入方案,限时可复现 ElevenLabs 官方 API 当前仅支持普通话、粤语等主流中文变体,对闽东方言&a…...

【编号884】江西省各城市-春节人口迁徙规模数据(2019-2025)

今天分享的是 江西省各城市-春节人口迁徙规模数据(2019-2025)数据概况 江西省各城市-春节人口迁徙规模数据(2019-2025) 春节地级市人口迁徙指数(2019-2025)迁徙指数依托位置时空大数据构建,形…...

LLM 认知框架:揭秘时间序列与空间结构,洞悉 AI 未来!

一、简明摘要 本文是一篇概念说明与方法论文章,核心问题是:LLM 到底是什么,它与 AI、AGI、Agent、Skill 有什么关系。全文先区分 AI、AGI、LLM 三个层级,再说明 LLM 的现实形态已经从“文本生成模型”扩展为“模型、上下文、外部知…...

微信聊天记录永久保存指南:5分钟掌握WeChatMsg完整备份方案

微信聊天记录永久保存指南:5分钟掌握WeChatMsg完整备份方案 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/…...

2026年四款主流 SaaS 收银系统:不同场景怎么选?

开店做生意,最让人头疼的往往不是选址或装修,而是每天打烊后对着乱糟糟的账本发愁。很多刚起步的老板为了省成本,初期只用纸笔或简单的 Excel 记账,一旦客流上来,库存对不上、会员积分算错、交接班混乱等问题接踵而至。…...

YOLOv11公共场所吸烟行为目标检测数据集-6496张-smoking-detection-1

YOLOv11公共场所吸烟行为目标检测数据集 📊 数据集基本信息 目标类别: [‘not_smoking’, ‘smoking’]中文类别:[‘不吸烟’, ‘吸烟’]训练集:5644 张验证集:569 张测试集:283 张总计:6496 张…...

ElevenLabs支持闽南语吗?福建话语音合成实测:从API调用到音色克隆的7步通关手册

更多请点击: https://intelliparadigm.com 第一章:ElevenLabs福建话语音支持现状与能力边界 ElevenLabs 目前尚未在官方语音模型库中提供对福建话(含闽南语、闽东语等分支)的原生支持。其公开文档与 API 文档均未列出任何以“Fuj…...

拒绝C盘爆红!自制 Windows 系统垃圾一键清理工具(精美UI设计)

你的 C盤 又红了吗?相信很多 Windows 用户都经历过被 **“C盘空间不足”** 支配的恐惧。随着日常办公、浏览网页、系统更新,各种临时文件和日志会悄悄吞噬掉我们珍贵的固态硬盘空间。市面上的清理软件鱼龙混杂,要么捆绑软件,要么后…...

MPV_lazy终极指南:如何用懒人包快速提升视频播放体验?

MPV_lazy终极指南:如何用懒人包快速提升视频播放体验? 【免费下载链接】mpv_PlayKit 🔄 mpv player 播放器折腾记录 Windows conf | 中文注释配置 汉化文档 快速帮助入门 | mpv-lazy 懒人包 Win11 x64 config | 着色器 shader 滤镜 filter 整…...

千问 LeetCode 2547. 拆分数组的最小代价 Java实现

这道题是典型的区间DP(动态规划)问题,核心在于如何高效计算每个子数组的"重要性"。问题分析重要性的计算规则: - 子数组中只出现一次的数字会被移除(不计入长度) - 重要性 k 剩余数字的个数 - …...