我正在使用“fujitsu”机器。它安装了2个GPU:Quadro 2000和Tesla C2075。 Quadro GPU有1 GB RAM,Tesla GPU有5GB。 (我使用nvidia-smi -q的输出检查)。当我运行nvidia-smi时,输出显示2个GPU,但特斯拉显示屏显示为关闭。 我正在运行一个内存密集型程序,并希望使用5 GB的RAM,但每当我运行程序时,它似乎都在使用Quadro GPU。 有没有办法在程序中使用2中的特定GPU?特斯拉GPU是否被“禁用”意味着它的驱动程序没有安装?
答案 0 :(得分:9)
您可以使用环境或以编程方式控制对CUDA GPU的访问。
您可以使用环境变量CUDA_VISIBLE_DEVICES
来指定任何应用程序可见的1个或多个GPU列表,以及它们的可见性顺序。例如,如果nvidia-smi将您的Tesla GPU报告为GPU 1(并将Quadro报告为GPU 0),那么您可以设置CUDA_VISIBLE_DEVICES=1
以仅启用CUDA代码使用的Tesla。
要控制应用程序以编程方式使用的GPU,您应该使用device management API of CUDA。使用cudaGetDeviceCount
查询设备数量,然后您可以cudaSetDevice
到每个设备,使用cudaGetDeviceProperties
查询其属性,然后选择符合您的应用条件的设备。您还可以使用cudaChooseDevice
选择与您指定的设备属性最匹配的设备。