Ограничьте MPI для запуска на одном графическом процессоре, даже если у нас есть одна установка для нескольких графических процессоров Node - PullRequest
1 голос
/ 20 марта 2020

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

Команда, которую я использую для запуска программы: mpirun -np 4 ./a.out

Но он по умолчанию работает на 2 доступных графических процессорах на моем компьютере. Есть ли способ заставить его работать только на одном GPU, и если да, то как?

Заранее спасибо :)

1 Ответ

0 голосов
/ 25 марта 2020

Вы можете управлять активными графическими процессорами, устанавливая некоторые переменные среды (например, GPU_DEVICE_ORDINAL, ROCR_VISIBLE_DEVICES или HIP_VISIBLE_DEVICES, см. this или this для получения дополнительной информации. ).

Например:

export HIP_VISIBLE_DEVICES=0
mpirun -np 4 ./a.out
# or 
HIP_VISIBLE_DEVICES=0 mpirun -np 4 ./a.out

Будьте осторожны, чтобы некоторые реализации MPI не экспортировали все переменные окружения или могли перезагрузить ваш bashr c или cshr c. Поэтому использовать синтаксис MPI для установки envvars безопаснее:

# with openmpi 
mpirun -x HIP_VISIBLE_DEVICES=0 -np 4 ./a.out

# or with mpich
mpiexec -env HIP_VISIBLE_DEVICES 0 -n 4 ./a.out

Чтобы быть в безопасности, вероятно, было бы неплохо добавить это в код C ++:

#include <stdlib.h>
// ...
char* hip_visible_devices = getenv("HIP_VISIBLE_DEVICES");
if (hip_visible_devices) std::cout << "Running on GPUs: " << hip_visible_devices << std::endl;
else std::cout << "Running on all GPUs! " << std::endl;

( обратите внимание, что у cuda есть и envvar, и CudaSetDevice (id) с C функцией, мне интересно, есть ли эквивалент для AMD или openCL).

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