上海品茶

您的当前位置:上海品茶 > 报告分类 > PDF报告下载

2018年深度学习平台开发和应用.pdf

编号:95459 PDF 31页 6.32MB 下载积分:VIP专享
下载报告请您先登录!

2018年深度学习平台开发和应用.pdf

1、深度学习平台的开发和应用百度 架构师接口和编程模式中间表达和异构硬件数据处理业务应用接口和编程模式API experiemental vs standard namespace新功能的API,在不稳定前,放在一个隔离的API namespace下,比如experimental,contrib。如paddle.contrib.strange_api。用户可以容易判断API的稳定性。等到API稳定后,从实验的namespace下迁移到正式的namespace。API Serialization所有Python API序列转成一个API文本来表示(python inspect,op proto)代码

2、提交时,自动生成最新API文本,通过git diff可以直观发现API的修改。API的修改需要APIcommittee多人review。接口和编程模式Declarative Programming:”What”should be done.如TensorFlow静态图模式,SQL不易debug,执行时的逻辑和声明的代码分离。不易表达复杂逻辑,动态逻辑,不易混用第三方库,依赖框架本身算子的完备性。“易于”深度优化,执行前包含全局的逻辑。Imperative Programming:“How”to get things done.如Pytorch,C/C+,Java容易debug,逐行执行,随意修

3、改输入,打印输出,逐个模块验证。容易表达复杂逻辑。不易深度优化,无法预知未来,难以判断当前是否可以特殊处理。易于表达复杂逻辑,可利用Python的灵活性和numpy等丰富组件。接口和编程模式接口和编程模式Imperative越来越流行ICLR 2018-2019,TensorFlow引用 228-266,Pytorch引用 87-252TensorFlow 2.0 将把Eager Execution设为默认执行模式深度学习算法的灵活化,多样化Tree,Hierarchical,GAN,Pointer Network,Neural Turing Machine,Reinforcement Lea

4、rningDeclarative的优势未能充分发挥上千个硬件相关的黑盒算子难以参与全局优化。Control Flow的分析困难。核心算子的人工fusion往往更有效,长尾算子的优化成本太高。接口和编程模式Imperative模式的开发难点和优化策略Python的执行效率低。核心逻辑通过C+实现,异步调度,C+层返回一个Handle(类似future),Python层拿到handle,继续执行。当需要获取具体数据时再sync。无全局优化。对于顺序执行逻辑,通过implicit或者explicit的方法,把一段代码编译成图,通过cache进行复用。难以工业,移动端部署。通过trace,annota

5、tion和code analysis的方法,得到程序到图的映射。目前比较困难。(个人对tf的AutoGraph持怀疑态度。)接口和编程模式其他有趣的设计trade-offFunctional vs Object-oriented API。早期tensorflow使用functional API声明layers。Kera/Pytorch这使用class声明Layers/Modules。是否让用户配置device placement。Tensorflow将device placement(数据,模型并行)交给了用户。PaddlePaddle则倾向于提供自动化的并行优化。中间表达和异构硬件异构计算时

6、代CPU(几十个核,avx2-avx512),GPU(成千上万个core,千万个线程)TPU(高性能MatMul,Transpose,Activation模块。HBM,成百上千chip互联HPC)移动设备(mali gpu,andreno gpu,npu,fpga,etc)更复杂的带宽管理和内存管理:GPU Memory,PCIE,RDMA,GPU-Direct还有不同的数值精度:float16,int8,还有int4,bfloat16Many Parallel Programming Framework:OpenCL,CUDA,OpenACC,OpenMP20152016,我花了1周用Inc

7、eption训练了ImageNet。2018,只需要几分钟。中间表达和异构硬件系统中需要多重异步设计文件读取异步,数据处理异步,数据-GPU异步,Op CPU-GPU异步,网络通信异步。需要CPU线程池分类,一部分负责数据在CPU的预处理,一部分负责文件和网络的IO,一部分异步调用8个GPU。图像,视频,语音的预处理也可以通过GPU加速。当使用上千个chip进行大规模并发训练时,数据的处理往往成为瓶颈。中间表达和异构硬件分布式训练师。CPU+TCP/IP,RDMA,GPU-Direct(GDR),会有数倍的吞吐差异。GPU的显存往往不够用,额外的CPUGPU拷贝可能导致计算量降低数倍中间表达和

8、异构硬件不同模型的pattern很不一样。大规模稀疏模型单个参数可以有几十G甚至上T。图像模型的feature extractor可能有上千层的深度。强化学习模型需要频繁的CPU交互。需要有不同的优化策略。比如大规模稀疏模型需要一个将巨型参数进行分布式的管理,异步更新。图像类模型通过分布式的数据并行,同步训练。许多模型使用int8可以无精度损失。配合芯片支持,可以提速23倍,压缩体积到1/4。开发者需要足够了解硬件。Float32和float64在GPU上的性能差异很大,但是CPU缺未必。中间表达和异构硬件编译器技术给了我们很多启示。很多不同的语言(模型结构),使用统一的中间表达,和模块化的优

9、化策略,生成适合在不同设备上执行的代码。中间表达和异构硬件移动端预测服务器预测模型表达与优化训练模块组网模块Python API训练RunTimeCPU/GPU集群模型Program统一中间表达统一中间表达优化库服务器预测API服务器预测RunTime移动端预测API移动端预测RunTime中间表达和异构硬件服务器预测模型表达与优化模型Program统一中间表达Operator fusion passModel prune passQuantization passFine-tune passVisualization passMemory Planning Pass3rd-party run

10、time integration pass预测接口:1.Buffer-Management2.Predictor Generation3.Optimization Customization4.Runtime CustomizationTrained ModelNvidiaTensorRTNative Operators Intel nGraph3rd-Party RuntimeCPU/GPU服务器预测RuntimeLoad模型和初始化中间表达和异构硬件统一中间表达Static-Single-Assigment Directed Acyclic Graph模块化的优化策略每个策略是一个单独的P

11、ass。Graph-in-Graph-outPass以plug-in形式注册,可以按模型定制,按硬件设备定制,按优化目标定制,按分布式模式定制。可以自由组合。中间表达和异构硬件常见Pass可视化。将中间表达可视化,方便debug和定制优化策略。Operator fusion。将反复出现的细粒度算子或者性能瓶颈的多个算子融合成一个高性能算子。显存优化。通过图的依赖关系分析,新的显存需求可以通过直接复用上次分配的空间,无需重新分配中间表达和异构硬件中间表达和异构硬件Deep Learning Compiler痛点:深度学习框架有成百上千个算子。不同的硬件设备常常需要特殊实现这些算子:CUDA,Op

12、enCL,Metal。高级的优化需要使用汇编和指令:SASS,AVX,NEON。特殊的AI芯片对编程支持不完备。不同算子独立实现,难以全局优化。Idea:定义一些(少量)primitive的,硬件无关的基础算子和计算表达式,所有高级算子基于这些基础实现。优化策略可以单独定制。通过硬件无关的编译技术,对模型(通常是图)的中间表达进行优化。形成一个统一的中间表达。不同的硬件设备商对这个统一的中间表达,实现各自硬件相关的优化逻辑,产生硬件可执行文件。中间表达和异构硬件中间表达和异构硬件def batch_matmul(batch_size,F,M,K,N):A=tvm.placeholder(bat

13、ch_size,F,M,K),name=A)B=tvm.placeholder(batch_size,F,K,N),name=B)k=tvm.reduce_axis(0,K),k)C=pute(batch_size,F,M,N),lambda b,f,m,n:tvm.sum(Ab,f,m,k*Bb,f,k,n,axis=k),name=C)s=tvm.create_schedule(C.op)BB,MM,FF,PP=sC.op.axisBBMMFF=sC.fuse(BB,MM,FF)by,ty_block=sC.split(BBMMFF,factor=num_thread_y*vthread_

14、y)bx,tx_block=sC.split(PP,factor=num_thread_x*vthread_x)sC.bind(by,block_y)sC.bind(bx,block_x)vty,ty=sC.split(ty_block,nparts=vthread_y)vtx,tx=sC.split(tx_block,nparts=vthread_x)sC.reorder(by,bx,vty,vtx,ty,tx)sC.reorder(by,bx,ty,tx)sC.bind(ty,thread_y)sC.bind(tx,thread_x)sC.bind(vty,thread_yz)sC.bin

15、d(vtx,thread_xz)sCS.compute_at(sC,tx)tvm.lower(s,A,B,C,simple_mode=True)中间表达和异构硬件汇编和指令编程异构设备发展非常的快gcc等编译器无法很智能的利用新的硬件设备深度学习大量计算通常是一些gemm,在可控的开发成本内可以带来显著的收益。中间表达和异构硬件集成在框架中的可视化的timeline分析数据处理TensorFlow最开始:多个Python线程驱动的并发数据处理,需要启动一个FIFOQueue。数据预处理常常成为性能瓶颈。tf.data:对数据处理模块进行改写,C+多线程并发。单机多GPU通常能满足性能需求。但是

16、对于TPU的512 chip并发训练,依然容易成为性能瓶颈。Input Pipeline中的计算时图的一部分,需要使用TensorFlow的Op完成。PaddlePaddle用户定制数据预处理,灵活使用Python或C+。处理后的数据放入框架提供buffer。框架异步将buffer交给训练计算。业务应用常见服务器端应用Batching可显著提升throughput由于框架本身开销,BatchSize=1往往不能显著降低延迟。所有的优化决策都依照profile结果。经验性的猜测往往不准。合理的进行混合调度。将一部分计算offload给第三个引擎,如TensorRT,nGraph。0.10.20.

17、40.81.63.26.412.825.68月20日8月23日8月24日8月26日地地图路径规划模型图路径规划模型Latency(ms)bathch_size=1batch_size=10batch_size=20batch_size=50batch_size=100业务应用常见服务器端应用机器的型号对性能产生非常大的影响比如,新的Intel CPU带有int8,avx512,可显著提升一些优化策略的效果。低数值精度int8可以显著提升性能1.5到2倍左右,精度损失常常可以控制在1%以内。比较全面的profile性能瓶颈新的PCIE可能对单机并发训练性能产生20%左右的优化。RDMA有时可以显

18、著提升分布式训练性能。业务应用大规模推荐系统亿级的稀疏特征,单个模型数百个GB特殊的模型并行参数sharding分布式的特征向量的lookup table分布式的模型恢复和保存业务应用移动端应用使用量化和压缩策略。Int8能提升2倍左右性能,将模型体积压缩到原来1/4。选择性编译。根据模型需要的算子,只编译部分框架,减小包体积。考虑调用GPU。移动设备GPU性能逐渐提升,利用率常常不高。避免和其他程序抢占CPU资源,导致系统卡顿。有时需要使用汇编和operator fusion等方法,满足性能需求。业务应用移动端应用灵活选择模型,在精度和资源消耗上有很多trade-off可以选择。常常不会选择精度最高的模型,因为每flops增加带来的精度提升通常呈现衰减趋势。业务应用移动端应用支持多设备,合理的调度,充分利用“合适”的资源。利用华为NPU,大幅提升AI计算的性能,节省CPU的宝贵资源

友情提示

1、下载报告失败解决办法
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站报告下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。

本文(2018年深度学习平台开发和应用.pdf)为本站 (云闲) 主动上传,三个皮匠报告文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三个皮匠报告文库(点击联系客服),我们立即给予删除!

温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。
会员购买
客服

专属顾问

商务合作

机构入驻、侵权投诉、商务合作

服务号

三个皮匠报告官方公众号

回到顶部