1

我有多个 GPU 卡(NO.0,NO.1 ...),每次我在 NO.1 或 2 ...(0 除外)卡上运行caffe进程时,它都会在 NO 上使用 73MiB。 0 卡。

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

多显卡

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

4

1 回答 1

1

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

如果要防止这种情况,一种选择是在启动进程时使用CUDA_VISIBLE_DEVICES 环境变量。

例如,如果您想阻止 CUDA 对卡“0”执行任何操作,您可以执行以下操作(在 linux 上):

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

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

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

于 2015-04-06T23:58:37.810 回答