Jih*_*Seo 5 python keras tensorflow2
我想限制 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)
Run Code Online (Sandbox Code Playgroud)
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)
Run Code Online (Sandbox Code Playgroud)
3) “来自 Tensorflow 的 keras”
import os
os.environ['TF_NUM_INTRAOP_THREADS'] = '2'
os.environ['TF_NUM_INTEROP_THREADS'] = '4'
Run Code Online (Sandbox Code Playgroud)
这三种方式影响一样吗?
最后我理解了我在下面写的参数
这是正确的吗?如果我错过了理解,请告诉我。
谢谢你。
不完全是,事情没那么简单。根据官方文件 -
intra_op_parallelism_threads - 某些操作(例如矩阵乘法和归约)可以利用并行线程来加速。值 0 表示系统选择合适的数字。参考这个
inter_op_parallelism_threads - 确定独立非阻塞操作使用的并行线程数。0 表示系统选择合适的数字。参考这个
所以从技术上来说你不能限制CPU的数量,而只能限制并行线程的数量,这对于限制资源消耗来说就足够了。
关于方法,您正在使用 -
第三种方法允许您直接使用os库设置环境变量。
import os
os.environ['TF_NUM_INTRAOP_THREADS'] = '2'
os.environ['TF_NUM_INTEROP_THREADS'] = '4'
Run Code Online (Sandbox Code Playgroud)
第二种方法是 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)
Run Code Online (Sandbox Code Playgroud)
第一种方法适用于独立的 Keras。如果 keras 设置为张量流后端,则此方法将起作用。同样,它执行间接设置环境变量的相同操作。
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)
Run Code Online (Sandbox Code Playgroud)
如果您仍然有疑问,可以在独立运行所有 3 个命令后检查环境变量发生了什么,然后使用os-检查特定变量
print(os.environ.get('KEY_THAT_MIGHT_EXIST'))
Run Code Online (Sandbox Code Playgroud)
为了更好地理解该主题,您可以查看此链接,其中详细介绍了该主题。
太长了;如果您使用 tf2,则可以使用第二种或第三种方法。如果您使用带有张量流后端的独立 Keras,则使用第一种或第三种方法。
| 归档时间: |
|
| 查看次数: |
171 次 |
| 最近记录: |