基于香橙派 KunpengPro学习CANN(3)——pytorch 模型迁移
通用模型迁移适配可以分为四个阶段:迁移分析、迁移适配、精度调试与性能调优。

-
迁移分析
迁移支持度分析:- 准备NPU环境,获取模型的源码、权重和数据集等文件;
- 使用迁移分析工具采集目标网络中的模型/算子清单,识别第三方库及目标网络中算子支持情况,分析模型迁移的可行性;
- 在迁移支持度分析中如果存在平台未支持的算子,可通过修改模型脚本,使用等价支持的算子替换的方式解决,或者进行算子适配
-
迁移适配
- 通过模型脚本迁移,实现GPU -> NPU的接口替换、NPU分布式框架改造;
- 配置训练相关环境变量,以保证模型训练可以在昇腾NPU上正常运行;根据实际场景选择相应操作完成模型脚本和启动脚本配置;
- 数据类型为BF16或FP32的模型训练;混合使用单精度(float32)与半精度(float16)数据类型
- 保存模型文件用于在线推理,使用模型文件导出ONNX模型通过ATC工具将其转换为适配昇腾AI处理器的.om文件用于离线推理
-
精度调试
- 确保迁移前后模型精度差异在可接受范围之内,数据无异常溢出;如果出现精度相关问题,需要借助精度问题分析工具分析
-
性能调优
- 在NPU环境上,使用性能分析工具介绍对模型进行性能拆解;基于性能拆解得到的数据,分析瓶颈模块,明确性能优化方向
- 数据加载加速、模型代码亲和适配、内存优化、融合算子、融合优化器;通信优化
1 迁移分析
进行模型迁移之前,需要做以下准备与分析工作:
- 选取合适的模型,在三方平台运行成功,并获取精度/性能基线
- 在昇腾设备上搭建环境,并使用迁移分析工具分析模型在昇腾设备上的支持度
分析流程:

1.1 模型选取与约束说明
- 模型选取
在选取迁移模型时,尽可能选取权威PyTorch模型实现仓,包括但不限于PyTorch(imagenet/vision等)、facebookresearch(Detectron/detectron2等)、open-mmlab(MMDetection/mmpose等)。
对于大模型,使用较为广泛的资源仓库是huggingface社区、Megatron-LM、Llama-Factory等仓库。
-
约束说明
- 迁移前要保证选定的模型能在GPU或CPU上运行,并输出精度和性能基线
- 模型迁移前需要完成昇腾PyTorch训练环境安装,以完成迁移支持度分析与后续的模型训练
包括NPU驱动固件、CANN软件toolkit、二进制算子包以及PyTorch框架的安装
-
目前已知的不支持场景:
- 不支持使用DP(distributed parallel)模式的模型迁移。若用户训练脚本中包含昇腾NPU平台不支持的torch.nn.parallel.DataParallel接口,则需手动修改该接口为torch.nn.parallel.DistributedDataParallel接口,以执行多卡训练。原脚本需要在GPU环境下基于Python3.8及以上跑通。
- APEX库中的FusedAdam融合优化器,目前不支持使用自动迁移或PyTorch GPU2Ascend工具迁移该优化器,需用户手工进行迁移
- 大模型迁移暂不支持bmtrain框架的迁移
- 大模型迁移暂不支持使用了bitsandbytes的迁移
- 大模型迁移暂不支持colossai三方库中HybridAdam优化器相关接口的迁移
- 目前暂不原生支持xFormers训练,需要使用xFormers中的FlashAttentionScore融合算子的迁移
- 当前NPU不支持grouped_gemm第三方库安装
- 当前NPU支持composer第三方库安装,但NPU未做适配,无法使用
2 迁移适配
迁移适配流程总体可分为模型脚本迁移、环境变量和脚本配置和关键特性适配三部分,主要包含以下工作:
- 模型脚本迁移:把三方平台上的PyTorch模型代码映射到昇腾设备上。推荐使用自动迁移,通过导入一键迁移库的形式,将三方平台上的代码映射为昇腾设备代码。
- 自动迁移:在训练脚本中导入脚本转换库,然后拉起脚本执行训练。训练脚本在运行时,会自动将脚本中的CUDA接口替换为昇腾AI处理器支持的NPU接口。整体过程为边训练边转换。
- 工具迁移:使用迁移工具(pytorch_gpu2npu或PyTorch GPU2Ascend),自动将训练脚本中的CUDA接口替换为昇腾AI处理器支持的NPU接口,并生成迁移报告(脚本转换日志、不支持算子的列表、脚本修改记录)。训练时,运行转换后的脚本。整体过程为先转换脚本,再进行训练。
- 手工迁移:通过分析模型,对比GPU与NPU接口,手动对训练脚本进行修改,以支持在昇腾AI处理器上执行训练。
- 定义NPU为训练设备,将训练脚本中适配GPU的接口切换至适配NPU的接口。
- 多卡迁移需修改芯片间通信方式为昇腾支持的hccl。
- 环境变量和脚本配置:在昇腾设备上运行PyTorch模型代码时,必须的适配操作,包括环境变量配置和模型脚本与启动脚本配置。
- 关键特性适配:在昇腾设备上运行PyTorch模型代码时,可选的适配操作。用户需要查看特性是否适用于当前训练场景与设备,根据具体情况选择性适配。
TO BE CONTINUED…
相关文章:
基于香橙派 KunpengPro学习CANN(3)——pytorch 模型迁移
通用模型迁移适配可以分为四个阶段:迁移分析、迁移适配、精度调试与性能调优。 迁移分析 迁移支持度分析: 准备NPU环境,获取模型的源码、权重和数据集等文件;使用迁移分析工具采集目标网络中的模型/算子清单,识别第三方…...
【Ratis】ReferenceCountedObject接口的作用及参考意义
Apache Ratis的项目源码里,大量用到了自定义的ReferenceCountedObject接口。 本文就来学习一下这个接口的作用,并借鉴一下它解决的问题和实现原理。 功能与作用 ReferenceCountedObject 是一个接口,用于管理对象的引用计数。它的主要功能和作用包括: 引用计数管理: 提供…...
CentOS下安装ElasticSearch(日志分析)
准备目录 搞一个自己喜欢的目录 mkdir /usr/local/app 切换到该目录 cd /usr/local/app 下载 wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.9.2-linux-x86_64.tar.gz 选择其他版本 点击进入官网...
动态库、静态库、导入库
静态库、动态库与导入库详解 核心概念 类型定义文件扩展名链接方式运行时依赖静态库预编译代码集合,编译时嵌入可执行文件.lib (Windows)、.a (Linux/MinGW)直接链接到可执行文件无动态库运行时加载的代码库,允许多程序共享.dll (Windows)、.so (Linux)…...
电子硬件入门(三)——偏置电路
文章目录 一、先理解问题:为什么需要偏置电压?二.偏置电路生成的四大核心零件三、工作流程图解四、实物电路对照五、常见问题答疑 一、先理解问题:为什么需要偏置电压? 想象一下,电机的电流像一条波浪线&#x…...
使用C++写一个递推计算均方差和标准差的用例
文章目录 代码输出关键实现说明1. 类设计2. 算法核心3. 数值稳定性 扩展应用场景1. 实时传感器数据处理2. 大规模数据集分块处理 总结 以下是用 C 实现递推计算均值、方差和标准差的完整示例代码,基于 Welford 算法,适用于实时数据流或大数据场景&#x…...
springBoot中不添加依赖 , 手动生成一个token ,并校验token,在统一拦截器中进行校验 (使用简单 , 但是安全性会低一点)
要在 Spring Boot 里实现接口统一拦截并校验 Token,可以借助 Spring 的拦截器机制。下面是具体的实现步骤和代码示例。 1. 创建 Token 工具类 import java.nio.charset.StandardCharsets; import java.security.MessageDigest; import java.security.NoSuchAlgori…...
Vue:单文件组件
Vue:单文件组件 1、 什么是单文件组件? 在传统的Vue开发里,我们接触的是非单文件组件,它们通常被定义在同一个HTML文件中,随着项目规模的扩大,代码会变得杂乱无章,维护起来极为困难。而单文件…...
HarmonyOS NEXT开发实战——HUAWEI DevEco Studio 开发指南
概述 HUAWEI DevEco Studio(以下简称 DevEco Studio)是基于 IntelliJ IDEA Community 开源版本打造的一站式开发平台,专为 HarmonyOS 系统上的应用和元服务(以下简称 应用/元服务)提供高效的开发环境。 作为一款专业…...
IntelliJ IDEA 调试技巧指南
在日常开发中,调试是不可或缺的一部分。掌握调试工具的使用可以让我们更高效地定位和解决问题。本文将介绍一些在 IntelliJ IDEA 中常用的调试技巧,希望能帮助你在开发过程中更顺畅地解决问题。 1. 方法断点:快速定位实现类 方法断点可以帮…...
JavaScript变量声明与DOM操作指南
变量声明 1.变量声明有三个 var let 和 const 我们应该用那个呢? 首先var 先排除,老派写法,问题很多,可以淘汰掉… 2.let or const ? 建议: const 优先,尽量使用const,原因是:…...
嵌入式硬件篇---龙芯UART通信
文章目录 前言一、代码结构解析1. 头文件部分作用 2. 宏定义与全局变量龙芯特性 3. 主函数流程关键点 4. UART发送函数龙芯实现 5. 串口配置函数(set_port)龙芯注意事项 6. GPIO控制函数龙芯GPIO特性 7. PWM控制函数龙芯PWM实现 二、龙芯UART深度解析1. …...
[K!nd4SUS 2025] Crypto
最后一个把周末的补完。这个今天问了小鸡块神终于把一个补上,完成5/6,最后一个网站也上不去不弄了。 Matrices Matrices Matrices 这个是不是叫LWE呀,名词忘了,但意思还是知道。 b a*s e 这里的e是高斯分成,用1000…...
随机变量的不同收敛性
随机变量不同收敛性:一场有趣的趋近之旅😜 一、引言 在概率论这个奇妙的世界里,随机变量就像一群调皮的小精灵🧚 它们的行为充满了不确定性。而今天我们要讲的,就是这些小精灵们的 “趋近大冒险”—— 随机变量的不同…...
JavaScript 函数类型详解:函数声明、函数表达式、箭头函数
在 JavaScript 中,函数是构建逻辑的核心单元。本文将通过 定义对比、核心特性 和 使用场景 三个维度,全面解析以下三种函数类型的区别: 函数声明(Function Declaration)函数表达式(Function Expression&am…...
工作记录 2017-02-04
工作记录 2017-02-04 序号 工作 相关人员 1 修改邮件上的问题。 更新RD服务器。 郝 更新的问题 1、DataExport的设置中去掉了ListPayors,见DataExport\bin\dataexport.xml 2、“IPA/Group Name” 改为 “Insurance Name”。 3、修改了Payment Posted的E…...
Etcd 服务搭建
💢欢迎来到张胤尘的开源技术站 💥开源如江河,汇聚众志成。代码似星辰,照亮行征程。开源精神长,传承永不忘。携手共前行,未来更辉煌💥 文章目录 Etcd 服务搭建预编译的二进制文件安装下载 etcd 的…...
【C++】stack和queue的使用及模拟实现(含deque的简单介绍)
文章目录 前言一、deque的简单介绍1.引入deque的初衷2.deque的结构3.为什么选择deque作为stack和queue的底层默认容器 二、stack1.stack的介绍2.stack的使用3.stack的模拟实现 三、queue1.queue的介绍2.queue的使用3.queue的模拟实现 前言 一、deque的简单介绍(引入…...
Spring Boot - Spring Boot 静态资源映射(默认静态资源映射、自定义静态资源映射)
一、静态资源映射 在 Spring Boot 中,静态资源的映射是指将特定的 URL 路径与静态资源关联起来 静态资源有例如,HTML、CSS、JS、图片等 这使得客户端可以通过 URL 路径访问这些资源 二、默认静态资源映射 概述 Spring Boot 默认会将以下目录中的文件…...
MySQL原理:逻辑架构
目的:了解 SQL执行流程 以及 MySQL 内部架构,每个零件具体负责做什么 理解整体架构分别有什么模块每个模块具体做什么 目录 1 服务器处理客户端请求 1.1 MySQL 服务器端逻辑架构说明 2 Connectors 3 第一层:连接层 3.1 数据库连接池(Conn…...
ora-600 ktugct: corruption detected---惜分飞
接手一个oracle 21c的库恢复请求,通过Oracle数据库异常恢复检查脚本(Oracle Database Recovery Check)脚本检测之后,发现undo文件offline之后,做了resetlogs操作,导致该文件目前处于WRONG RESETLOGS状态 尝试恢复数据库ORA-16433错误 SQL> recover datafile 1; ORA-00283:…...
Houdini :《哪吒2》神话与科技碰撞的创新之旅
《哪吒2》(即《哪吒之魔童闹海》)截止至今日,荣登全球票房榜第五。根据猫眼专业版数据,截至2025年3月15日,《哪吒2》全球累计票房(含预售及海外)超过150.19亿元,超越《星球大战&…...
flink 写入es的依赖导入问题(踩坑记录)
flink 写入es的依赖导入问题(踩坑记录) ps:可能只是flink低版本才会有这个问题 1. 按照官网的导入方式: 2. 你会在运行sql-client的时候完美得到一个错误: Exception in thread "main" org.apache.flink.table.client.SqlClientEx…...
PCL 高斯函数拟合(正太分布)
文章目录 一、简介二、实现代码三、实现效果一、简介 类似于之前最小二乘法的做法,我们需要先确定目标函数: 通过最小二乘法,找到使预测值与实际数据残差平方和最小的参数: 不过由于这是一个非线性最小二乘问题,因此这里无法使用矩阵的形式之间求解它的解析解了,因此这里…...
深度革命:ResNet 如何用 “残差连接“ 颠覆深度学习
一文快速了解 ResNet创新点 在深度学习的历史长河中,2015年或许是最具突破性的一年。这一年,微软亚洲研究院的何恺明团队带着名为ResNet(残差网络)的模型横空出世,在ImageNet图像分类竞赛中以3.57%的错误率夺冠&#…...
Java基础与集合
参考 Java基础知识详解:从面向对象到异常处理-CSDN博客 2024年 Java 面试八股文(20w字)_java面试八股文-CSDN博客 基础知识 java概述 什么是java? java是一种面向对象的编程语言 java特点 面向对象(继承&#…...
【Python 算法零基础 1.线性枚举】
我装作漠视一切,以为这样就可以不在乎 —— 25.3.17 一、线性枚举的基本概念 1.时间复杂度 线性枚举的时间复杂度为 O(nm),其中 n是线性表的长度。m 是每次操作的量级,对于求最大值和求和来说,因为操作比较简单,所以 …...
深入理解 Linux 的 top 命令:实时监控系统性能
在 Linux 系统管理和性能优化中,top 命令是一个不可或缺的工具。它可以实时显示系统的进程信息和资源使用情况,帮助管理员快速定位性能瓶颈。本文将详细介绍 top 命令的输出内容及其使用方法,帮助你更好地掌握系统性能监控。 一、top 命令简介 top 是一个动态显示系统状态的…...
003 SpringCloud整合-LogStash安装及ELK日志收集
SpringCloud整合-LogStash安装及ELK日志收集 文章目录 SpringCloud整合-LogStash安装及ELK日志收集1.安装ElasticSearch和kibana2.Docker安装logstash1.拉取docker镜像2.创建外部挂载目录3.拷贝容器内部文件到宿主机4.修改外部挂载文件5.运行docker容器 3.整合kibana1.进入kiba…...
AI预测体彩排3新模型百十个定位预测+胆码预测+杀和尾+杀和值2025年3月18日第22弹
前面由于工作原因停更了很长时间,停更期间很多彩友一直私信我何时恢复发布每日预测,目前手头上的项目已经基本收尾,接下来恢复发布。当然,也有很多朋友一直咨询3D超级助手开发的进度,在这里统一回复下。 由于本人既精…...
