【2023 · CANN训练营第一季】昇腾AI入门课(TensorFlow)学习笔记
什么是Tensorflow
TensorFlow是由Google Brain团队开发的开源机器学习框架,它在短时间内成为了广泛使用的深度学习框架之一。TensorFlow的核心是用于搭建图形计算模型的计算图,它提供了许多高级方法和工具用于优化和调试神经网络模型。TensorFlow可以部署在不同的平台和设备上,支持CPU和GPU等不同的计算硬件,并提供了为分布式计算而设计的分布式训练方法。由于其易于使用、高效和可扩展的特性,TensorFlow已经成为了构建深度学习应用的核心技术之一。
基于CANN的模型开发流程
为什么要做模型迁移 目前人工智能领域内,AI算法模型搭建方面的技艺已经是炉火纯青,市面上用于AI模型搭建的深度学习框架,处理华为开源的昇思MindSpore,还有Google的TensorFlow、Facebook的Pytorch、Caffe等。 除了昇思MindSpore外,TensorFlow等其他深度学习框架下的模型并不能直接在晟腾910 AI处理器上训练,为了使其充分利用晟腾910 AI处理器的澎湃算力来提升训练性能,我们需要借助异构计算架构CANN的Plugin适配层转换,使转换后的模型能够高效运行在晟腾 910 AI处理器上。 目前,CANN已经能够支持多种主流AI框架,包括昇思MindSpore、TensorFlow、PyTorch、飞桨、ONNX等,并且开发者只需要非常少的改动,即可快速搞定算法一直,大大减少切换平台的代价。
两种模型迁移方式
将TensorFlow网络模型迁移到晟腾AI处理器执行训练,主要有两种
自动迁移
算法工程师通过迁移工具,可自动分析出原生的TensorFlow Python API和Horovod Python API在昇腾AI处理器上的支持度情况,同时将原生的TensorFlow训练脚本自动迁移成昇腾AI处理器支持的脚本,对于无法自动迁移的API,可以参考工具输出的迁移报告,对训练脚本进行相应的适配修改。
手工迁移
算法工程师通过自行修改TensorFlow训练脚本,以支持在昇腾AI处理器上执行训练,该种方式较为复杂,建议优先使用自动迁移方式。
在实际操作过程中,具体选择哪种方式还需要根据实际情况进行考虑和权衡。
自动迁移
自动迁移主要是通过Ascend平台提供了的Tensorflow 1.15网络迁移工具来实现的,可以在安装CANN软件后在安装目录/tfplugin/latest/python/site-packages/npu_bridge/convert_tf2npu/”目录下找到,也可以直接从昇腾社区获取。
现阶段该工具存在一些对原始训练脚本的限制:
要求原始脚本在GPU/CPU上跑通,精度收敛。
要求原始脚本仅使用TensorFlow 1.15官方API和Horovod官方API,若用户脚本使用了其他第三方API,当前工具暂不支持迁移。例如:
- 不支持原生Keras API,但由于Tensorflow官方API中包括了Tensorflow的Keras API,因此支持Tensorflow的Keras API。
- 不支持CuPy API,即便原始脚本能在GPU上运行成功,但不能保证在昇腾AI处理器运行成功。
原始脚本中的TensorFlow模块和Horovod模块最好按照如下方式引用,否则工具迁移后,无法生成准确的迁移报告(但并不影响脚本迁移)。
import tensorflow as tf import tensorflow.compat.v1 as tf import horovod.tensorflow as hvd 复制
当前版本不支持float64/complex64/complex128/DT_VARIANT数据类型。
当前不支持tf.keras和原生Keras的Loss Scale功能迁移。
当前不支持动态shape网络迁移。
迁移操作步骤
这里以TensorFlow 1.15为例
安装依赖
pip3 install pandas
pip3 install xlrd==1.2.0
pip3 install openpyxl
pip3 install tkintertable
pip3 install google_pasta
复制
训练脚本扫描和自动迁移
迁移工具支持在Linux或Windows环境进行使用
Linux环境操作步骤:
进入迁移工具所在目录,例如“tfplugin安装目录/tfplugin/latest/python/site-packages/npu_bridge/convert_tf2npu/”,执行命令可同时完成脚本扫描和自动迁移,如:
python3 main.py -i /root/models/official/resnet
参数名 | 参数说明 | 可选/必选 |
-i | 被迁移的原始脚本路径,当前该路径仅支持配置为文件夹,不支持单个文件。说明: • 工具仅对-i参数指定的文件夹下的.py文件进行扫描和迁移。 • 如果用户原始脚本跨目录存放,则建议放到一个目录执行迁移命令,或者在对应目录下依次执行迁移命令。 | 必选 |
-o | 指定迁移后的脚本路径,该路径不能为原始脚本路径的子目录。 该参数可选,如果不指定,默认生成在当前路径下,例如output_npu_20210401150929。 | 可选 |
-r | 指定生成的迁移报告路径,该路径不能为原始脚本路径的子目录。 该参数可选,如果不指定,默认生成在当前路径下,例如report_npu_20210401150929。 | 可选 |
-m | Python执行入口文件。 如果原始脚本使用了tf.keras/hvd接口,且脚本中没有main函数,由于迁移工具无法识别入口函数,因此无法进行NPU资源初始化,以及NPU训练相关配置。 对于以上场景,需要通过-m参数指定Python执行的入口文件,以便工具可以将用户脚本进行彻底迁移,保证后续训练的顺利执行。 配置示例:-m /root/models/xxx.py | 可选 |
-d | 如果原始脚本支持分布式训练,需要指定原始脚本使用的分布式策略,便于工具对分布式脚本进行自动迁移。取值: • tf_strategy:表示原始脚本使用tf.distribute.Strategy分布式策略 • horovod:表示原始脚本使用horovod分布式策略 目前session run分布式脚本无法彻底进行自动迁移,如需支持请参考Session run脚本支持分布式训练。 | 分布式必选 |
Windows环境操作步骤:
python3 main_win.py
复制
Win10环境下运行后工具界面如图
在弹出的窗口根据界面提示进行操作。
- 根据界面提示设置相关输入。
- 点击“开始分析”,能看到分析结果,并在指定的路径下生成迁移后的脚本,在指定的“输出分析报告路径”下生成分析报告。
- 点击“重新开始分析”,则返回选择路径窗口,可以重新指定输入脚本,再次分析。
- 点击“退出”,则退出Tensorflow 1.15网络迁移工具。
迁移过程中,打印如下信息,表明正在扫描相关文件进行脚本迁移
迁移结束后,生成迁移后的脚本,以及迁移报告。
- 如果没有生成failed_report.txt,一般迁移后的模型即可直接在昇腾AI处理器执行训练,用户可尝试执行训练,如果训练失败,可详细分析迁移报告,同时酌情修改训练脚本再次训练,如果仍然训练失败,请到昇腾开源社区求助。
- 如果生成了failed_report.txt,请优先根据报错修改训练脚本,再次执行训练。
手工迁移
迁移步骤
手工迁移方式主要是通过TensorFlow中的API实现的,手工迁移又可以分为Estimator迁移、sess.run迁移和Keras迁移三种。
三种迁移方式流程大致相同:
- 数据预处理
- 模型构建
- 运行配置
- 执行训练
详细迁移流程可以按官方文档中的步骤进行
ModelArts
ModelArts是华为云提供的面向开发者的一站式AI开发平台,集成了昇腾AI处理器资源池,用户可以在该平台下体验如何执行TensorFlow训练任务。
使用ModelArts训练过程
训练开始前,需要先把数据集和训练脚本上传到华为云上的存储服务(Object Storage Service,简称OBS)中,OBS是一个基于对象的海量存储服务,为客户提供海量、安全、高可靠、低成本的数据存储能力;训练结束后,训练结果可以回传到OBS供用户下载。大致过程为:
ModelArts训练流程
这里仅介绍和简单了解ModelArts的训练过程,如需了解详细过程可在到官方文档中查看
- 点赞
- 收藏
- 关注作者
评论(0)