当前位置: 首页 > 网络应用技术

Xengine:深度学习模型推理优化

时间:2023-03-06 15:43:26 网络应用技术

  摘要:从内存优化,计算和优化的两个方面,分析如何优化深度学习模型推理。

  深度学习模型的开发周期包括培训阶段和部署阶段。在培训阶段,用户需要收集培训数据以定义自己的模型结构,并培训CPU或GPU硬件。该过程将重复优化,直到训练令人满意的精度模型为止。在模型之后,我们需要部署模型服务部署。我们期望服务的延迟延迟越好,吞吐量越高,它将分析如何从内存优化的两个方面执行深度学习模型推理和优化。

  模型推理需要占用一定数量的记忆空间(以GPU推理为例),该空间主要包括以下4个部分:

  1.前所未有的空间

  2.用户数据

  3.模型参数

  4.运行时间

  1. OP计算的激活值

  2. OP计算需要临时空间

  其中,“不受控制的空间”是指系统分布的空间,例如每个过程CUDA上下文所占据的内存空间,通常约为100-300MB;“用户数据”参考空格;“模型参数”是指训练模型的参数所占据的记忆空间。在计算之前,我们需要将模型参数加载到内存内存中。“跑步空间”是指对内存空间的需求。

  以Resnet-50模型为例,内存分布空间为以下内容。我们可以看到,随着批处理大小的增加,运行时空间将线性增长,并且运行空间成为用于内存职业的瓶颈。

  不同的模型内存分布也不同。在NLP场景中,近年来,变压器模型中出现了许多大型模型。模型参数空间将成为内存的瓶颈。

  接下来,它将解释如何从两个方面优化视频记忆空间:激活优化和参数优化,最后扩展到多模型视频存储空间共享。

  激活价值优化的主要思想是记忆重复使用。推理和培训是不同的。推理计算仅是向前过程。计算OP时,实际上可以通过后来的OP重复使用输入空间。

  参数优化主要是为了解决超大模型的问题。如果模型太大,则需要多个卡片。参数空间与激活不同。这是预先训练的固定值,并暂时计算激活值。这使我们无法使用重复使用的方式。这些参数始终保存在一个地方。将训练的参数缓存到磁盘和CPU内存中。当我们需要时,请提前阅读,以便我们不需要所有参数将其存储在内存中,并将大型型号单张卡放置。卡卡加载是可能的。

  为了减少数据复制对推理性能的影响,需要并行读取和计算数据。在GPU计算中,我们可以通过CUDA流 +事件计算和复制计算和复制,如下图所示:

  除了单个模型中的激活优化和参数优化外,我们还可以在多征用多型模型服务方案中进一步共享多模型视频内存共享。

  这是简历和NLP场景的模型。与Xengine推理引擎和其他操作引擎的视频存储器占用相比,您可以看到明显的优化。如果不考虑性能打开参数优化,则可以进一步减少存储器职业。

  下图采用了RESNET-50模型的片段,并摘要计算出和访问的组装线过程。我们可以看到每个OP计算都对应于CUDA内核计算。每个内核计算将从全局内存中读取数据并计算膜上的CUDA核心。右侧的图片是CUDA的存储架构,它也符合访问金字塔的原理。它越接近,访问速度就越快。在它们中,全局内存是GPU的内存,最慢的访问速度。电影上的共享记忆是第二次。最快的是胶片上的寄存器空间。当模型OP的更多操作时,模型推理计算将反复读取和写作视频记忆,并且效率相对较低。为了解决这个问题,常用的方法是图形融合技术。当OP计算的速度速度越快时,我们需要高性能运算符。

  图融合技术是指某些操作的集成计算,它是从多个OP内核计算到OP的内核计算计算的。通过此优化,它可以减少视频记忆的重复读取和写作。您可以一次读取数据,然后尽可能多地计算数据,然后将数据存储到视频内存中。它还可以减少内核启动的费用。可以通过手写CUDA内核来生成融合操作员实现。或拨打第三方库或代码库。

  在下图中,优化Resnet-50模型之前和之后的图结构进行了优化。CV类型模型的常用融合方法是集成线性计算和激活,例如Cons + BN + Relu进行融合计算。

  下图是BERT模型图表之前和之后的更改。

  库公共/库丁/卡特拉斯

  CUDA编程指南

  CUDA最佳实践指南

  FP16/INT8/TensorCore(Half2,DP4A,WMMA)

  TVM/XLA/mlir ...

  Xengine优化了BERT类型模型。测试环境是NVIDIA V100和FP32计算。以下是性能的比较。与原始框架相比,原始框架没有优化。当序列长度相对较小时,会有显着的性能改进。在同一时间,它也与NVIDIA的SOTA溶液Fertransformer进行了比较,该溶液具有较小的优势。

  本文主要分析了从两个角度来分析模型推理通常使用的优化思想和技术,并显示了优化的结果。我希望每个人都对每个人都有帮助,以优化推理工程。

  本文分享了华为云社区的诚意,作者:Ross.XW。