倚天产品介绍|倚天性能优化—YCL AI计算库在resnet50上的优化

本文涉及的产品
云服务器 ECS,每月免费额度200元 3个月
云服务器ECS,u1 2核4GB 1个月
简介: Yitian710 作为平头哥第一代ARM通用芯片,在AI场景与X86相比,软件生态与推理性能都存在一定的短板,本文旨在通过倚天AI计算库的优化,打造适合ARM架构的软件平台,提升倚天性能

1. 背景介绍

   英特尔第四代至强可扩展处理器(代号Sapphire Rapids,简称SPR)上引入了全新的加速引擎AMXAdvanced Matrix Extensions),通过指令集层面的支持来显著加速深度学习算法中的Tensor计算。AMX针对广泛的硬件和软件优化,进一步增强了前一代矢量神经网络指令VNNIBF16,推出了AMX_INT8AMX_BF16指令,从一维向量计算发展到二维矩阵计算,最大限度的利用计算资源。由于神经网络训练推理涉及大量的矩阵运算,AMX的引入将大幅提高AI性能。

   2022年的云栖大会上,阿里云推出了搭载倚天710芯片的ECS服务器,受到了业界的广泛关注。该服务器CPU芯片基于ARM Neoverse N2架构,支持ARM v9 指令集,最高支持128核。业界权威性能报告指出,其并行计算能力在CPU服务器中非常抢眼,并且极具性价比,有潜力作为昂贵的GPU服务器的替代品。然而,Yitian710 作为平头哥第一代ARM通用芯片,在AI场景与X86相比,软件生态与推理性能都存在一定的短板,本文旨在通过倚天AI计算库的优化,打造适合ARM架构的软件平台,提升倚天性能。

1.1 问题

   倚天710目前主要依赖开源社区提供对AI场景的软件支持,存在以下几个问题:

1)目前主流AI软件生态对X86架构适配更好,各种推理场景性能表现更优,倚天缺乏相关的软件生态,推广依靠具体业务场景定制优化与ARM生态支持,效率低下

2)倚天SIMD位宽受限,与X86 ICLSPR相比有较大劣势,需要任务调度充分发挥倚天物理核算力优势

3ARM AI生态演进考虑不同架构兼容,迭代速度慢,且缺乏倚天微架构针对性调优,不利于充分发挥倚天在AI场景优势



1.2 策略

   YCLYiTian Compute Library)为平头哥数据中心解决方案团队开发的一款高性能AI计算库,该库基于ARM开源的ACL(ARM Compute Library)实现。ACL是一个用于机器学习和计算机视觉的高性能 C++ 库。它提供了一系列优化的算法和操作,可在 ARM CPUGPU DSP 上执行。YCLACL的基础上,针对倚天硬件架构的特性,做了深入的适配与优化,通过调度算法优化、GEMM拆分、底层算子融合、BF16精度优化等方法,实现包括CoreSupportGraphBackends等不同层次模块的性能优化,并通过oneDNN标准接口对接上层推理框架如tensorflowpytorch,实现上层计算任务不感知。经测试,集成优化版本的tensorlfowmlperf resnet50评测中性能提升超过40%,目前该版本已集成到cap2自动化测试系统。



2. YCL计算库架构

   自Tensorflow 2.5版本开始,已经有了对 oneDNN 的实验性支持,此后ARM开源社区在oneDNNbackend增加了ARM实现,来加速 AArch64 CPU 的性能如下图1所示,Tensorflow framework 将上层的计算任务分解成各个算子,调用底层实现以提升性能。Tensorflow默认调用Eigen实现各算子如GEMMIntel提供oneDNN加速库用于实现基于X86 backendkernel实现,对于arm backendoneDNN调用ACL来使用ARM向量指令以提升性能。YCL即为 arm backend替代ACL的计算库,专门针对倚天SoC架构特性做出优化。

image.png

1 YCL计算库在tensorflow中的位置

 image.png

2 YCL计算库架构

   YCL在框架架构上与ACL基本相同,如图2所示,绿色部分为倚天710软件架构,接口层实现了常用的AI算子,在使用每个算子之前通过配置(configure)接口设置输入数据、数据类型、计算模式、算子评估、权重数据packing、调度方法等,配置完成即可启动运算过程(run),该过程首先将计算任务划分成子任务,并为不同子任务分配线程并发计算,最后各线程调用计算kernel完成各自计算任务,主线程合并计算结果完成最终的计算。



3. 优化方法

本文从以下4个方面针对倚天架构做优化:

3.1 子任务划分,利用倚天710各级cache提升数据吞吐

 image.png

3 YCL中矩阵运算子任务划分

   矩阵运算(GEMM)一般为当前AI推理任务中的主要计算来源,很多加速库也是重点优化提升GEMM计算性能。当前学术上提升在CPU上提升GEMM性能的主要思路为:将A矩阵在M方向划分为宽度为Lvh的子块,将B矩阵在N方向上划分宽度为Lvw的子块,然后根据L1 cache大小确定K方向(Kc)的值,然后确定每个子块计算顺序,使用多核完成计算。



   YCL子子任务划分也采用上述方法,但是在设计子任务是考虑倚天Cache结构与物理核优势,首先根据分配的倚天core数与任务大小,确定最终分配的线程数,如果计算任务较小,则考虑少分配线程数n,可以降低线程调度产生的开销。然后根据任务大小与计算单元缓存确定子任务数,原则是划分后的子任务可以一次性存入缓存,提升数据存取速度;然后如图3所示,将矩阵AB分别划分成Akj(Lvh x kc), Bki(kc x Lvw)子矩阵,每个线程分别计算Ck=Akj x Bki ,通过调节倚天SIMD寄存器布局,降低数据重复访问,获得最优性能。

3.2 任务调度

   设计两级线程与子任务对应表,如图4所示,其中level 0子任务平均分配到各线程上执行,level 1为多余的子任务首先缓存在buffer中,等到有线程空闲时执行。该方法有三个好处,第一,子任务划分利用了多核系统缓存,子任务在单核中执行效率最高;第二,线程与任务对应,充分利用线程资源,先完成的线程继续执行level 1子任务,减少线程长尾效应影响;第三,各子任务在整体任务中数据连续存储,提升cache命中率。

3.3 底层算子融合

   在tensorflow中有大量的eltwise计算,然后结果输入激活函数的操作,该部分在独立计算,不依赖其他操作,可以在底层将eltwise计算的中间结果保存在寄存器中,然后紧接中做ACT,以eltwise(sum) + ReLU为例,可以在oneDNNYCL中将这部分功能合并,如下图4所示。

 image.png

4 底层算子融合





3.4 BF16算子计算

   倚天710采用armv9架构,指令集支持bfloat16矩阵计算,单个bfmmla指令可以计算一个2x2大小的矩阵,理论性能相比float指令可以提升4倍,下表为倚天710不同精度下指令的理论算力。因此,使用BF16指令可以在保证精度的前提下大幅提升性能。

 image.png

   YCL计算库在不改变tensoflow框架的前提下,实现了从floatbfloat的简单切换。在oneDNN层面,将卷积算子做了改造,首先将输入tensor配置为bfloat16格式然后将输入数据从float格式转换成bfloat16格式数据,改转化可能会有overhead,最终实现采用simd 汇编实现,将转换完成的数据导入oneDNN原始的memory中,并释放临时buffer



3.5 性能评估

   倚天710单个SoC128core,且都是物理核,有独立的L1L2cache,我们使用阿里云ecs.c8y.8xlarge来测试YCL计算库的性能,为了充分发挥倚天物理核算力,测试采用MLperf resnet 0ffline模式将CPU压力打到最大,测试开启BF16,具体测试命令为:

./run_local.sh tf resnet50 cpu --scenario Offline

其中g8iintel SPR实例,其tensorflow安装方式与python依赖如下(通过 pip install tensorflow==2.11.0安装)

 image.png

使能BF16方法如下:

export DNNL_VERBOSE=1

export TF_ENABLE_ONEDNN_OPTS=1

export ONEDNN_DEFAULT_FPMATH_MODE=BF16

运行benchmark,查看log,如果存在avx512_core_amx_bf16,代表使能AMX_BF16来加速矩阵运算

测试均在32c下进行,如下图5所示,使用优化后的YCL计算库resnet50性能提升45%

 image.png

5 倚天710 resnet50优化前后性能对比



4. 安装与使用方法

   目前YCL计算库已经适配了tensorflow 1.152.9两个版本,通过打patch方式支持tensorflow源码编译安装,相关的编译与集成方式可以参考 《倚天AI实践》该部分在后续文章中发出。

好啦!小弹的分享到此为止。我们更欢迎您分享您对阿里云产品的设想、对功能的建议或者各种吐槽,请扫描提交问卷并获得社区积分或精美礼品一份。https://survey.aliyun.com/apps/zhiliao/P4y44bm_8

【扫码填写上方调研问卷】

欢迎每位来到弹性计算的开发者们来反馈问题哦~

相关文章
|
20天前
|
机器学习/深度学习 人工智能 监控
AI制造流程优化
AI在制造流程优化中涉及数据收集与处理、特征工程、模型选择与训练、系统集成及员工培训。通过这些步骤,AI能改善生产线效率,实现自动化和智能化。数字孪生技术的运用允许在虚拟环境中测试和改进制造过程,提高效率和质量。企业需综合考虑技术、数据和人员,以实现制造的高效智能化。
19 3
|
21天前
|
机器学习/深度学习 人工智能 算法
构建未来:基于AI的移动应用界面优化策略
【4月更文挑战第6天】随着人工智能技术的飞速发展,其在移动应用界面设计中的应用越来越广泛。本文将探讨如何利用AI技术优化移动应用的用户界面,提高用户体验。我们将详细介绍AI在理解用户需求、预测用户行为、自动调整界面元素等方面的应用,并讨论这种技术的挑战和未来发展趋势。
12 2
|
1月前
|
人工智能 编解码 数据安全/隐私保护
才发现百度自带的AI图片助手这么好用,去水印、画质优化、AI扩图、涂抹消除等功能一应俱全!
才发现百度自带的AI图片助手这么好用,去水印、画质优化、AI扩图、涂抹消除等功能一应俱全!
199 0
|
1月前
|
人工智能 JavaScript API
互联网人的福利!『昆仑天工』4款AI产品开源!提供API对接!
互联网人的福利!『昆仑天工』4款AI产品开源!提供API对接!
181 0
|
1月前
|
人工智能 前端开发 数据挖掘
Arm 发布 Neoverse 新品:数据分析性能提升 196%,奠定未来计算及 AI 的基石
北京时间 2 月 22 日,半导体巨头 Arm 更新了 Arm® Neoverse™ 产品路线图,宣布推出两款基于全新第三代 Neoverse IP 构建的全新计算子系统(CSS):Arm Neoverse CSS V3 和 Arm Neoverse CSS N3。
|
1月前
|
存储 人工智能 弹性计算
倚天使用|倚天性能优化—YCL AI计算库在resnet50上的优化
本文介绍了x86软件迁移到Arm过程中可能遇到的弱内存序问题的解决方案,解析了弱内存序问题的根因,介绍了Hawkeyes的架构和实现原理。欢迎有需求的团队发送邮件咨询
|
机器学习/深度学习 人工智能 算法
阿里云异构计算产品家族亮相 覆盖全场景AI和高性能计算需求
本文讲的是阿里云异构计算产品家族亮相 覆盖全场景AI和高性能计算需求【IT168 云计算】计算正推动着人工智能产业更大规模的爆发。
2054 2
|
机器学习/深度学习 人工智能 算法
阿里云异构计算产品家族亮相 覆盖全场景AI和高性能计算需求
本文讲的是阿里云异构计算产品家族亮相 覆盖全场景AI和高性能计算需求,计算正推动着人工智能产业更大规模的爆发。9月12日,阿里云宣布推出全新一代异构加速平台,为人工智能产业提供多场景化的全球加速能力。这是阿里云异构计算家族首次亮相,涵盖GPU、FPGA在内等6款异构实例,可满足从图形渲染到高性能计算及人工智能等复杂应用的计算需求。
2169 0
|
机器学习/深度学习 人工智能 物联网
阿里云异构计算产品家族亮相 覆盖全场景AI和高性能计算需求
9月12日,阿里云宣布推出全新一代异构加速平台,为人工智能产业提供多场景化的全球加速能力。这是阿里云异构计算家族首次亮相,涵盖GPU、FPGA在内等6款异构实例,可满足从图形渲染到高性能计算及人工智能等复杂应用的计算需求。
1507 0