В настоящее время я работаю над проектом, который требует глубокого изучения с помощью C API Tensorflow.У меня есть обученная нейронная сеть (формат: замороженный график), чтобы сделать это.Мы используем вывод для вычислительной гидродинамики, что делает производительность ключевым аспектом для меня.Например, одно моделирование включает в себя тысячи временных шагов.На каждом временном шаге вывод должен выполняться для тысяч наборов входных данных.В моем текущем случае у меня есть вычислительная область, включающая 33400 ячеек и 880 граничных патчей.Это означает, что для каждого из этих тысяч шагов я должен сделать вывод 34280 раз.Мы используем 3 входных и 15 выходных значений.
Весь процесс вывода (от предоставления входных значений до получения выходных значений) требует всего 91 миллисекунды на моем графическом процессоре.Фактический шаг вывода: TF_SessionRun (...) составляет 98% времени вычислений.
TF_CAPI_EXPORT extern void TF_SessionRun(
TF_Session* session,
// RunOptions
const TF_Buffer* run_options,
// Input tensors
const TF_Output* inputs, TF_Tensor* const* input_values, int ninputs,
// Output tensors
const TF_Output* outputs, TF_Tensor** output_values, int noutputs,
// Target operations
const TF_Operation* const* target_opers, int ntargets,
// RunMetadata
TF_Buffer* run_metadata,
// Output status
TF_Status*);
Теперь проблема заключается в том, что мне нужно сделать вывод 34280 раз за каждый шаг, который затем занимаетпримерно 52 минуты.Это означает, что для тысяч временных шагов время вычислений велико.
Удивительно, но если я преобразую замороженный график в uff-модель и сделаю вывод, используя TensorRT, мне потребуется всего 90 миллисекунд для всех 34280 входных наборов,Это означает, что ускорение TensorRT по сравнению с API C составило бы около 35000. Поскольку мы хотим сделать вывод об архитектуре только с ЦП, позже TensorRT для меня не вариант.
Мой вопрос: знаете ли вы способ использования C API Tensorflow таким образом, который резко сокращает время вычислений для нескольких выводов?Узким местом, безусловно, является команда TF_SessionRun (...), но я не вижу способа выполнить 34280 выводов, вызвав команду только один раз.Кроме того, команда предоставляет несколько параметров (параметры запуска, метаданные запуска, целевые операции, количество целей - см. Код выше), которые не используются ни в одном примере из тех, которые я нашел в Интернете.Может быть, они могут быть использованы для повышения производительности?