Вопрос:
Кажется, что между выводами наблюдается небольшое время простоя, когда используются кераты с тензорным внутренним потоком, показанным в nvprofiler.Прикрепленное изображение моего терминала показывает, что для keras требуется ~ 80 мс на каждый вывод, в то время как проверка с помощью nvprofiler показывает, что вычисление занимает 62 мс (включая копирование с хоста на устройство и копирование с устройства на хост), и в основном все время простаивает.Кроме того, существует разница в среднем времени вывода (между 80 ~ 150 мс) каждый раз, когда я запускаю приведенный ниже код, и я не уверен, почему это так.
- Мне было интересно, есть лилюбой способ ускорить время вывода за счет сокращения этого времени простоя.
- Другой вопрос - я пропустил некоторые шаги, такие как очистка памяти графического процессора, которые вызывают разницу во времени вывода.
Вход для моей модели (1 800 700 36), который в основном представляет собой облако точек в вокселизированной сетке.Вывод: 2 матрицы (1 200 175,1) & (1 x 200 175,6).
Настройка:
- Ubuntu 16.04
- Intel (R) Core (TM) i7-7820X CPU
- GeForce GTX 980
- Python 2.7
- Tensorflow 1.12.0
- Keras 2.2.4
Попытки уменьшить время простоя логического вывода
Разрешение динамически расти памяти на графическом процессоре
config.gpu_options.allow_growth = True
Limitмаксимальное использование графического процессора
config.gpu_options.per_process_gpu_memory_fraction = 0.66
Установить этап обучения для тестирования
keras.backend.set_learning_phase(0)
Измените размер пакета на Нет и размер шага на 1. Изменение размера партии на 1 и размер шага на Нет замедляет вывод
model.predict(input_data, batch_size=None, verbose=1, steps=1)
Вывод на терминал
Вывод подробного keras в терминале, который показывает, что каждый шаг занимает ~ 80мс
Тот же код, Вывод подробного keras в терминале, который показывает каждый шаг ~ 100ms
Изображения профилировщика NV
Как NV profiler очень длинный, я разделил образ на 3 части и минимизировал потоки процессов, которые ничего не выполняли в течение этого периода.Изображения показывают, что фактический расчет занимает ~ 60 мс, а графический процессор в основном ничего не делает в течение 20 мс.Этот холостой ход меняется от запуска к запуску и иногда достигает 70 мс.
Часть 1, время между зелеными линиями ничего не делает
Часть 2время между зелеными линиями ничего не делает
часть 3, время между зелеными линиями ничего не делает
код
import numpy as np
import tensorflow as tf
import keras.backend.tensorflow_backend
from keras.backend.tensorflow_backend import set_session
from keras.models import load_model
config = tf.ConfigProto()
config.gpu_options.per_process_gpu_memory_fraction = 0.66
sess = tf.Session(config=config)
set_session(sess)
keras.backend.set_learning_phase(0)
losses = {
"binary_crossentropy" : "binary_crossentropy",
"huber_loss" : losses.huber_loss,
}
model = load_model('/home/louis/pixor/models/city_trainin_set/pixor_model_10_0.008.hdf5', custom_objects=losses)
obj = massage_own_label(base_dir,data)
input_data = obj.process_input_data(obj.load_pc_data(0))
for i in range(0,100):
out_class, out_labels = model.predict(input_data, batch_size=None, verbose=1, steps=1)