Колебания времени работы тензорного потока - PullRequest
0 голосов
/ 03 мая 2018

Я хочу измерить время, которое требуется моему сеансу для выполнения операций вывода. Я измерил его, используя time, вот так

start = time.clock()
sess.run([ops['pred']], feed_dict=feed_dict)
end = time.clock()
elapsed_time_batch = end-start

Я делаю это несколько раз на одном и том же наборе данных и в среднем. Проблема в том, что я получаю очень разные средние измерения времени (1,7 мс против 1,2 мс). Несмотря на то, что «просто» разница 0,5 мс, это большая относительная разница (0,5 против 1,7 составляет около 30%).

Я попытался установить некоторые параметры графического процессора для сеанса следующим образом:

config = tf.ConfigProto()
config.gpu_options.per_process_gpu_memory_fraction = 0.95
config.gpu_options.allow_growth = False
config.allow_soft_placement = True
config.log_device_placement = False
if limit_gpu:
        gpu_idx = str(gpu_idx)
        os.environ["CUDA_VISIBLE_DEVICES"] = gpu_idx
else:
        os.environ["CUDA_VISIBLE_DEVICES"] = "0, 1"
sess = tf.Session(config=config)

Но это не решило это. Что может быть причиной этого изменения и как я могу стабилизировать его, чтобы получить более надежное время чтения.

Я работаю на сервере Linux с 4 GPUS (для этого теста я ограничился 1 GPU - Titan Xp).

1 Ответ

0 голосов
/ 06 мая 2018

Я в конце концов понял это, поэтому я публикую ответ здесь для тех, кто может столкнуться с этим в будущем.

Кажется, что функция time.clock() не является правильным выбором здесь (см. этот ответ для подробностей).

Решением является использование функции timeit.timer():

from timeit import default_timer as timer
start = timer()
sess.run([ops['pred']], feed_dict=feed_dict)
end = timer()
elapsed_time_batch = end-start
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...