即使我们具有单节点多GPU设置,也要限制MPI在单个GPU上运行

问题描述 投票:1回答:1

我是分布式计算的新手,我正在尝试运行一个使用MPI和ROCm(AMD框架在GPU上运行的程序)。

我用来运行程序的命令是mpirun -np 4 ./a.out

但是默认情况下,它在我的计算机上可用的2个GPU上运行。有没有一种方法可以使其仅在单个GPU上运行,如果可以,怎么办?

预先感谢:)

mpi distributed-computing gpgpu hpc
1个回答
0
投票

您可以通过设置一些环境变量来控制活动GPU(例如GPU_DEVICE_ORDINALROCR_VISIBLE_DEVICESHIP_VISIBLE_DEVICES,有关更多详细信息,请参见thisthis。)>

例如:

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

请注意,某些MPI实现不会导出所有环境变量,否则可能会重新加载您的bashrc或cshrc。因此,使用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和C函数CudaSetDevice(id),我想知道是否有与AMD或openCL等效的功能。

© www.soinside.com 2019 - 2024. All rights reserved.