Как уменьшить размер контекста CUDA (многопроцессорная служба)

Я последовал за Робертом Crovella в пример о том, как использовать от Nvidia Multi-Process Service. Согласно документам:

2.1.2. Уменьшенное хранилище контекста на GPU

Без MPS каждый процесс CUDA с использованием графического процессора выделяет отдельное хранилище и ресурсы планирования на графическом процессоре. Напротив, сервер MPS выделяет одну копию хранилища GPU и ресурсов планирования, совместно используемых всеми его клиентами.

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

А теперь вернемся к примеру. Без MPS:

А с MPS:

К сожалению, каждый процесс по-прежнему занимает практически такой же (~300 МБ) объем памяти. Разве это не противоречит документации? Есть ли способ уменьшить потребление памяти процессом?

2 ответа

Решение

К сожалению, я слишком настойчиво спрашивал, прежде чем проверять использование памяти на другой (до Volta) карте, и да, разница действительно есть. Позвольте мне просто опубликовать его здесь для справок в будущем, если кто-то еще наткнулся на эту проблему:

MPS выключен:

MPS на:

Действительно, как видно здесь, в архитектуре Volta вы можете видеть, как процессы взаимодействуют напрямую с графическим процессором, без сервера MPS посередине:

Клиенты Volta MPS отправляют работу непосредственно в GPU, минуя сервер MPS.

Это легко увидеть на вашем первом скриншоте, где t1034 процессы указаны как использующие GPU.

Напротив, в архитектурах до Volta клиентские процессы взаимодействуют с графическим процессором через сервер MPS. Это приводит к тому, что на последнем снимке экрана видно, что только процесс сервера MPS напрямую взаимодействует с графическим процессором.

Другие вопросы по тегам