Почему GPU-Util равен нулю при высоком использовании памяти GPU во время вывода глубокой модели?

#python #tensorflow #keras #gpu

Вопрос:

Фон

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

Проблема

Я использую модуль keras в tensorflow для загрузки хорошо обученной модели DNN для задачи классификации цифр MNIST. В принципе, мне нужно следующее: введите пакет изображений в модель DNN, и модель выведет соответствующий пакет оценок. Поскольку мне нужно повторять такой процесс много раз, я хотел бы использовать акклерацию GPU. Поэтому я указал в коде с

 with tf.device('/gpu:1'):  

,который, в идеале, должен использовать второй графический процессор.

Однако, когда я запустил свою программу на python, я обнаружил, что она работает очень и очень медленно. Информация о моем процессоре дает: Информацию о процессоре, в котором процесс python3 должен быть моей программой на python.

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

  • 2-й графический процессор (GPU 1) полностью занят своей памятью
  • 2-й графический процессор не имеет GPU-утилиты
  • в моем контейнере не выполняется ни один процесс на GPU

Исходя из приведенной выше информации, я подозреваю, что моя программа полностью работает на процессоре.

Установка

Основные аппаратные и программные настройки моего сервера перечислены ниже:

  1. ос:
 Linux e46efe9289d3 5.4.0-72-generic #80~18.04.1-Ubuntu SMP Mon Apr 12 23:26:25 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux  
  1. ЦП:
 128 AMD Ryzen Threadripper 3990X 64-Core Processor  
  1. Графический процессор:
 GPU 0: NVIDIA GeForce RTX 3090 (UUID: ) GPU 1: NVIDIA GeForce RTX 3090 (UUID: ) GPU 2: NVIDIA GeForce RTX 3090 (UUID: ) GPU 3: NVIDIA GeForce RTX 3090 (UUID: )  
  1. CUDA:
 nvcc: NVIDIA (R) Cuda compiler driver Copyright (c) 2005-2021 NVIDIA Corporation Built on Sun_Aug_15_21:14:11_PDT_2021 Cuda compilation tools, release 11.4, V11.4.120 Build cuda_11.4.r11.4/compiler.30300941_0  
  1. CUDNN:
 #define CUDNN_MAJOR 8 #define CUDNN_MINOR 2 #define CUDNN_PATCHLEVEL 4  
  1. tensorflow (версия для GPU):
 gt;gt;gt; tf.__version__ '2.5.0'  

Справка

Можете ли вы помочь мне развернуть задачу вывода DNN на GPU?

Комментарии:

1. Что такое «очень, очень медленно», как в цифрах? Кроме того, вам не нужны 4 графических процессора для обучения или вывода на модели MNIST, так как это очень маленькие модели.

2. И у вас неправильные выводы, используются три графических процессора, поэтому вы не можете сделать вывод, что ваш код работает на процессоре.

3. 1. «очень-очень медленно», значит, она занимает около 30-е годы по 100 раз вывода, с размер пакета = 2; 2. так как я в контейнере, есть и другие пользователи, работающие программ на остальные видеокарты, а я не вижу их процессы nvidia-smi команды, поэтому я считаю, что у меня есть правильный вывод

4. Журналы tensorflow фактически сообщают вам, был ли обнаружен графический процессор, и если он используется, вы не можете определить, используется ли графический процессор, посмотрев на использование. Также для повышения производительности увеличьте размер пакета, размер пакета 2 смехотворно мал, попробуйте, по крайней мере, 128 или даже выше до 1024, графические процессоры являются массово параллельными процессорами, поэтому им требуется хорошее количество параллелизма.

5. Чтобы быть более подробным об использовании, графические процессоры-это массивные процессоры, если у вас крошечная модель MNIST с небольшим размером пакета, легко получить загрузку от 0,0 до 1,0, а если загрузка составляет менее 1,0%, она будет равна нулю, поэтому вы не можете использовать загрузку для определения того, используется ли графический процессор или нет.