如何在 TensorFlow 2 中重置初始化

How to reset initialization in TensorFlow 2

提问人:joel 提问时间:1/7/2020 最后编辑:joel 更新时间:10/26/2023 访问量:3922

问:

如果我在初始化 TensorFlow 2 后尝试更改并行度,tf.Variable

import tensorflow as tf
_ = tf.Variable([1])
tf.config.threading.set_inter_op_parallelism_threads(1)

我收到错误

RuntimeError:初始化后无法修改操作间并行性。

我理解为什么会这样,但它(可能还有其他因素)导致我的测试相互干扰。例如

def test_model():  # this test
   v = tf.Variable([1])
   ...

def test_threading():  # is breaking this test
   tf.config.threading.set_inter_op_parallelism_threads(1)
   ...

如何重置 TensorFlow 状态以便设置线程?

Python TensorFlow pytest tensorflow2.0

评论


答:

4赞 thushv89 1/7/2020 #1

这可以通过“黑客”的方式实现。但我建议以正确的方式执行此操作(即在开始时设置配置)。

import tensorflow as tf
from tensorflow.python.eager import context

_ = tf.Variable([1])

context._context = None
context._create_context()

tf.config.threading.set_inter_op_parallelism_threads(1)

编辑:在开始时设置配置是什么意思,

import tensorflow as tf
from tensorflow.python.eager import context

tf.config.threading.set_inter_op_parallelism_threads(1)
_ = tf.Variable([1])

但在某些情况下,你不能总是这样做。只是指出了在 中设置配置的传统方法。因此,如果您的情况不允许您在开始时进行修复,则必须重置您的解决方案,如上面的解决方案所示。tftf.configtf.eager.context

评论

0赞 joel 1/7/2020
您能详细说明一下在开始时设置配置吗?
0赞 thushv89 1/7/2020
我是说,首先设置所有必要的属性,然后继续进行计算。在您的示例中,它将是第一个和 .但我明白,根据您的情况,这可能是不可能的。只是建议尽可能坚持这种格式。tf.configtf.config.threading....tf.Variable(...)
0赞 joel 1/7/2020
我不明白您的建议是否(以及如何)清除上下文。你能在回答中解释一下吗?例如,我认为没有办法为 或tf.config.threadingtf.Variable
0赞 joel 1/7/2020
请记住,我无法控制 VS 的执行顺序:每个调用都在单独的测试中,顺序由测试运行程序确定tf config.threading...tf.Variable
0赞 thushv89 1/7/2020
是的,正如我所说,那么我的第一点不适用于你。但我说的是首先要有你的 Graph 相关组件和操作。但是我发布的解决方案应该适合您。tf.configtf
0赞 Sarah Masud 10/26/2023 #2

扩展 @thushv89 提供的解决方案,我们还可以通过以下方式直接设置上下文

from tensorflow.python.eager import context
context.context().intra_op_parallelism_threads = <num_threads>
context.context().inter_op_parallelism_threads = <num_threads>
import tensorflow as tf

此处提供了 和 thread 函数的详细信息get()set()