Skip to content

  • 体验新版
    • 正在加载...
  • 登录
  • PaddlePaddle
  • Paddle-Lite
  • 合并请求
  • !3808

P
Paddle-Lite
  • 项目概览

PaddlePaddle / Paddle-Lite

通知 338
Star 4
Fork 1
  • 代码
    • 文件
    • 提交
    • 分支
    • Tags
    • 贡献者
    • 分支图
    • Diff
  • Issue 271
    • 列表
    • 看板
    • 标记
    • 里程碑
  • 合并请求 78
  • Wiki 0
    • Wiki
  • 分析
    • 仓库
    • DevOps
  • 项目成员
  • Pages
P
Paddle-Lite
  • 项目概览
    • 项目概览
    • 详情
    • 发布
  • 仓库
    • 仓库
    • 文件
    • 提交
    • 分支
    • 标签
    • 贡献者
    • 分支图
    • 比较
  • Issue 271
    • Issue 271
    • 列表
    • 看板
    • 标记
    • 里程碑
  • 合并请求 78
    • 合并请求 78
  • Pages
  • 分析
    • 分析
    • 仓库分析
    • DevOps
  • Wiki 0
    • Wiki
  • 成员
    • 成员
  • 收起侧边栏
  • 动态
  • 分支图
  • 创建新Issue
  • 提交
  • Issue看板

[CUDA] [Stream] Reorganize stream. !3808

  • Report abuse
!3808 开放中 6月 17, 2020 由 saxon_zh@saxon_zh 创建
#<User:0x00007ff7dddf2230>
  • 概览 34
  • 提交 19
  • 变更 16

Created by: jiweibo

【描述】 对lite cuda涉及流的部分进行了统一。主要包括:

  1. 单stream拆分成io和exec stream
  2. copy_from_cpu和copy_to_cpu操作从NULL stream切换到io stream
  3. 每个predictor内部维护exec_stream和io_stream,支持线程流。
  4. 单线程情况下支持exec多流,多线程暂不支持。
  5. 服务端可通过config.set_exec_stream()和config.set_io_stream()来设置流

【线程流性能测试】

batch_size=16, work=1000,即需要处理的总量为16 * 1000,qps计算为:batch_size*work / time。测试显卡:P4

resnet模型下qps测试(one_loop中包括了数据预处理过程) batch_size=1

线程 qps gpu利用率 显存 qps相对单线程提升 每个线程相对单线程使用率
1 46.46 40 670M / /
2 84.64 88 991M 82.18% 0.91
3 92.34 99 1384M 98.75% 0.66
4 106.548 99 1935M 129.33% 0.57

batch_size=2

线程 qps gpu利用率 显存 qps相对单线程提升 每个线程相对单线程使用率
1 52.60 30-38 756M / /
2 103.28 60-68 1177M 96.35% 0.98
3 143.07 99 1510M 172% 0.91
4 130.07 90-99 2495M 147.28% 0.62

batch_size=4

线程 qps gpu利用率 显存 qps相对单线程提升 每个线程相对单线程使用率
1 57.84 22-34 914M / /
2 115.67 43-61 1497M 99.98% 0.9999
3 164.87 81-87 2208M 184.99% 0.95
4 179.27 99 2761M 209.94% 0.77

batch_size=8

线程 qps gpu利用率 显存 qps相对单线程提升 每个线程相对单线程使用率
1 60.13 19-38 1198M / /
2 119.73 38-59 2165M 99.12% 0.996
3 176.53 59-78 3080M 193.58% 0.979
4 229.1 99 3977M 281% 0.95

batch_size=16

线程 qps gpu利用率 显存 qps相对单线程提升 每个线程相对单线程使用率
1 62.05 0-34 1864M / /
2 125.19 12-64 3271M 101.76% 1.0
3 180.76 51-99 5044M 191.31% 0.97
4 235.41 93-99 6385M 279.39% 0.95

检测yolov3模型下qps测试(one_loop中包括了数据预处理过程)work=500

batch_size=1

线程 qps gpu利用率 显存 qps相对单线程提升 每个线程相对单线程使用率
1 6.69 30-41 1462M / /
2 9.50 43-68 2834M 42% 0.71
3 13.33 65-93 3802M 99.25% 0.66
4 14.65 98 5205M 118.98% 0.55

batch_size=2

线程 qps gpu利用率 显存 qps相对单线程提升 每个线程相对单线程使用率
1 6.89 0-54 1924M / /
2 10.32 0-99 3469M 50% 0.74
3 12.51 0-100 5348M 79.22% 0.60
4 / / out of memory / /

batch_size=4

线程 qps gpu利用率 显存 qps相对单线程提升 每个线程相对单线程使用率
1 6.98 0-100 2898M / /
2 10.66 0-99 5721M 52.72% 0.76
3 / / out of memory / /

batch_size=8

线程 qps gpu利用率 显存 qps相对单线程提升 每个线程相对单线程使用率
1 7.08 0-100 5950M / /
2 / / out of memory / /

结论:

  • 从分类和检测模型中可以看出,当gpu利用率不满时,采用线程流的方式能够大幅提升服务的qps
  • 注意,在一些业务模型上发现即使gpu利用率不满,采用线程流反而使得gpu利用率下降,总体qps降低,该问题的原因可能是:模型的kernel运行时间和launch开销差不多,多线程在launch kernel的时候还需要抢占锁,导致性能下降。

文档设计部分: http://agroup.baidu.com/paddle-infer/md/article/2592150 见文档最后的 lite cuda 流管理需求

指派人
分配到
审核者
Request review from
无
里程碑
无
分配里程碑
工时统计
标识: paddlepaddle/Paddle-Lite!3808
Source branch: github/fork/jiweibo/stream_manage
渝ICP备2023009037号

京公网安备11010502055752号

网络110报警服务 Powered by GitLab CE v13.7
开源知识
Git 入门 Pro Git 电子书 在线学 Git
Markdown 基础入门 IT 技术知识开源图谱
帮助
使用手册 反馈建议 博客
《GitCode 隐私声明》 《GitCode 服务条款》 关于GitCode
Powered by GitLab CE v13.7