Ограничение доступа к ресурсам для Cuda и OpenCL - PullRequest
2 голосов
/ 02 ноября 2010

Мы хотим расширить нашу пакетную систему для поддержки вычислений на GPU.

Проблема в том, что с точки зрения пакетной системы, GPU является ресурсом.Мы можем легко подсчитать используемые ресурсы, но нам также нужно ограничить доступ к ним.

Для графических процессоров это означает, что для каждого задания требуется только графический процессор (когда запрашивается графический процессор).

ОтКак мне сказали, совместное использование графических процессоров между заданиями - очень плохая идея (поскольку часть заданий в графическом процессоре может быть уничтожена случайным образом).

Итак, мне нужен какой-то способ ограничения доступа к графическим процессорам для CUDA иOpenCL.Пакетная система имеет привилегии root.Я могу ограничить доступ к устройствам в /dev/ с помощью cgroups, но я решил, что в этом случае этого будет недостаточно.

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

Ответы [ 3 ]

4 голосов
/ 03 ноября 2010

На данный момент существует два соответствующих механизма:

  • Используйте nvidia-smi, чтобы перевести устройства в эксклюзивный режим. Таким образом, если процесс имеет графический процессор, никакой другой процесс не может подключиться к тому же графическому процессору.
  • Используйте переменную CUDA_VISIBLE_DEVICES, чтобы ограничить, какие графические процессоры видит процесс, когда он ищет графический процессор.

Последний, конечно, может быть оскорблен, но сейчас это начало.

Из того, что мне сказали, совместное использование графических процессоров между заданиями - очень плохая идея (потому что часть заданий в графическом процессоре может быть убита случайным образом).

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

1 голос
/ 02 ноября 2010

Я считаю, что есть две вещи, которые могут помочь с графическими процессорами NVIDIA CUDA:

  1. Переведите графические процессоры в режим «Compute Exclusive» с помощью инструмента nvidia-smi
  2. Проинструктируйте пользователей использовать вызов no-args cudaSetDevice (), который автоматически выберет неиспользуемый графический процессор
  3. Попросите пользователей использовать другие средства инициализации устройства, отличные от cudaSetDevice, как описано в разделе 8.3 «Руководства по передовому опыту»

Я не уверен, как этого добиться для OpenCL.

0 голосов
/ 26 июля 2011

Я разработал библиотеку, которая будет сортировать доступные платформы и устройства OpenCL.Он подберет лучшее устройство на платформе.Затем он пытается создать контекст для него.Если это не удается, он переходит к следующему в списке.Список отсортирован по количеству вычислительных блоков.

Поддерживаются nvidia (gpu), amd (gpu & cpu), intel (cpu) и apple (gpu & cpu).это механизм блокировки для эксклюзивного доступа.Это не самый лучший, хотя.Я все еще ищу лучшее решение.В основном он сохраняет файл с платформой + устройство, используемое в /tmp.

Это то, что мы используем в нашей лаборатории.Он доступен под GPLv3 и может быть найден на github: https://github.com/nbigaouette/oclutils/

...