Как изменить per_process_gpu_memory_fraction в тензорном потоке, используя c ++? - PullRequest
0 голосов
/ 27 сентября 2018

Я разработал два приложения на основе tf на языке c ++, эти приложения служат библиотеками.В исполняемой программе вызывающей стороны library1 называется затем library2.При инициализации library1 доля памяти gpu устанавливается равной 0,5, выполняется некоторый вывод и сеанс закрывается.затем вызывается library2, доля памяти gpu установлена ​​на 0.8, но настройка не может работать, распределение памяти gpu не изменилось.Обе библиотеки имеют одинаковый код инициализации, но различаются значения дроби

int XXXLib::init(double per_process_gpu_memory_fraction)
{
    SessionOptions options;
    ConfigProto* config = &options.config;
    GPUOptions* gpu_options = config->mutable_gpu_options();

    // for library1, fraction = 0.5; for library2, fraction = 0.8
    gpu_options->set_per_process_gpu_memory_fraction(per_process_gpu_memory_fraction);
    Status status = NewSession(options, &_session);
}

Кажется, что при вызове set_per_process_gpu_memory_fraction () память GPU в этом процессе фиксируется, даже новая еще одна Newsession (), исходное значение дроби

  1. Должны ли разные приложения (библиотеки) использовать разные сеансы?
  2. доля памяти gpu связана с сеансом или процессом?
  3. Как изменить дробьв другой сессии, но тот же процесс?

Некоторая информация env:

  • Написал ли я собственный код?НЕТ
  • ОС Платформа и распространение?Win10 Pro
  • TensorFlow установлен с?Исходный код
  • Версия TensorFlow?1.9
  • CUDA / cuDNN версия?CUDA9.0, cudnn 7.05
  • Модель GPU и память?GTX1080 с 8 ГБ памяти

1 Ответ

0 голосов
/ 03 октября 2018

К сожалению, но в текущем TensorFlow (1.11) распределитель памяти GPU создается один раз (для каждого устройства GPU) - при первом создании сеанса в процессе.Изменение per_process_gpu_memory_fraction в следующих сеансах не будет иметь никакого эффекта.

Что касается вашей библиотеки, я бы предложил не создавать сеансы внутри нее.Попросите пользователя предоставить вам сеанс, который он настраивает по своему усмотрению.Кроме того, вы можете просто создать график и вернуть операции для запуска.Затем пользователь может запускать их по своему усмотрению.

...