Я делаю некоторый тестовый код для моих моделей и пытаюсь выполнить вывод с различным количеством потоков.Код выглядит следующим образом:
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 против 64 сильно отличаются, но когда я пытался запустить его в цикле, он не работает.Любые указатели на то, что происходит и как решить.