我最近在家里的机器上安装了第二个GPU(Tesla K40),我的搜索建议第一个PCI插槽成为CUDA作业选择的默认GPU . 一个很棒的链接正在解释它可以在这里找到:
我的原始GPU是TITAN X,也支持CUDA,但它最适合单精度计算,特斯拉更适合双精度 . 我对该小组的问题是,是否有办法将我的默认CUDA编程设备设置为第二个?显然我每次都可以在代码中指定使用哪个设备,但我希望我可以配置我的设置,以便它始终默认使用特斯拉卡 .
或者是打开盒子和物理交换设备位置的唯一方法?不知怎的,这对我来说似乎不对......
任何建议或相关的后续链接将不胜感激 .
干杯,
老爹
1 回答
正如您已经指出的那样,cuda运行时有its own heuristic用于订购GPU并为它们分配设备索引 .
CUDA_VISIBLE_DEVICES
environment variable将允许您修改此排序 .例如,假设在正常使用中,我的显示设备被枚举为设备0,我的首选CUDA GPU被枚举为设备1.例如,在没有使用
cudaSetDevice
的情况下编写的应用程序将默认使用枚举为0的设备 . 如果我想改变它,在linux下我可以使用类似的东西:使cuda运行时枚举通常为设备1的设备作为此应用程序运行的设备0(并且在这种情况下普通设备0将从CUDA“隐藏”) . 您可以通过导出该变量(例如,bash)使会话成为“永久”:
如果我只是想要反转默认的CUDA运行时顺序,但仍然使这两个GPU可用于应用程序,我可以执行以下操作:
还有其他规范选项,例如使用
nvidia-smi
提供的GPU UUID标识符(而不是设备索引) .请参阅the documentation或this writeup .