如何解决PyTorch程序占用较高CPU问题

 更新时间:2023年09月08日 09:26:21   作者:Arxan_hjw  
这篇文章主要介绍了如何解决PyTorch程序占用较高CPU问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

PyTorch程序占用较高CPU问题

在使用服务器运行PyTorch程序时,使用TOP命令查看CPU状态,发现CPU占用率竟然达到2000%,已经影响到其他人正常使用服务器。

解决办法

在main程序中加以下代码:

torch.set_num_threads(1)

设置最多使用1个CPU核。

问题解决~

pytorch训练占用cpu过高,num_works和set_num_threads设置均无效,发现是数据扩增问题

这是我使用pytorch训练模型的时候,出现cpu占用过多的情况,无关pytorch版本

dataloader num_work=1 的时候单线程cpu占用量2800,也就是一半的cpu,我服务器一共28*2个逻辑cpu

dataloader num_work=8 的时候8个线程cpu占用500-700,合计2800

使用网上教程的如下指令,没有任何效果

    cpu_num = 1
    os.environ["OMP_NUM_THREADS"] = str(cpu_num)
    os.environ["OPENBLAS_NUM_THREADS"] = str(cpu_num)
    os.environ["MKL_NUM_THREADS"] = str(cpu_num)
    os.environ["VECLIB_MAXIMUM_THREADS"] = str(cpu_num)
    os.environ["NUMEXPR_NUM_THREADS"] = str(cpu_num)
    torch.set_num_threads(cpu_num)

最后发现是数据扩增惹的祸,我是用的数据扩增库是albumentations,其中所使用的基于opencv的各种数据变换占用了太多的cpu,因此只需要限制opencv的线程数目则可:

import cv2
import albumentations
cv2.setNumThreads(1)	# 0也可以

再设置 dataloader num_work=2 的情况

虽然不清楚这里为什么有3个,但目的达成了,而且训练速度和cpu占用2800的时候一样。

在albumentations的github网址也有相关联的一小段说明,但不是本篇文章遇到的问题, cv2.ocl.setUseOpenCL(False) 对于本篇文章问题可以不加。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • python使用numpy读取、保存txt数据的实例

    python使用numpy读取、保存txt数据的实例

    今天小编就为大家分享一篇python使用numpy读取、保存txt数据的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-10-10
  • Python基于Pymssql模块实现连接SQL Server数据库的方法详解

    Python基于Pymssql模块实现连接SQL Server数据库的方法详解

    这篇文章主要介绍了Python基于Pymssql模块实现连接SQL Server数据库的方法,较为详细的分析了pymssql模块的下载、安装及连接、操作SQL Server数据库的相关实现技巧,需要的朋友可以参考下
    2017-07-07
  • Python中namedtuple 命名元祖的使用

    Python中namedtuple 命名元祖的使用

    本文主要介绍了Python中namedtuple 命名元祖的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • 一篇文章带你了解python元组基础

    一篇文章带你了解python元组基础

    今天小编就为大家分享一篇关于Python中的元组介绍,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2021-08-08
  • 深入解析Python中的多进程

    深入解析Python中的多进程

    这篇文章主要介绍了深入解析Python中的多进程,“Python中的多进程是通过multiprocessing包来实现的,和多线程的threading.Thread差不多,它可以利用multiprocessing.Process对象来创建一个进程对象
    2022-06-06
  • 详解在python中如何使用zlib模块进行数据压缩和解压缩

    详解在python中如何使用zlib模块进行数据压缩和解压缩

    Python有一些内置库用于处理数据压缩和解压缩,其中一个就是zlib模块,这个模块为DEFLATE压缩算法和相关的gzip(文件格式)提供了支持,在这篇文章中,我们将深入探讨如何使用zlib模块进行数据压缩和解压缩
    2023-06-06
  • python实现飞机大战项目

    python实现飞机大战项目

    这篇文章主要为大家详细介绍了python实现飞机大战项目,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-03-03
  • Python模拟登录微博并爬取表情包

    Python模拟登录微博并爬取表情包

    前段时间爬取的知乎表情包用完了吗?今天再带大家去微博爬一波表情包吧.文中有非常详细的代码示例,废话不多说,让我们愉快地开始吧,需要的朋友可以参考下
    2021-06-06
  • pandas之query方法和sample随机抽样操作

    pandas之query方法和sample随机抽样操作

    这篇文章主要介绍了pandas之query方法和sample随机抽样操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • 使用Python轻松实现隐藏、显示和修改Excel网格线

    使用Python轻松实现隐藏、显示和修改Excel网格线

    在数据处理和报表制作中,Excel 是最常用的工具之一,而网格线(Gridlines)作为 Excel 默认的背景辅助线,本文将介绍如何使用 Spire.XLS for Python 库,通过简单的代码实现 Excel 网格线的隐藏/显示以及颜色修改快跟随小编一起学习一下吧
    2026-03-03

最新评论