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