"Keras backend + Tensorflow" 和 "Keras from Tensorflow" 使用 CPU 有什么区别(在 Tensorflow 2.x 中)
What is difference between "Keras backend + Tensorflow" and "Keras from Tensorflow" using CPU(in Tensorflow 2.x)
我想限制 CPU 个内核和线程。
所以我找到了三种方法来限制这些。
1) “Keras 后端 + Tensorflow”
from keras import backend as K
import tensorflow as tf
config = tf.ConfigProto(intra_op_parallelism_threads=2, \
inter_op_parallelism_threads=4, \
allow_soft_placement=True, \
device_count = {'CPU': 1})
session = tf.Session(config=config)
K.set_session(session)
2)“来自 Tensorflow 的 Keras”
import tensorflow as tf
from tensorflow import keras
tf.config.threading.set_intra_op_parallelism_threads(2)
tf.config.threading.set_inter_op_parallelism_threads(4)
3) “来自 Tensorflow 的 keras”
import os
os.environ['TF_NUM_INTRAOP_THREADS'] = '2'
os.environ['TF_NUM_INTEROP_THREADS'] = '4'
这三种方式的影响是一样的吗?
最后我理解了下面写的参数
- intra_op_parallelism_threads(“CPU 核心数”)
- inter_op_parallelism_threads("线程数")
这样对吗?
如果我理解有误,请告诉我。
谢谢。
不完全是,没那么简单。根据官方文档 -
intra_op_parallelism_threads - 矩阵乘法和缩减等某些操作可以利用并行线程进行加速。值为 0 表示系统选择适当的数字。 Refer this
inter_op_parallelism_threads - 确定独立non-blocking operations. 0 means the system picks an appropriate number. Refer this
使用的并行线程数
所以技术上不能限制CPU数量,只能限制并行数量threads,为了限制资源消耗,就足够了。
关于方法,您使用的是-
第三种方法允许您使用 os
库直接设置环境变量。
import os
os.environ['TF_NUM_INTRAOP_THREADS'] = '2'
os.environ['TF_NUM_INTEROP_THREADS'] = '4'
第二种方法是tf2中的一个方法,做的完全一样(设置环境变量),不同的是现在Keras被打包进了tf2。
import tensorflow as tf
from tensorflow import keras
tf.config.threading.set_intra_op_parallelism_threads(2)
tf.config.threading.set_inter_op_parallelism_threads(4)
第一种方法适用于独立的 Keras。如果将 keras 设置为 tensorflow 后端,则此方法将起作用。同样,它会间接设置环境变量。
from keras import backend as K
import tensorflow as tf
config = tf.ConfigProto(intra_op_parallelism_threads=2, \
inter_op_parallelism_threads=4, \
allow_soft_placement=True, \
device_count = {'CPU': 1})
session = tf.Session(config=config)
K.set_session(session)
如果你还有疑问,你可以独立检查运行所有3个之后的环境变量发生了什么,然后使用os
和-
检查具体变量
print(os.environ.get('KEY_THAT_MIGHT_EXIST'))
为了更好地理解该主题,您可以 check this link 详细说明。
TLDR; 如果您使用的是 tf2,则可以使用第二种或第三种方法。如果您使用带有 tensorflow 后端的独立 Keras,则使用第一种或第三种方法。
我想限制 CPU 个内核和线程。 所以我找到了三种方法来限制这些。
1) “Keras 后端 + Tensorflow”
from keras import backend as K
import tensorflow as tf
config = tf.ConfigProto(intra_op_parallelism_threads=2, \
inter_op_parallelism_threads=4, \
allow_soft_placement=True, \
device_count = {'CPU': 1})
session = tf.Session(config=config)
K.set_session(session)
2)“来自 Tensorflow 的 Keras”
import tensorflow as tf
from tensorflow import keras
tf.config.threading.set_intra_op_parallelism_threads(2)
tf.config.threading.set_inter_op_parallelism_threads(4)
3) “来自 Tensorflow 的 keras”
import os
os.environ['TF_NUM_INTRAOP_THREADS'] = '2'
os.environ['TF_NUM_INTEROP_THREADS'] = '4'
这三种方式的影响是一样的吗?
最后我理解了下面写的参数
- intra_op_parallelism_threads(“CPU 核心数”)
- inter_op_parallelism_threads("线程数")
这样对吗? 如果我理解有误,请告诉我。
谢谢。
不完全是,没那么简单。根据官方文档 -
intra_op_parallelism_threads - 矩阵乘法和缩减等某些操作可以利用并行线程进行加速。值为 0 表示系统选择适当的数字。 Refer this
inter_op_parallelism_threads - 确定独立non-blocking operations. 0 means the system picks an appropriate number. Refer this
使用的并行线程数所以技术上不能限制CPU数量,只能限制并行数量threads,为了限制资源消耗,就足够了。
关于方法,您使用的是-
第三种方法允许您使用 os
库直接设置环境变量。
import os
os.environ['TF_NUM_INTRAOP_THREADS'] = '2'
os.environ['TF_NUM_INTEROP_THREADS'] = '4'
第二种方法是tf2中的一个方法,做的完全一样(设置环境变量),不同的是现在Keras被打包进了tf2。
import tensorflow as tf
from tensorflow import keras
tf.config.threading.set_intra_op_parallelism_threads(2)
tf.config.threading.set_inter_op_parallelism_threads(4)
第一种方法适用于独立的 Keras。如果将 keras 设置为 tensorflow 后端,则此方法将起作用。同样,它会间接设置环境变量。
from keras import backend as K
import tensorflow as tf
config = tf.ConfigProto(intra_op_parallelism_threads=2, \
inter_op_parallelism_threads=4, \
allow_soft_placement=True, \
device_count = {'CPU': 1})
session = tf.Session(config=config)
K.set_session(session)
如果你还有疑问,你可以独立检查运行所有3个之后的环境变量发生了什么,然后使用os
和-
print(os.environ.get('KEY_THAT_MIGHT_EXIST'))
为了更好地理解该主题,您可以 check this link 详细说明。
TLDR; 如果您使用的是 tf2,则可以使用第二种或第三种方法。如果您使用带有 tensorflow 后端的独立 Keras,则使用第一种或第三种方法。