加入收藏 | 设为首页 | 会员中心 | 我要投稿 甘南站长网 (https://www.0941zz.com/)- 科技、行业物联网、开发、云计算、云管理!
当前位置: 首页 > 综合聚焦 > 服务器 > 正文

美团视觉GPU推理服务部署架构完善实践

发布时间:2023-02-14 14:25:14 所属栏目:服务器 来源:互联网
导读:以图像检测+分类服务为例,优化后的服务压测性能指标GPU利用率由40%提升至100%,QPS也提升超过3倍。本文将会重点介绍推理服务部署架构优化的工程实践,希望对大家能有所帮助或启发。 0. 导读 通过实验分析发现,造成视觉推理服务GPU利用率低下的一个重要原因

 
  检测后处理:使用NMS(非极大值抑制)算法去除重复或误检目标框,得到有效检测框,然后裁切目标区域子图并缩放,输出Nx3x224x224图像矩阵,检测后处理大部分算子运行在CPU设备上。
 
  分类模型:分类网络结构是ResNet-50,算子运行设备为GPU。
 
  其中检测和分类两个子模型是单独训练的,推理时合并成单个模型,部署框架采用TF-Serving,优化工具采用TF-TRT。
 
  3.2.1 性能瓶颈
 
  模型中预处理和检测后处理大部分是CPU运算,检测和分类模型主干网络是GPU运算,单次推理过程中需要进行多次CPU-GPU之间数据交换。同样地,CPU运算速度慢会导致GPU利用率低,推理服务存在性能瓶颈。
 
  实际线上服务压测GPU利用率68%,QPS也存在较大优化空间。服务配置为1GPU+8CPU(机器CPU型号是Intel(R) Xeon(R) Gold 5218 CPU@2.30GHz,GPU型号是Tesla T4)。
 
  3.2.2 优化结果
 
  如下图9所示,除了原始服务和微服务拆分,另外还对比了增加CPU和Triton Ensemble两种方式的性能测试结果。Triton Ensmeble方式将所有子模型(包括预处理和后处理)部署在一个机器上,实现多模型流水线调度。对比可以看出:  
 
 
 
图9 通用服务部署架构示意图
 
  这里需要解释一个重要问题,为什么这种部署架构是高效的?
 
  首先在宏观层面,模型拆分部署成微服务,通过调度服务实现了子模型流水线处理。拆分的子模型CPU微服务可以根据流量和处理能力动态扩容,避免模型预处理或后处理CPU运算能力不足成为性能瓶颈,满足了GPU模型微服务的吞吐需求。
 
  其次在微观层面,如果模型包含多个CPU/GPU运算部分,那么GPU运算之间会存在间隔。如下图11所示,单次推理过程中两次GPU运算之间需要等待CPU后处理部分完成,CPU预处理也会影响GPU运算。模型拆分后,预处理和后处理部分独立部署成CPU服务,GPU服务中推理过程仅包含两个子模型运算部分,并且子模型间运算相互独立无数据关联,CPU-GPU数据传输部分可以与GPU运算过程并行,理论上GPU可以达到100%运行效率。  
 
 

 
  5. 总结与展望
 
  本文以两个典型的视觉推理服务为案例,介绍了针对模型存在性能瓶颈、GPU利用率不高的问题进行的优化实践,优化后服务推理性能提升3倍左右,GPU利用率接近100%。根据优化实践,本文提出了一种通用高效的推理服务部署架构,这种架构并不局限于视觉模型服务,其它领域的GPU服务也可参考应用。
 
  当然,这种优化方案也存在一些不足,比如优化过程中模型如何拆分比较依赖人工经验或者实验测试,没有实现优化流程的自动化与标准化。后续我们计划建设模型性能分析工具,自动诊断模型瓶颈问题,支持自动拆分优化全流程。

(编辑:甘南站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

推荐文章
    热点阅读