如何减少 Tensorflow/Keras 使用的 CPU 数量?

Posted

技术标签:

【中文标题】如何减少 Tensorflow/Keras 使用的 CPU 数量?【英文标题】:How can I reduce the number of CPUs used by Tensorlfow/Keras? 【发布时间】:2020-01-15 09:56:59 【问题描述】:

我使用的是 Tensorflow 2.0 的 Keras api。

在我的 Keras 模型上调用 fit 时,它使用所有可用的 CPU。

我想限制使用的 CPU 数量。但是它在以前版本的 TensorFlow 中的工作方式不能再使用了:

tf.keras.backend.set_session(tf.compat.v1.Session(config=tf.compat.v1.ConfigProto(
       intra_op_parallelism_threads=2, inter_op_parallelism_threads=2)))

AttributeError: 模块 'tensorflow.python.keras.api._v2.keras.backend' 没有属性 'set_session'

我该怎么做?

【问题讨论】:

【参考方案1】:

在 TensorFlow 2.0 中,不再有会话。在 Eager Execution 中,直接使用 config API 在程序开始时设置并行度,如下所示。

import tensorflow as tf

tf.config.threading.set_intra_op_parallelism_threads(2)
tf.config.threading.set_inter_op_parallelism_threads(2)
with tf.device('/CPU:0'):
    model = tf.keras.models.Sequential([...

https://www.tensorflow.org/api_docs/python/tf/config/threading

【讨论】:

【参考方案2】:

this post 中的第二个答案可能是限制使用的 CPU 数量的解决方案。您可以将代码更改为

import tensorflow as tf
from keras import backend as K

num_cores = 4

num_CPU = 1
num_GPU = 0

config = tf.ConfigProto(intra_op_parallelism_threads=num_cores,
                        inter_op_parallelism_threads=num_cores, 
                        allow_soft_placement=True,
                        device_count = 'CPU' : num_CPU,
                                        'GPU' : num_GPU
                       )

session = tf.Session(config=config)
K.set_session(session)

【讨论】:

TF 2.0 中没有 Session 和 ConfigProto

以上是关于如何减少 Tensorflow/Keras 使用的 CPU 数量?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 TFRecord 数据集使 TensorFlow + Keras 快速运行?

如何解决 tensorflow.keras 中的值错误?

如何在训练 tensorflow.keras 期间替换损失函数

如何选择/配置 AWS GPU 实例以加速 TensorFlow.keras?

TensorFlow 2.0 Keras:如何为 TensorBoard 编写图像摘要

Tensorflow,Keras:如何创建仅在特定位置更新的可训练变量?