我有多个 GPU 卡(NO.0,NO.1 ...),每次我在 NO.1 或 2 ...(0 除外)卡上运行caffe进程时,它都会在 NO 上使用 73MiB。 0 卡。
例如,在下图中,进程 11899 将在 NO.0 卡上使用 73MiB,但它实际上在 NO.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,并且您正在选择使用特定设备,则在使用此环境变量时,您可能需要更改您(或应用程序)正在选择的特定设备。