libtorch-gpu推理时占用CPU 100%问题解决

4 篇文章 1 订阅
3 篇文章 0 订阅

libtorch-gpu推理时占用CPU 100%问题解决

可能很多童鞋在利用libtorch进行pytorch模型加速的时候并没有注意过CPU的占用问题,可甚至有时候觉得能调通模型都觉得很好了。然而事实是越精越好(或者CPU的占用其实也影响模型的推理性能),可能觉得我说法有些问题,因为本来用的是GPU进行计算。注意此处的解释根据个人理解而来:

首先先引入几个概念:
  1. cpu个数是指物理上安装了几个cpu,一般的个人电脑是安装了1个cpu

  2. cpu内核数是指物理上,一个cpu芯片上集成了几个内核单元,现代cpu都是多核的。

  3. cpu线程数是指逻辑上处理单元,这个技术是Intel的超线程技术,它让操作系统识别到有多个处理单元

在这里插入图片描述
这里特别时候说一下:torch.get_num_threads()返回的本机为6, C++返回为12(针对我的本机),我的理解是,python返回的是Returns the number of threads used for parallelizing CPU operations, 也就是指的是内核书,而C++返回的是线程数,及处理单元(处理器)个数;
在C++下,libtorch默认是开启全部线程数,若线程全开(可用cout << "当前使用线程数: "<< at::get_num_threads() << endl;打印查看), 默认本身不需要那么多,可能出现超额订购(我的理解是跑车开山路),整体性能反而没那么好,表现的是推理时间反而增加。这是我线程全开的推理时间:
在这里插入图片描述
然后我设置:at::set_num_threads(1);
整体推理时间如下,推理性能反而增加(典型一个和尚挑水吃):
在这里插入图片描述
针对这个现象,我在官方了解到:
在这里插入图片描述
由此说来,的确和我猜想一直,并不是内核全开为好。
所以一旦自己libtorch 模型运行成果,下一步就应该考虑细优化,去看看线程数的影响:
只要加入如下两句话:

#include “ATen/Parallel.h”
at::set_num_threads(1);

这样就可以根据实际线程数去绘制线程与耗时曲线,选择最佳线程数去匹配自己的模型。

参考地址:https://pytorch.org/docs/master/notes/cpu_threading_torchscript_inference.html?highlight=get_num_threads

我叫谢琛,深度学习探索者一枚!(有意咨询xiec177)
tensorflow/pytorch交流群请加QQ:548368797
更多咨询咨询请关注!在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

谢陈(xiec177)

致力于解决深度学习框架问题。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值