单个程序出现在两个 GPU 卡上

A single program appear on two GPU card

我有多个 GPU 卡(0 号,1 号 ...),每次我 运行 在 1 号或 2 号上进行 caffe 处理...(除了0)卡,会用掉0号卡上的73MiB

例如下图中,进程11899在0号卡上会使用73MiB,但实际上在1号卡上运行。

为什么?我可以禁用此功能吗?

CUDA驱动就像一个操作系统。当它处于活动状态时,它将为各种目的保留内存。某些特性,例如 managed memory,可能会导致大量的副作用分配发生(尽管我认为 Caffe 不会出现这种情况)。由于某种原因,应用程序本身甚至可能在这些设备上进行一些显式分配。

如果您想防止这种情况发生,一种选择是在启动进程时使用 CUDA_VISIBLE_DEVICES environment variable

例如,如果你想阻止 CUDA 对卡“0”做任何事情,你可以这样做(在 linux):

CUDA_VISIBLE_DEVICES="1,2" ./my_application ...

请注意,上面使用的枚举(CUDA 枚举)与 deviceQuery 示例应用报告的枚举相同,但不一定与 nvidia-smi(NVML枚举)。您可能需要进行试验,否则 运行 deviceQuery 以确定要使用哪些 GPU,以及要排除哪些 GPU。

另请注意,使用此选项实际上会影响应用程序可见的设备,并将导致设备枚举的重新排序(之前为“1”的设备将显示为设备“0” “, 例如)。因此,如果您的应用程序是多 GPU 感知的,并且您正在选择要使用的特定设备,那么当您使用此环境变量时,您可能需要更改您(或应用程序)正在选择的特定设备。