飞桨x昇腾生态适配方案:00_整体方案介绍

简介: 本文详细介绍PaddlePaddle与NPU的适配工作,涵盖训练与推理支持、性能优化及离线推理方案。PaddleCustomDevice作为适配层,支持主流模型(详见飞桨-昇腾模型列表),多数性能媲美V100,部分调优模型接近0.8*A800。硬件适配主要针对A2芯片,A1兼容但310系列建议离线推理。提供常用模型仓链接及整体方案导览,包括环境准备、算子适配、性能调优和Paddle转ONNX/OM等内容。

前言

  • 本文重点介绍Paddle与NPU的适配工作,PaddlePaddle是一个深度学习框架,类似于pytorch;PaddleCustomDeviece是适配层代码,类似于pytorch adapter;模型侧代码根据领域分为PaddleNLP、PaddleMix、PaddleClas、PaddleOCR等。
  • 如果需要运行在线的训练或者推理,可以直接参考模型仓的README,并更改deviece为NPU即可。当前已经支持了大部分主流模型且在持续增加中,具体的模型列表可参照飞桨-昇腾模型支持列表,大部分模型的性能基本持平V100,少部分专项调优模型可以达到0.8*A800(主要是大模型,多模态)。
  • 如果在线推理性能较差且只需要推理的场景,统一建议使用离线场景,Paddle2ONNX工具转化为ONNX,并使用atc转换为OM,具体可参照Paddle转OM以及离线推理章节内容。

    硬件适配说明

  • 当前的适配工作主要针对A2芯片,以下所有内容如果没有特殊说明都只针对A2芯片;
  • A1芯片在大部分情况下没有问题,且使用方式与A2相同,如遇到类似项目可自行使用相同方式进行验证,遇到问题单点支撑;
  • 310系列芯片没有进行过适配,建议直接走离线推理路径。

    常用Paddle模型仓

  • NLP代码仓PaddleNLP:https://github.com/PaddlePaddle/PaddleNLP
  • 多模态代码仓PaddleMIX:https://github.com/PaddlePaddle/PaddleMIX
  • 小模型总体仓库PaddleX:https://github.com/PaddlePaddle/PaddleX
  • 其余仓库可查看Paddle主页面:https://github.com/PaddlePaddle

整体方案导览

目录
相关文章
|
机器学习/深度学习 Docker 容器
飞桨x昇腾生态适配方案:01_基础环境准备
本指南详细介绍在ARM环境中准备CANN环境、安装Paddle深度学习框架及PaddleCustomDevice的过程。首先下载并加载CANN镜像,启动Docker容器;接着通过日构建包或源码编译安装PaddlePaddle和PaddleCustomDevice;可选更新CANN版本时需注意环境变量配置与路径设置。最后提供基础功能检查方法,包括硬件后端、版本验证及框架健康检查,确保环境搭建成功。
1102 0
|
API Python
飞桨x昇腾生态适配方案:13_API离线推理
ais_bench 提供了基于昇腾硬件的 Python API,用于离线模型(.om模型)推理。支持静态与动态API场景,如单个或多个OM模型推理。通过 `InferSession` 类加载模型并执行推理,可灵活处理输入输出形状转换。示例代码涵盖图片读取、形状调整、多模型串联推理及资源释放等操作,满足多样化推理需求。
909 26
|
存储 算法
飞桨x昇腾生态适配方案:09_Paddle转ONNX
本节主要介绍如何将 PP-OCRv4 模型转化为 ONNX 模型,包括环境准备、模型下载、训练模型转 inference 模型及最终转为 ONNX 格式的过程。首先需安装 Paddle2ONNX 和 ONNXRuntime,接着下载并解压训练模型。通过 `export_model.py` 脚本将训练模型转化为 inference 模型,生成包含结构和参数的文件。最后使用 Paddle2ONNX 工具完成到 ONNX 格式的转换,并可选地使用 onnxslim 进行模型优化。各步骤均提供详细命令与参数说明,便于实际操作与部署。
1094 9
|
存储 文字识别 文件存储
飞桨x昇腾生态适配方案:03_模型训练迁移
本案例以PaddleOCRv4模型为例,详细介绍了将模型迁移到NPU的完整流程。迁移过程中需确保模型功能在新硬件上无误,重点关注偶发性错误及长时间运行时可能出现的问题,并通过日志辅助定位问题。文档涵盖环境搭建、数据集准备、模型配置、训练启动及常见问题排查等内容。例如,通过设置环境变量排查缺失算子,处理Paddle版本兼容性问题,以及解决进程残留等。适合希望将OCR模型部署到NPU的开发者参考。
641 0
|
JSON 数据格式 AI芯片
飞桨x昇腾生态适配方案:14_loop算子缺失(上):ONNX模型拆分
本文针对NPU不支持LOOP算子的问题,提出一种解决方案:将ONNX模型拆分为含LOOP算子和不含LOOP算子的子图,单独推理LOOP部分。通过构造包含LOOP算子的ONNX模型,将其转换为JSON格式提取子图,并对子图进行修改(如添加输入节点、删除无关节点)。最后,将JSON转回ONNX格式,完成模型切分与优化。此方法适用于关键路径上的LOOP算子,可有效解决离线推理中的兼容性问题。
905 26
|
Python
飞桨x昇腾生态适配方案:15_loop算子缺失(下):for循环替换loop
本章节基于上一内容,将ONNX模型拆分为loop算子部分与非loop算子部分,分别转换为OM模型。通过使用for循环替换loop算子的计算逻辑,构造子图执行流程,并编写OM模型推理脚本进行验证。同时,编写ONNX模型推理脚本对比两者推理结果,确保一致性。实验结果表明,拆分后的OM模型与原始ONNX模型推理结果一致,证明方案可行。
543 27
|
文字识别 算法 API
飞桨x昇腾生态适配方案:04_模型精度对齐
本文详细介绍了模型在不同硬件(如GPU与NPU)间迁移时的精度对齐方法,包括前向和反向对齐的具体步骤。前向对齐通过模块化对比计算结果(如平均值、最大最小值等),确保误差在合理范围内;反向对齐则聚焦于梯度差异,利用二分法定位问题算子。同时,文章结合PPHGNet_small和MultiHead等具体模块代码,说明了如何打印输出并分析中间结果。此外,还探讨了私有格式、梯度异常及特殊shape等可能影响精度的因素,并提出相应解决策略。整体流程清晰,为跨硬件模型迁移提供了实用指导。
743 10
|
数据采集 Web App开发 数据挖掘
飞桨x昇腾生态适配方案:07_性能数据分析
本文介绍了性能调优的全流程,包括分析、定位与优化。通过 profiling 工具采集算子级性能数据,定位计算与调度通信瓶颈。针对计算时间过长问题,可通过升级算子或提交工单解决;调度优化则关注重复编译,关闭在线编译或使用 aclnn 算子可提升效率。数据采集使用 paddlepaddle 的 profiler 工具,结合 msprof 解析生成的性能数据,重点分析 op_statistic_*.csv 和 op_summary_*.csv 文件,通过关键字段(如 Ratio、Total Time、Task Duration 和 Task Wait Time)量化性能瓶颈并实施优化策略。
475 10
|
编解码 人工智能 API
飞桨x昇腾生态适配方案:12_动态OM推理
本文介绍了基于Ascend AI平台的OM模型动态推理方法,包括动态BatchSize、动态分辨率、动态维度及动态Shape四种场景,支持固定模式与自动设置模式。通过`ais_bench`工具实现推理,提供示例命令及输出结果说明,并解决常见问题(如环境变量未设置、输入与模型不匹配等)。此外,还提供了API推理指南及参考链接,帮助用户深入了解ONNX离线推理流程、性能优化案例及工具使用方法。
1388 0
|
缓存 AI芯片
飞桨x昇腾生态适配方案:02_常用环境变量
本节介绍训练前建议设置的常用环境变量,涵盖NPU私有格式、在线编译、性能优化参数(如`aclnn_scale`和`aclnn_split`)、算子黑名单配置、NPU卡号指定、Paddle内存分配策略及日志设置等内容。通过合理配置这些变量,可有效提升训练性能并解决潜在问题。例如,关闭`FLAGS_npu_storage_format`以禁用NPU私有格式,或调整`ASCEND_MAX_OP_CACHE_SIZE`优化Kernel缓存大小。同时,CANN和Paddle的日志环境变量也提供了调试支持。
621 0