Я считаю, что загрузка большего количества моделей в одном процессе 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, чем я могу предложить.Каково решение моей ситуации?