【2023 · CANN训练营第一季】昇腾AI入门课(TensorFlow)学习笔记

举报
yd_213988710 发表于 2023/04/26 14:31:29 2023/04/26
【摘要】 什么是TensorflowTensorFlow是由Google Brain团队开发的开源机器学习框架,它在短时间内成为了广泛使用的深度学习框架之一。TensorFlow的核心是用于搭建图形计算模型的计算图,它提供了许多高级方法和工具用于优化和调试神经网络模型。TensorFlow可以部署在不同的平台和设备上,支持CPU和GPU等不同的计算硬件,并提供了为分布式计算而设计的分布式训练方法。由于...

什么是Tensorflow

TensorFlow是由Google Brain团队开发的开源机器学习框架,它在短时间内成为了广泛使用的深度学习框架之一。TensorFlow的核心是用于搭建图形计算模型的计算图,它提供了许多高级方法和工具用于优化和调试神经网络模型。TensorFlow可以部署在不同的平台和设备上,支持CPU和GPU等不同的计算硬件,并提供了为分布式计算而设计的分布式训练方法。由于其易于使用、高效和可扩展的特性,TensorFlow已经成为了构建深度学习应用的核心技术之一。


基于CANN的模型开发流程

cke_5073.png

为什么要做模型迁移 目前人工智能领域内,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/”目录下找到,也可以直接从昇腾社区获取。

cke_9481.png

现阶段该工具存在一些对原始训练脚本的限制:

  1. 要求原始脚本在GPU/CPU上跑通,精度收敛。

  2. 要求原始脚本仅使用TensorFlow 1.15官方API和Horovod官方API,若用户脚本使用了其他第三方API,当前工具暂不支持迁移。例如:

    1. 不支持原生Keras API,但由于Tensorflow官方API中包括了Tensorflow的Keras API,因此支持Tensorflow的Keras API。
    2. 不支持CuPy API,即便原始脚本能在GPU上运行成功,但不能保证在昇腾AI处理器运行成功。
  3. 原始脚本中的TensorFlow模块和Horovod模块最好按照如下方式引用,否则工具迁移后,无法生成准确的迁移报告(但并不影响脚本迁移)。

    
    import tensorflow as tf
    import tensorflow.compat.v1 as tf
    import horovod.tensorflow as hvd
    复制
  4. 当前版本不支持float64/complex64/complex128/DT_VARIANT数据类型。

  5. 当前不支持tf.keras和原生Keras的Loss Scale功能迁移。

  6. 当前不支持动态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环境下运行后工具界面如图

cke_14827.png

在弹出的窗口根据界面提示进行操作。

  1. 根据界面提示设置相关输入。
  2. 点击“开始分析”,能看到分析结果,并在指定的路径下生成迁移后的脚本,在指定的“输出分析报告路径”下生成分析报告。
  3. 点击“重新开始分析”,则返回选择路径窗口,可以重新指定输入脚本,再次分析。
  4. 点击“退出”,则退出Tensorflow 1.15网络迁移工具。

迁移过程中,打印如下信息,表明正在扫描相关文件进行脚本迁移

cke_22108.png

迁移结束后,生成迁移后的脚本,以及迁移报告。

  • 如果没有生成failed_report.txt,一般迁移后的模型即可直接在昇腾AI处理器执行训练,用户可尝试执行训练,如果训练失败,可详细分析迁移报告,同时酌情修改训练脚本再次训练,如果仍然训练失败,请到昇腾开源社区求助。
  • 如果生成了failed_report.txt,请优先根据报错修改训练脚本,再次执行训练。

手工迁移

迁移步骤

cke_35430.png

手工迁移方式主要是通过TensorFlow中的API实现的,手工迁移又可以分为Estimator迁移、sess.run迁移和Keras迁移三种。

三种迁移方式流程大致相同:

  1. 数据预处理
  2. 模型构建
  3. 运行配置
  4. 执行训练

详细迁移流程可以按官方文档中的步骤进行


ModelArts

ModelArts是华为云提供的面向开发者的一站式AI开发平台,集成了昇腾AI处理器资源池,用户可以在该平台下体验如何执行TensorFlow训练任务。

使用ModelArts训练过程

训练开始前,需要先把数据集和训练脚本上传到华为云上的存储服务(Object Storage Service,简称OBS)中,OBS是一个基于对象的海量存储服务,为客户提供海量、安全、高可靠、低成本的数据存储能力;训练结束后,训练结果可以回传到OBS供用户下载。大致过程为:

ModelArts训练流程

cke_32916.png

这里仅介绍和简单了解ModelArts的训练过程,如需了解详细过程可在到官方文档中查看

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。