关于GPU推理速度的两个问题

关于GPU推理速度的两个问题

1、为什么GPU的第一次推理速度会慢很多?

答:GPU在使用过程的开始,需要进行CUDA初始化(CUDA initialization),CUDA 初始化过程是一个"懒惰"的初始化,这意味着需要完成足够的初始化进程,才能支持所要的操作执行。在首次CUDA初始化时,有些初始化间接花费(cost)并没有进行,这些花费(cost)可以理解为设备和主机内存映射的协调,即内存的调度,这也是cpu和gpu都会有一定的内存(gpu为显存)变化的原因。表现出来的是虽然gpu的核心性能不如cpu,但是加载速度要和cpu持平,这意味着所需的表面上时间可能更短。这些初始化间接操作花费(cost)可能被吸收到操作中,而一些额外的初始化间接花费(cost)可能被吸收到后续操作中。
代码:

if __name__=='__main__':
    image=cv2.imread('./images/0.jpg')


    t_all1 = 0
    t_start = time.time()
    model_classify = ModelPipline()
    t_end = time.time()
    t_all1 += t_end - t_start
    print("加载模型时间:{}".format(t_all1))

    t_all2 = 0
    t_start = time.time()
    result = model_classify.predict(image)
    t_end = time.time()
    t_all2 += t_end - t_start
    print("第一次推理时间:{}".format(t_all2))


    t_all = 0
    for i in range(100):
        # 随机生成图片
        image = np.random.randint(0, 255, size=(224, 224, 3), dtype=np.uint8)
        t_start = time.time()
        result = model_classify.predict(image)
        t_end = time.time()
        t_all += t_end - t_start
    print("测试随机图片循环一百次时间:{}".format(t_all))

cpu推理速度:

cpu推理速度

gpu推理速度:

gpu推理速度

这是为什么后续的推理速度要远远小于第一次推理速度的原因。在首次推理过程中,仍然进行部分额外的初始化间接花费,需要消耗一定的时间,而后续在进行推理的时候,初始化已经完成,不再需要额外的时间消耗。

2、为什么GPU明明算力很高,但是运行速度却还是不快?

答:和CPU相比,GPU包含的更多是并行处理,即同时处理多个数据,而在我们的测试中,我们一次只输入一张图片,这时候如果查看显卡占用率(warps单元使用较少)的话,会发现占用率很低,这时候就很难发挥GPU的优势,假如同样100张图片,我们每次输出20张做为一个batch(显卡允许的情况下),这时候在看此时的显卡占用率,会发现它变高了,同时也会发现,运行速度要快了很多,这是因为20张图片是在同一时间进行并行计算的。
综上所述,我们可以发现使用GPU做深度学习的优势所在,在拥有高算力的设备的情况下,出现需要大规模的数据输入的时候,可以通过提高同时输入数据的数量,利用GPU的高并发计算,可以大幅度缩减计算时间,提高计算效率。

总结

涉及到CUDA编程的底层知识,后续需要系统学习。
参考:
CUDA初始化
CUDA第一次计算耗时
GPU利用率
GPu比CPU慢的原因
GPU并行处理

  • 7
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值