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

时间:2015-04-06 23:46:57

标签: cuda gpu caffe

我有多张GPU卡(NO.0,NO.1 ......),每次我在NO.1或2 ...(除了0)卡上运行caffe进程时,它都会在NO.0卡上消耗73MiB。

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

multi_gpus

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

1 个答案:

答案 0 :(得分: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感知功能,并且您正在选择要使用的特定设备,则在使用此环境变量时,可能需要更改您(或应用程序)正在选择的特定设备。