为什么TensorFlow会占用所有CPU核心100%资源,如何解决?
TensorFlow 2.4.1 CPU使用率饱和问题排查与解决
问题背景
我全新安装了Jupyter Notebook内核及Python相关包,其中包括miniconda环境下的TensorFlow 2.4.1版本,运行过程中出现了异常的CPU占用问题:
- 训练和测试模型时CPU使用率达到饱和,但此前的旧安装环境下CPU使用率很低,且两类环境完成任务的耗时基本一致
- 分别在Jupyter Notebook和VSCode中测试,均出现相同问题
设备配置:Ubuntu 20.04系统、16GB内存、Intel® Core™ i5-8300H CPU @ 2.30GHz × 8
问题解决
更新:问题已解决
排查过程如下:
- 首先参考英特尔官方关于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进行多组对比,测试结果如下:
- 最终确定
OMP_NUM_THREADS=16的配置效果最优,配置代码如下:
import os os.environ["OMP_NUM_THREADS"] = "16"
调整后CPU使用率有所下降,同时训练耗时也更短。
备注
我并非机器学习基准测试领域的专家,仅固定了keras.Sequential()模型的网络训练参数和拓扑结构,暂不清楚为什么我的设备默认会将OMP_NUM_THREADS=16设为最大线程数。
内容的提问来源于stack exchange,提问作者Mateus Hufnagel
相关产品推荐
相关产品推荐

