Page 43 - 《软件学报》2020年第9期
P. 43

2664                                 Journal of Software  软件学报 Vol.31, No.9,  September 2020

         LLVM 框架对 CUDA 程序代码进行插桩,在程序的执行过程中收集性能数据,包括 CPU 与 GPU 两者之间的交
         互作用,基于性能数据进行访存行为分析、控制流分析以及代码调试.与其他工具不同的是,CUDAAdvisor 具有
         较好的扩展性,能够支持不同版本的 CUDA 与不同架构的 GPU.Farooqui 等学者                   [60] 针对于 GPU 并行平台的性
         能检测和分析问题,提出并开发了动态插桩系统 Lynx,基于 GPU Ocelot 平台,使用 JIT 编译器对待检测程序在
         PTX 代码级别进行转化、插桩与优化操作,具有较高的效率,能够获取 kernel 函数的执行时间、branch divergence
         情况以及不同粒度(例如 kernel,thread block 等)的性能数据.虽然针对 GPU 的性能分析问题,插桩是一种有效的
         技术手段,可以在程序源码级别、中间代码级别以及目标代码级别实施插桩,通过插桩代码来检测程序运行时
         的性能数据,但是该方法会引入额外的负载,需要对引入的负载进行评估.
             性能分析的第 3 阶段是结合 DNN 任务特性和 GPU 目标硬件平台特性构建性能模型,然后采用数学的方法
         分析和评估 DNN 任务的性能,识别性能瓶颈.Qi 等学者在文献[61]中提出了一种可分析的性能模型 PALEO,可
         以对简单的、具有特定声明规范的神经网络架构进行性能评估.PALEO 从指定的架构中提取需求并将其映射
         到软件、硬件和通信策略等设计空间中,将神经网络建模成一个有向图,利用数学方法计算网络的执行时间.由
         于 DNN 任务与 GPU 硬件两者的复杂性,构建性能模型的方法存在较大的难度.目前,相关的研究工作还未取得
         突破性进展,是未来进一步的研究方向.此外,还有一些学者进行了其他方面的探索.Dong Shi 在文献[62]中探究
         了卷积神经网络的微结构对 DNN 任务在 GPU 上执行所造成的影响,他们使用微架构设计逐层分析 CNN 模型
         的性能影响,并在典型的 GPU 存储架构中描述访存行为特性以及硬件资源的利用情况,识别单个 GPU 的潜在性
         能瓶颈.Madougou 等学者在文献[63]中提出了一个 GPU 应用程序的性能分析工具,该工具综合采用了随机森林
         的统计方法、GPU 硬件计数器以及机器学习的方法,构建了一个用于性能预测的随机森林模型.
             利用上述的分析方法或工具,可以对 GPU 上 DNN 模型的训练和推理过程进行性能分析,并得出以下结论.
             (1)  不同的深度学习框架会导致较大的性能差异.在相同的硬件配置条件下,同一个 Alexnet 模型在主流
                 深度学习框架下的训练时间存在着较大的差异:在 CNTK 中训练最快,在 Theano 中训练最慢.不同的
                 深度学习框架实现机制与 CUDA 驱动的融合程度不同,所以其性能具有较大差异.因此在实际的应用
                 中,针对指定的 DNN 模型,可以选择更加匹配的深度学习框架,提升模型训练和推理的性能;
             (2)  卷积层运算涉及到大量的密集型计算,需要大量的计算资源,占据网络模型全部训练/推理时间的大
                 部分.一个完整的 DNN 网络模型包含多个层,例如数据层、卷积层、池化层、激励层、全连接层,每
                 一层都执行特定的操作.其中,卷积层对输入数据进行卷积运算,并映射到特征空间中,是 DNN 模型中
                 “Hot Layer”,提高卷积层的性能,可以大幅度的提高系统性能;
             (3)  在实际应用中,DNN 模型包含大量的神经元,具有数千万的训练参数,计算量大,存在两个潜在的性能
                 瓶颈:计算瓶颈和通信瓶颈.一方面,由于 GPU 等硬件加速平台计算资源是有限的,DNN 模型训练以及
                 推理过程中,大量的数据计算就容易在硬件平台上造成性能瓶颈;另一方面,随着 DNN 网络规模的不
                 断增大,为了加快网络的训练速度,经常需要在分布式 CPU/GPU 集群中完成整个训练.在主流的基于
                 数据并行的分布式深度学习中,各个计算单元并发训练一个 DNN 模型,各个单元的训练数据不同,每
                 一次迭代结束后,各个计算单元需要同步 DNN 参数或梯度,更新参数服务器上的模型,之后再将最新
                 模型推送到各个数据并行单元,用于下一轮计算.因此,数据并行中参数的交换容易成为整体性能瓶
                 颈,如何解决这种通信瓶颈以提高性能,成为并行方法设计的研究重点.
         3.2   轻量化神经网络
             本节陈述的 DNN 网络层性能优化相关研究工作主要是提高网络的平均性能,而非实时性能.基于上述
         DNN 性能分析结论,DNN 任务性能优化方向是减少模型中冗余参数,优化卷积核的计算结构.设计轻量化的神
         经网络方法包括人工手动优化 DNN 模型和自动化设计方式优化 DNN 模型:手动优化 DNN 模型包括深度学习
         模型压缩、设计轻量化网络、优化卷积计算方式和网络中卷积层池化层搭配的网络结构设计;自动化设计方式
         是指采用神经网络架构搜索方式,基于多目标优化约束自动化设计网络.
   38   39   40   41   42   43   44   45   46   47   48