基于华为自研NPU Ascend 910的TensorFlow 1.x训练脚本迁移和使能混合精度记录

简介

基于 TesorFlow 1.x 以 Sess.run 形式搭建入门级——手写数字分类网络,并迁移到 华为自研NPU Ascend 910,同时使能混合精度。

硬件介绍

华为自研 NPU Ascend 910,即昇腾 910 AI 处理器(简称NPU),根据官方介绍,是在2019年发布的人工智能(AI)专用的神经网络处理器,其算力高达256T,最新款算力高达310T,是业界主流芯片算力的2倍。当前业界大多数训练脚本基于 TensorFlow 的 Python API 开发,默认运行在 CPU/GPU/TPU 上,为了使其能够利用昇腾910 AI处理器的澎湃算力执行训练,提升训练性能,需要对训练网络脚本进行简单的迁移适配工作。当前昇腾910 AI处理器上支持 TensorFlow 1.15 的三种 API 开发的训练脚本迁移:分别是Estimator,Sess.run,Keras。 这里以一个Sess.run的手写数字分类网络为例,介绍如何迁移TensorFlow 1.15训练脚本,以支持NPU训练。

同时,华为还推出了自研 AI 计算框架 MindSpore,充分释放 Ascend 910 的澎湃算力,构建全栈全场景 AI 解决方案,有兴趣的同学可以试试。此外,还有Ascend 310,是一款高能效、灵活可编程的人工智能处理器,在典型配置下可以输出 16TOPS@INT8, 8TOPS@FP16,功耗仅为8W。采用自研华为达芬奇架构,集成丰富的计算单元, 提高 AI 计算完备度和效率,进而扩展该芯片的适用性。全 AI 业务流程加速,大幅提高AI全系统的性能,有效降低部署成本。

搭建网络

这里,我们使用华为云 ModelArts 提供的免费资源:Ascend:1*Ascend 910 规格。

下载训练数据集

直接执行以下命令下载手写数字数据集,这个数据集非常经典,可以很方便地下载到。

!wget -N -P /home/ma-user/work/Data https://modelarts-train-ae.obs.cn-north-4.myhuaweicloud.com/train/Data/t10k-images.idx3-ubyte
!wget -N -P /home/ma-user/work/Data https://modelarts-train-ae.obs.cn-north-4.myhuaweicloud.com/train/Data/t10k-labels.idx1-ubyte
!wget -N -P /home/ma-user/work/Data https://modelarts-train-ae.obs.cn-north-4.myhuaweicloud.com/train/Data/train-labels.idx1-ubyte
!wget -N -P /home/ma-user/work/Data https://modelarts-train-ae.obs.cn-north-4.myhuaweicloud.com/train/Data/train-images.idx3-ubyte

image.png

导入库文件

要使基于 TensorFlow 开发的训练脚本在昇腾910 AI处理器上训练,需要借助 Tensorflow 框架适配插件(即 TF Adapter),TF Adapter 中提供了适配 Tensorflow 框架的用户 Python 接口,用于 CANN 软件与 TensorFlow 框架对接。因此在训练之前,需要在训练代码中增加:

from npu_bridge.npu_init import *

导入相关库文件。具体代码:

import tensorflow as tf
import numpy as np
import struct
import os
import time 
from npu_bridge.npu_init import *

处理MNIST数据集

此部分代码应该很常见了,和在 GPU 或在 CPU 上运行基本一致,除为了特定需求或性能优化外,一般无需改造。

首先是加载数据集,原始数据为了节省保存空间,也为了加载的快速,一般保存为二进制文件。


                
### 华为 Ascend NPU 架构特点 #### 特点分析 华为Ascend NPU采用达芬奇架构设计,该架构具备高度集成化的特性,不仅支持多种类型的AI模型加速,而且针对不同应用场景进行了优化。NPU硬件架构分为SOC架构下的Ascend 3XX系列Ascend 9XX系列[^1]。 - **强大的并行计算能力**:Ascend NPU内部拥有大量用于矩阵运算的专用处理单元,这些单元能够显著提升深度学习算法中的关键操作效率,如卷积、激活函数等。 - **高效的存储层次结构**:为了减少内存访问延迟以及带宽消耗,Ascend NPU采用了多级缓存机制来提高数据读取速度,并通过片上共享内存实现快速的数据交换。 - **灵活可扩展的设计理念**:无论是小型嵌入式设备还是大型数据中心服务器,Ascend系列产品都能满足其需求;特别是面向云端服务时,Ascend 9XX提供了更加强劲的性能表现支持更多样化的工作负载[^2]。 ```python # Python伪代码展示如何利用Ascend NPU进行简单的张量运算 import numpy as np def tensor_operation(a, b): result = a @ b.T # 使用矩阵乘法作为示例 return result a = np.random.rand(1024, 512).astype(np.float16) b = np.random.rand(1024, 512).astype(np.float16) result_tensor = tensor_operation(a, b) print(result_tensor.shape) ``` ### 应用场景探讨 凭借上述技术优势,Ascend NPU广泛应用于以下几个领域: - **计算机视觉**:包括但不限于物体检测、人脸识别、视频监控等方面,在这类任务中往往涉及到复杂的特征提取过程,而Ascend NPU正好擅长于此; - **自然语言处理**:从机器翻译到情感分析等一系列文本相关工作都可以借助于Ascend的强大算力完成更加精准的任务解析; - **自动驾驶辅助系统**:实时感知周围环境变化并对车辆行驶状态做出迅速反应是无人驾驶汽车的关键所在,此时就需要依赖高性能低延时的Ascend芯片组来进行决策判断。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值