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

一、基础知识

1.1、昇腾AI全栈架构

昇腾AI全栈可以分差四个大部分:

        应用使能层面,此层面通常包含用于部署模型的硬件,例如API、SDK、部署平台,模型库等。

          AI框架层面,此层面包含用于构建模型的训练框架,例如华为的MindSpore、TensorFlow、PyTorch等。

        异构计算架构,偏底层、偏通用的计算框架,用于针对上层AI框架的调用进行加速,力求向上支持多种AI框架,并在硬件上进行加速。

        计算硬件,本层是AI计算的底座,有了强力的芯片及硬件设备,上层的加速才有实施的基础。

1.2、异构计算架构CANN

        华为公司面向计算机视觉、自然语言处理、推荐系统、类机器人等领域量身打造了基于“达芬奇(DaVinci)”架构的昇腾(Ascend)AI处理器,开启了智能之旅。为提升用户开发效率和释放晟腾AI处理器澎湃算力,同步推出针对AI场景的异构计算架构CANN(Compute Architecture for Neural Networks),CANN通过提供多层次的编程接口,以全场景、低门槛、高性能的优势,支持用户快速构建基于Ascend平台的AI应用和业务。

昇腾计算语音接口

        昇腾计算语音(Ascend Computing Language,AscendCL)接口是晟腾计算开放编程框架,是对底层晟腾计算服务接口的封装。它提供Device(设备)管理、Context(上下文)管理、Stream(流)管理、内存管理、模块加载与执行、算子加载与执行、媒体数据处理、Graph(图)管理等API库,供用户开发人工智能应用调用。

昇腾计算服务层

        本层主要提供晟腾计算库,例如神经网络(Neural Network,NN)库、线性代数计算库(Basic Linear Algebra Subprograms,BLAS)等;晟腾计算调优引擎库,例如算子调优、子图调优、梯度调优、模型压缩以及AI框架适配器。

昇腾计算编译引擎

        本层主要提供图编译器(Graph Compiler)和TBE(Tensor Boost Engine)算子开发支持。前者将用户输入中间表达(Intermediate Representation,IR)的计算图编译成NPU运行的模型。后者提供用户开发自定义算子所需的工具。

昇腾计算执行引擎

        本层负责模型和算子的执行,提供如运行时(Runtime)库(执行内存分配、模型管理、数据收发等)、图执行器(Graph Executor)、数字视觉预处理(Digital Vision Pre-Processing,DVPP)、人工智能预处理(Artificial Intelligence Pre-Processing,AIPP)、华为集合通信库(Huawei Collective Communication Library,HCCL)等功能单元。

昇腾计算基础层

        本层主要为其上各层提供基础服务,如共享虚拟内存(Shared Virtual Menmory,SVM)、设备虚拟化(Virtual Machine,VM)、主机-设备通信(Host Device Communication,HDC)等。

1.3、AscendCL的优势如下:

        高度抽象;算子编译、加载、执行的API归一,相比每个算子一个API,AscendCL大幅减少API数量,降低复杂度。

        向后兼容:AscendCL具备向后兼容,确保软件升级后,基于旧版本编译的程序依然可以在新版本上运行。

        零感知芯片:一套AscendCL接口可以实现应用代码统一,多款晟腾处理器无差异。

1.4、AscendCL的主要应用场景如下:

        开发应用:用户可以直接调用AscendCL提供的接口开发图片分类应用、目标识别应用等。

        供第三方框架调用:用户可以通过第三方框架调用AscendCL接口,以便使用晟腾AI处理器的计算呢能力。

        供第三方开发lib库:用户还可以使用AscendCL封装实现第三方lib库,以便提供晟腾AI处理器的运行管理、资源管理等能力。

二、TensorFlow模型迁移&训练

2.1、TensorFlow模型迁移详解

为什么要做模型迁移?

        目前人工智能领域内,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处理器执行训练,主要有两种方式:

        自动迁移方式。通过迁移工具对原始脚本进行AST语法树扫描,可自动分析原生的TensorFlow API在晟腾AI处理器上的支持度,并将原始的TensorFlow训练脚本自动迁移成晟腾AI处理器支持的脚本,对于无法自动迁移的API,可以参考工具输出的迁移报告,对训练脚本进行相应的适配修改。

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

2.2、TensorFlow模型自动迁移详解

功能简介

        Ascend平台提供了Tensorflow 1.15网络迁移工具,该工具适用于原生的Tensorflow训练脚本迁移场景,AI算法工程师通过该工具分析原生的TensorFlow Python API和Horovod Python API在昇腾AI处理器上的支持度情况,同时将原生的TensorFlow训练脚本自动迁移成昇腾AI处理器支持的脚本。对于无法自动迁移的API,您可以参考工具输出的迁移报告,对训练脚本进行相应的适配修改。

获取路径

        CANN软件安装完成后,迁移工具在“tfplugin安装目录/tfplugin/latest/python/site-packages/npu_bridge/convert_tf2npu/”目录下。

        您也可以从昇腾社区获取,直接下载convert_tf2npu文件夹到Linux或Windows环境上任意目录即可。

使用限制

        要求原始脚本在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网络迁移。

迁移操作步骤

1.安装依赖


pip3 install pandas

pip3 install xlrd==1.2.0

pip3 install openpyxl

pip3 install tkintertable

pip3 install google_pasta

2.训练脚本扫描和自动迁移。

该工具支持在Linux或Windows环境进行脚本迁移。

Linux环境操作步骤:

进入迁移工具所在目录,例如“tfplugin安装目录/tfplugin/latest/python/site-packages/npu_bridge/convert_tf2npu/”,执行命令可同时完成脚本扫描和自动迁移,例如:

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

Windows环境操作步骤:

python3 main_win.py

2.3、手工迁移流程

Estimator迁移要点

        Estimator API属于TensorFlow的高阶API,在2018年发布的TensorFlow 1.10版本中引入,它可以极大简化机器学习的编程过程。

使用Estimator进行训练脚本开发的一般步骤为:

        1.数据预处理,创建输入函数input_fn;

        2.模型构建,构建模型函数model_fn;

        3.运行配置,实例化Estimator,传入Runconfig类对象作为运行参数;

        4.执行训练,在Estimator上调用训练方法Estimator.train(),利用指定输入对模型进行固定步数的训练。

针对Estimator的训练脚本迁移,我们也按照以上步骤进行,以便在晟腾910处理器上训练。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值