【CANN训练营0基础赢满分秘籍】昇腾入门课Tensorflow

CANN是华为的AI异构计算架构,用于在昇腾芯片上加速AI应用。它包括算子库、编译器和执行引擎等组件。文章详细介绍了如何将TensorFlow模型迁移到NPU,包括自动迁移和手动迁移的步骤,以及Estimator和Keras的手动迁移方法。
摘要由CSDN通过智能技术生成

1 异构计算架构CANN

1架构.png

  • Mindspore是华为自研开源的计算框架
    CANN架构包括算子库、张良编译器、计算执行引擎、计算基础服务器等
    1开发接口.png

1.1 AI异构计算架构CANN的定义

CANN是华为针对A场景推出的异构计算架构。通过提供多层次的编程接口,支持用户快速构建基于Ascend平台的AI应用和业务。
包含:

  • 统一APP编程语言:提供一套标准的AscendCL编程接口,对应用程序开发者屏蔽底员多种芯片差异,提升用户APP编程易用性
  • 统一网络构图接口:提供了松的界腾计算AIR。支持多框架,支持用户在昇腾芯片上快速部署神经网络业务
  • 高性能计算引擎以及算子库:通过高性能编译引擎/执行引擎/调优引擎和预鲨高性能算子库,支撑客户快速部窑神经网络业务、降低部署成本并最大程度发挥昇腾计算能力
  • 基础服务:驱动、虚报化、媒休、集合通信等能力

TF Adapter,是TensodFlow匪架与CANN软件找之间的活配层,帮勐TF训塔胖本慢康地迁移到NPU上

1.2 CANN AI模型开发流程

13模型开发流程.png

1.3 整体流程

  • 迁移TF脚本到npu上的目的是利用npu的高性能计算能力,提升TF模型的训练和推理效率.
  • 迁移TF脚本到npu上的前提是安装了Ascend Al Software Stack(ALS),包括Ascend Base Software(ABS)。提升工具包、升级运行时等组件。
  • 迁移TF脚本到npu上的步骤主要分为以下几个方面:
  • 准备环境:配置环境变量,安装依赖包,检查硬件连接等.
  • 调整代码:根据npu的特性和限制,修改tf脚本中睽数据类型、数据格式、运算符、优化器等内容.

2 tf模型开发第一步:环境搭建

2.1 申请环境

选择华北-北京四、按需计费、随机分配、X86、AI加速型、ai1s
21.png

2.2 用户登录

密码是: HwHiAiUser
22.png

3 手动与自动迁移

总体流程:
3.png

3.1 组件交互流程

31组件交互流程.png

  • 用户执行训练代码后,TensorFlow前端生成训练模型并初始化权重
  • TensorFlow 前端通过TF Adapter调用GE初始化接口,完成设备打开、计算引擎初始化等操作
  • TensorFlow 前端将训练模型转换为IR格式,并启动模型编译和执行
  • GE完成图优化、算子拆分、子图编译等操作
  • GE调用Runtime接口分配运行资源,并交由Runtime管理

3.2 自动迁移

通过迁移工具对原始脚本进行AST语法树扫描,可自动分析原生的TensorFlow API在异腾Al处理器上的支持度,并将原始的TensorFlow训练脚本自动迁移成异腾AI处理器支持的脚本,对于无法自动迁移的APl,可以参考工具输出的迁移报告,对训练脚本进行相应的适配修改。
32自动迁移.png
【使用限制】
1.要求原始脚本在GPU/CPU上跑通,精度收敛。
2.要求原始脚本仅使用TensorFlow 1.15官方APl和Horovod官方API,若用户
脚本使用了其他第三方API,当前工具暂不支持迁移。
例如:

  • 不支持原生Keras APl,但由于Tensorflow官方API中包括了
    Tensorflow的Keras API,因此支持Tensorflow的Keras APl。
  • 不支持CuPy APl,即便原始脚本能在GPU上遗行成功,但不能保证在

原始脚本中的TensorFlow模块和Horovod模块最好按照如下方式引用,否则工具迁移后,无法生成准确的迁移报告(但并不影响脚本迁移)。
!!!可记下来

import tensorflow as tf
import tensorflow.compatv1 as tf
import horovod.tensorflow as hvd
  • 当前版本不支持float64/complex64/complex128/DT_VARIANT数据类型。
  • 当前不支持tf.keras和原生Keras的Loss Scale功能迁移。
  • 当前不支持动态shape网络迁移。
    具体步骤:

3.2.1 安装依赖

pip3 install pandas
pip3 install xlrd==1.2.0
pip3 install openpyxl
pip3 install tkintertable
pip3 install google_pasta

3.2.2 训练脚本扫描和自动迁移

该工具支持在Linux或Windows环境进行脚本迁移。
Linux环境操作步骤;
进入迁移工具所在目录,例如“tfplugin安装目录/tfplugin/latest/python/site-
packages/npu_bridge/convert_tf2npur”,执行命令可同时完成脚本扫描和自动迁移,
例如:

python3 main.py -i /root/models/official/resnet

https://gitee.com/ascend/tensorflow/tree/master/convert_tf2npu

3.3手动迁移

算法工程师需要人工分析TensorFlow训练脚本中的APl支持度情况,并且参照文档逐一手工修改不支持的API,以便在异腾Al处理器上训练,该种方式较为复杂,我们建议大家优先使用自动迁移方式。

手工迁移点包含:
1、导入NPU库文件
2、将部分TensorFlow接口迁移成NPU接位
3、通过配置关闭TensorFlow与NPU冲突的功能
4、配置NPU相关参数

3.3.1 手工迁移Estimator

使用Estimator进行训练脚本开发的流程为:

  • 数据预处理,创建输入函数input_fn。模型构建,构建模型函数model_fn。
  • 运行配置,实例化Estimator,并传入Runconfig类对象作为运行参数。
  • 执行训练,在Estimator上调用训练方法Estimator.train何,利用指定输入对模型进行固定步数的训练。

数据预处理
1、头文件增加

from npu_bridge.npu_init import *

2、数据预处理

dataset = dataset.batch(batch_size,drop_remainder=True)
assert num_written_lines ==num_actual_predict_examples

3、如果存在tf.nn.dropout,建议修改为

layers = npu_ops.dropout()

4、如果存在tf.layers.dropout/tf.layers.Dropout/tf.keras.layers.Dropout/tf.keras.layers.SpatialDropout1D/tf.keras.layers.SpatialDropout2D/tf.keras.layers.SpatialDropout3D,建议增加头文件引用:

from npu_bridge.estimator.npu import npu_convert_dropout

5、对于原始网络中的gelu,建议替换为CANN对应的API实现,以获得更优性能。

layers = npu_unary_ops.gelu(x)

6、

mnist_classifier=NPUEstimator(
model_fn=cnn_model_fn,
config=npu_config,
model_dir="/tmp/mnist_convnet_model"
)

3.3.2 手工迁移Estimator

  • CPU上
#构造迭代器
iterator=lterator.from_structure(train_dataset.output_types,train_dataset.output_shapes)
#取batch数据
next_batch=iterator.get_next0
  • NPU上
#构造迭代器
iterator=lterator.from_structure(train_dataset.output_types,train_dataset.output_shapes)
#取batch数据
next_batch=iterator.get_next0
#迭代器初始化
training_init_op=iterator.make_initializer(train_dataset)

3.3.3 手工迁移keras

import tensorflow as tf
import tensorflow.python.keras as keras
from tensorflow.python.keras import backend as Kfrom npu_bridge.npu_init import *

引入相关头文件

import tensorflow as tf
import tensorflow.python.keras as keras
from tensorflow.python.keras import backend as Kfrom npu_bridge.npu_init import *

4 案例实操

4.1 安装依赖

4.1.png

4.2 下载迁移软件包

4.2.png

4.3 脚本测试

4.3.png

4.4 迁移相关信息

4.4.png

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

华为账号hw_Zixin 小鱼儿梦想+

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值