我重新安装了Jupyter Notebook内核和python包,包括tensorflow 2.4.1(使用miniconda env)。
当我训练和测试一个模型时,我的CPU使用率达到饱和。在我的旧安装中,这种情况不会发生(低CPU使用率),完成任务的时间几乎相同。
我在Jupyter笔记本和VSCode上测试过,同样的问题也出现了。Ubuntu 20.04 16 GB RAM英特尔®酷睿™ i5- 8300 H CPU@2.30GHz × 8
CPU usage when training a simple network model - htop view
编辑:条件已解决。
我在英特尔网站上做了深入的研究,发现了这个link,关于Tensorflow和openMP的线程配置。我运行了一些快速测试,改变了下面的Tensorflow 2.x部分参数,没有任何改进。
import tensorflow as tf
tf.config.threading.set_inter_op_parallelism_threads()
tf.config.threading.set_intra_op_parallelism_threads()
tf.config.set_soft_device_placement(enabled)
然后测试OpenMP设置,将OMP_NUM_THREADS
从0更改为8,如下图所示:
training time vs OMP_NUM_THREADS
import os
os.environ["OMP_NUM_THREADS"] = “16”
CPU使用率降低,培训时间缩短。
CPU usage for OMP_NUM_THREADS equal to 0
OBS.:我不是ML基准测试Maven。只是修正了keras.Sequential()
模型的网络训练参数和拓扑。不知道为什么我的CPU默认以最大OMP_NUM_THREADS=16
线程化。
1条答案
按热度按时间r7knjye21#
在我们的多用户环境中,我们需要为更高优先级的任务保留一些cpu的空闲空间(我们没有“好”进程的权限)。因此,减少tensorflows(版本2.8.2)cpu贪婪是非常必要的。上述解决方案适用于我们的纯cpu环境(linux,40个内核),限制线程间/线程内为1。
这将cpu使用率限制为800%。