如果服务器具有多个GPU,tensor.cuda()方法会将tensor保存到第一块GPU上,这里有两种替代方法:
- 一种是先调用t.cuda.set_device(1)指定使用第二块GPU,后续的.cuda()都无需更改,切换GPU只需修改这一行代码。
- 更推荐的方法是设置环境变量CUDA_VISIBLE_DEVICES,例如当export CUDA_VISIBLE_DEVICE=1(下标是从0开始,1代表第二块GPU),只使用第二块物理GPU,但在程序中这块GPU会被看成是第一块逻辑GPU,因此此时调用tensor.cuda()会将Tensor转移至第二块物理GPU。CUDA_VISIBLE_DEVICES还可以指定多个GPU,如export CUDA_VISIBLE_DEVICES=0,2,3,那么第一、三、四块物理GPU会被映射成第一、二、三块逻辑GPU,tensor.cuda(1)会将Tensor转移到第三块物理GPU上。
- 设置CUDA_VISIBLE_DEVICES有两种方法,
- 一种是在命令行中
CUDA_VISIBLE_DEVICES=0,1
python main.py
- 一种是在程序中
- 一种是在命令行中
- 设置CUDA_VISIBLE_DEVICES有两种方法,
import os
os.environ["CUDA_VISIBLE_DEVICES"] = "2"
如果使用IPython或者Jupyter notebook,还可以使用%env CUDA_VISIBLE_DEVICES=1,2来设置环境变量
torch.set_default_tensor_type使程序默认使用GPU的数据类型,不需要手动调用cuda。