Память GPU не увеличивается пропорционально количеству моделей в pytorch и тензорном потоке - PullRequest
0 голосов
/ 03 июля 2019

Я считаю, что загрузка большего количества моделей в одном процессе Python потребляет гораздо меньше памяти GPU, чем загрузка каждой модели в другом процессе Python.

Предположим, что следующий код выполняется в двух процессах Python:

import torch
import time
import torchvision.models as models

device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')

model = models.densenet161(pretrained=False).to(device)

print('loaded')

time.sleep(1000)

Вывод nvidia-smi будет:

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|    0     12546      C   python                                       773MiB |
|    0     13218      C   python                                       773MiB |
+-----------------------------------------------------------------------------+

Это разумно, потому что мы загрузили две модели.Но если я загружаю две модели в одном процессе, т. Е. Запускаю следующий код:

import torch
import time
import torchvision.models as models

device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')

model = models.densenet161(pretrained=False).to(device)
model2 = models.densenet161(pretrained=False).to(device)

print('loaded')

time.sleep(1000)

Вывод nvidia-smi показывает, что он потребляет гораздо меньше памяти, чем в предыдущей ситуации.

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|    0     13448      C   python                                       885MiB |
+-----------------------------------------------------------------------------+

Это какой-то метод повторного использования кэша, используемый pytorch?PS Я наблюдал это явление и в моделях тензорного потока.

Проблема в том, что мне нужно развернуть несколько моделей Pytorch, и каждая из них требует много памяти GPU.Я не хочу помещать все эти модели в один серверный процесс.Я хочу управлять каждой моделью с помощью докер-контейнеров.Но если я разверну модель в разных док-контейнерах, эти модели будут потреблять гораздо больше памяти GPU, чем я могу предложить.Каково решение моей ситуации?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...