飞桨框架v2.3一键开启全自动性能优化,媲美专家级优化效果

2022年5月,飞桨框架2.3版本正式发布,创新性地提出了业界首个全流程硬件感知的性能自动调优解决方案,支持“一键开启”的极简操作方式,使开发者无需对模型代码进行任何改动,就可以充分发挥框架和硬件的极致性能。大量模型实验表明,自动调优可达到持平甚至超越经验丰富的性能优化专家手工调整的效果,解决了开发者性能优化费时费力的问题。

针对开发者在性能优化方面的痛点问题,飞桨框架2.3版本依据模型整体性能关键点推出了业界首个全流程自动调优方案,在训练时框架可根据不同模型针对不同硬件自动调整运行配置、选择最优算子内核(Kernel)等,使模型获得最佳性能,其效果可以与经验丰富的性能优化专家持平,很好地解决了在各种硬件平台针对不同任务的模型手工调优难的问题。

模型训练主要性能瓶颈分析

I/O瓶颈:

CPU瓶颈

GPU瓶颈

很多框架都提供了多进程数据读取的功能,但进程数的设置完全依赖用户经验,设置不当反而还会导致性能变差

尤其在使用混合精度训练时,需要使Tensor的布局和大小等设置满足硬件限制,目前需要开发人员手工调整

大多数框架基本都会用cuDNN、cuBLAS等高性能加速库,但是在各种硬件、各种尺寸和数据类型的场景下,单一加速库也难以保障性能保持最优,不同场景下可能需要使用不同的算子实现,这也需要开发者有足够的经验以及分析能力才能确认

一些模型计算开销并不大,这种场景下框架执行调度的开销会对模型性能产生明显影响

多层次性能自动调优技术

针对不同硬件环境下默认的DataLoader参数配置无法发挥硬件最优性能的问题,在训练开始前,飞桨根据模型的输入数据、训练的硬件对DataLoader参数自动搜索,在训练过程中,使用调优后的配置读取数据。

针对各种数据类型、输入尺寸和配置参数下,单一的算子内核难以保证在所有场景下达到最佳性能的问题,飞桨引入调优区间的概念,将整个训练过程分为观察阶段、调优阶段、应用阶段。观察阶段,使用默认实现便于用户调试;调优阶段,使用穷举搜索法选择代价最小的Kernel并进行缓存;应用阶段,依据算子配置从缓存中获取算法,未命中则使用默认实现。基于该功能,模型在输入尺寸固定或动态变化的场景下均可通过算法搜索获得性能提升。

数据读取参数自动调优

计算机视觉类的任务由于图像数据的读取和预处理开销较高,如果DataLoader未启用多进程异步数据读取,则非常容易出现I/O瓶颈。以目标检测的JDE模型为例,通过性能分析我们发现模型的数据读取开销占比高达51.71%,使用自动调优功能后,模型的数据读取降低至0.56%,同时吞吐量从原始的9.14samples/s提升到13.60samples/s,性能提升了49%。

数据布局(Layout)自动调优

例如Conv,这类算子会在输入不是最佳数据布局时,将输入转换为最佳数据布局:

例如Flatten,由于计算过程涉及到张量维度配置,其功能会受数据布局影响。根据输入的数据布局,可以对start和stop的axis做调整达到等效的结果,而在无法通过调整算子参数达到等效时,则需要将输入转换回原始的数据布局进行计算:

在自动调优的过程中,飞桨会引入最小的转换代价使模型在最佳数据布局下运行,换取更大的性能收益。使用V100GPU进行ResNet50的混合精度训练,在模型默认数据布局为NCHW的情况下,开启自动调优后吞吐量提升了26.8%,与手工调优性能持平。

多版本算子内核自动选择

在实现方案上,算子内核自动选择功能由观察阶段、优化阶段、执行阶段组成,各阶段的主要功能如下:

观察阶段

优化阶段

框架自动采用穷举计算模式,针对当前算子的输入调用全部可用算法计算,记录并比较各算法的性能,从中选出最高效算法后,利用Cache机制将当前计算场景与被选中算法进行绑定,保证当前计算场景在后续复现时,算子内可以立即查询Cache并执行最高性能算法。

执行阶段

根据cache信息调用最佳算法完成算子计算,若在后续计算中面对数据变换等情形时,则走入默认计算分支,避免庞大的算法选择开销。

算子内核自动选择机制可有效应对各类变尺度数据集训练场景,挖掘算子内各算法性能潜力,在各类训练场景下获得良好的性能收益。例如PaddleDetection套件中数据shape变化非常大的JDE模型,可以发现开启算子内核自动选择功能后,模型的训练性能可以获得大幅提升,且超越了手动设置cuDNN启发式搜索模式等各种手动设置的性能。

此外,飞桨提供的算子内核自动选择机制在设计上不仅覆盖了框架原生的多种算子实现,还覆盖飞桨深度学习编译器中生成和优化的算子,结合编译器对算子的自动优化能力,可以达到更好的性能。在ResNet50模型上的测试表明,性能已经可以持平业界最优编译器优化的结果。

一键开启自动调优

飞桨框架2.3版本可以通过以下方法:

paddle.incubate.autotune.set_config(config=None)\n\n一键开启所有自动调优功能。也可以根据调试的需求自定义调优功能的开和关:

config={\"kernel\":{\"enable\":True,\"tuning_range\":[1,5],\"layout\":{\"enable\":True,\"dataloader\":{\"enable\":True,paddle.incubate.autotune.set_config(config)\n\n通过实验对比,飞桨框架自动调优后的训练性能,可以持平或超越专家级手工配置优化的效果,而且在不少模型上相对飞桨或其它框架的默认配置都有较大幅度的性能提升。

结语

飞桨框架2.3版本发布的多层次性能自动调优技术,可以一键开启优化,自动适配不同硬件环境,大幅降低开发者性能优化所需的技术门槛,自动调优后的训练性能可以达到与专家级手工配置优化持平或超越的效果,发挥框架的极致性能。当下,飞桨正进一步强化自动调优能力,以期在更多的模型和硬件场景下发挥更显著的作用。未来会将多层次性能自动调优功能默认开启,并加入更多的自动调优策略,期待更多的开发者能够应用此功能提高模型训练效率。

THE END
1.gpu是什么常见问题GPU,全称图形处理器单元(Graphics Processing Unit),是一种专为并行处理图形数据而设计的电子电路。它主要用于处理来自显卡的大量数据流,以生成和渲染图像和视频。 GPU 的作用 加速图形处理:GPU 拥有大量并行处理核心,非常适合处理需要大量重复计算的图形任务,例如渲染、纹理处理和光影效果。 https://m.php.cn/faq/761089.html
2.什么是GPU?GPU与CPU之间的区别,GPU大揭秘!两者的区别在于存在于片内的缓存体系和数字逻辑运算单元的结构差异:CPU虽然有多核,但总数没有超过两位数,每个核都有足够大的缓存和足够多的数字和逻辑运算单元,并辅助有很多加速分支判断甚至更复杂的逻辑判断的硬件;GPU的核数远超CPU,被称为众核(NVIDIA Fermi有512个核)。每个核拥有的缓存大小相对小,数字逻辑运算https://blog.csdn.net/weixin_64043217/article/details/142752739
3.一文搞懂GPU的概念工作原理,以及与CPU的区别如下图所示,在GPU中会划分为多个流式处理区,每个处理区包含数百个内核,每个内核相当于一颗简化版的CPU,具备整数运算和浮点运算的功能,以及排队和结果收集功能。 注意,除了流处理器CUDA以外,影响GPU性能的还有 核心频率:频率越高,性能越强、功耗也越高。 https://cloud.tencent.com/developer/article/2321439
4.gpu服务器的功能和作用GPU服务器在现代计算环境中扮演着至关重要的角色,它们为各种高性能计算任务提供了强大的动力。从深度学习、图像渲染到物理模拟等复杂计算任务,GPU服务器都发挥着不可或缺的作用。本文将详细探讨GPU服务器的功能和作用,帮助读者更好地了解这一技术。 GPU服务器的基本构成 https://www.hzjcp.com/3387.html
5.GPU服务器的作用和功能介绍在当今信息时代,大规模数据处理和复杂计算任务已成为许多领域的核心需求。GPU服务器作为一种高性能计算平台,具有强大的并行计算能力和深度学习加速效果,广泛应用于科学研究、人工智能和数据分析等领域。下面一起来了解下GPU服务器的主要作用和功能。 并行计算能力 https://www.idcspy.com/74975.html
6.gpuocr速度gpuoc功能mob64ca14005461的技术博客gpu ocr 速度 gpu oc功能 CPU和GPU 在屏幕成像的过程中,CPU和GPU起着至关重要的作用。 1、CPU即是中英处理器,对象的创建和销毁、对象属性的调整、布局计算、文本的计算和排版、图片格式的装欢和转码、图像的绘制等都是CPU处理的。 2、GPU即是图片处理器,主要的工作是纹理的渲染。https://blog.51cto.com/u_16213616/11298018
7.新版本发布MOE2022.02发布,更多功能支持GPU加速!蛋白-蛋白对接:在粗粒化模型最小化步骤中,GPU重新实现了对粗粒模型相互作用能的计算,其速度提高了6-10倍。 抗体模建功能的优化: 抗体模建通过连接两个Fv(VL-linker-VH,VH-linker-VL)构建scFv,其中连接片段需要是查询序列的一部分。得到的scFv结构可以嫁接到完整或片段抗体模板上。 https://news.yaozh.com/archive/41345
8.GPU是什么?揭秘图形处理器的强大功能与应用常见问题GPU(Graphics Processing Unit)即图形处理器,是一种专门在个人电脑、工作站、游戏机和一些移动设备(如平板电脑、智能手机等)上做图像和图形相关运算工作的微处理器。它可以使计算机屏幕上的图像以更高的分辨率、更多的色彩和更快的速度显示。本文将深入揭秘GPU的强大功能与应用,让您全面了解这一重要的计算机硬件。 https://www.xiaoyuxitong.com/cjwt/161119.html
9.gpu服务器是干什么的?GPU功能及作用GPU功能及作用 gpu服务器是干什么的?GPU服务器就是基于CGP的应用在视频编解码,深度学习,科学计算等多场景稳定快速,稳定,弹性的计算服务。在互联网时代,服务器扮演了重要的角色,企业可以根据自己的需求选择合适的服务器。 gpu服务器是干什么的? GPU服务器是一种基于显卡GPU(图形处理器)作为计算核心的服务器。这种https://www.kkidc.com/market/5592.html
10.soc是什么意思SOC芯片的作用与功能→MAIGOO知识摘要:现在的智能手机有许多强大的功能,其根本就在于手机处理器,手机处理器又叫soc,soc是System on Chip,翻译过来就是系统级芯片,一般指将CPU、GPU、DSP、RAM、Modem等模块整合在一起的芯片,除开电源管理、射频解决等功能,绝大部分手机功能的完成都离不开soc,这就是soc芯片的作用。下面一起来了解一下soc是什么意思https://m.maigoo.com/goomai/276055.html
11.PS5官方问题汇总,你想知道的都在这里什么是后期竞速?PS5游戏的具体作用是什么? PS5 GPU具有内置的基于硬件的后期加速功能,该功能使游戏开发人员可以通过多种方式利用此功能。 后期竞速是一项功能,可以模拟光线与对象和表面的交互方式,以更详细地表示游戏的图形。PS5游戏开发人员可以利用后期竞速的优势来使水,玻璃,光的折射,阴影,表面等看起来更逼真或令人https://news.dmzj.com/article/69149.html
12.服务器GPU的作用与重要性,了解其核心功能服务器GPU是一种专为处理高强度计算任务设计的计算服务,凭借其卓越的并行处理能力和图形处理性能,在视频编解码、深度学习、科学计算等多个领域发挥着重要作用,尽管存在成本和使用门槛等问题,但随着技术的进步和应用场景的拓展,服务器GPU逐渐成为推动现代计算密集型行业发展的重要力量。https://www.kdun.com/ask/998250.html
13.手机“开发者选项”各功能详解安卓手机上的开发者选项,听起来很神秘,但其实强大的功能最为普通的手机玩家却用的很少,很多机友回去尝试里面到底有些什么功能,还要隐藏起来,今天小编就给大家揭秘开发者选项每个选项的功能、作用。按照顺序开始,大家想单独知道哪一项的可以自行跳转。 怎么开启开发者选项? 您可以在手机设置-关于手机-版本号(连续点击5https://bbs.oneplus.com/wap/thread/3968678?mod=viewthread&tid=3968678
14.AdobeInDesignGPU性能的功能增强了解InDesign 中关于 GPU 性能功能的所有信息。检查推荐的系统要求并启用 GPU 性能以体验更快速的 InDesign。https://helpx.adobe.com/cn/indesign/using/gpu_performance.html
15.CPU和GPU的作用本文将分析和比较CPU和GPU的作用。 I. CPU的作用 CPU是计算机的"大脑",负责处理和执行计算机系统中的所有指令。它的主要功能包括: 1.控制:CPU负责计算机系统的控制和协调,从内存中获取指令并解析执行。它指导其他硬件设备的操作,确保计算机的正常运行。 2.运算:CPU能够进行各种数学和逻辑运算,例如加法、乘法、逻辑https://wenku.baidu.com/view/63284349084c2e3f5727a5e9856a561252d321e6.html