我正在为模型做一些基准测试代码,并尝试使用不同数量的线程进行推理。代码如下:
import tensorflow as tf
def benchmark_model(model_config, num_threads):
# not sure if this is required but still..
tf.reset_default_graph()
# expect this session context manager to reset its state on every call ??
with tf.Session(graph=tf.Graph(),
config=tf.ConfigProto(
intra_op_parallelism_threads=num_threads,
inter_op_parallelism_threads=num_threads)) as session:
graph = tf.get_default_graph()
tf.saved_model.loader.load(session, [tf.saved_model.tag_constants.SERVING], model_config.export_dir)
# some number of iteration and printing out timers
session.run(...)
for num_thread in [1, 16, 32, 64]:
benchmark_model(model_config, num_thread)
对于给定的模型,我观察到的分析结果是相同的。结果由为第一次会话配置的线程数(在本例中为“ 1”)确定。
当我更改列表[1,16,32,64]的顺序时-> [64,32,16,1]:我得到num_threads = 64的性能分析结果。
如何重设会话以在同一程序中使用其他配置?
我验证并知道我的会话正在重新使用旧配置的方式是因为最初我只是一次只为一个配置运行python脚本,所以我知道1个vs 64个线程的结果非常不同,但是当我试图在一个循环中运行它,它不起作用。 关于正在发生的事情以及如何解决的任何指示。