方法1:临时设置方法
一定要在第一次使用 cuda 之前进行设置
当服务器有多个GPU时,设置CUDA_VISIBLE_DEVICES 环境变量可以改变CUDA程序所能使用的GPU设备,默认情况下:标号为0的显卡为主卡。
- 改变系统变量使得仅目标显卡可见,临时设置
- Linux: export CUDA_VISIBLE_DEVICES=0 #要使用的GPU编号,正常的话是从0开始
- windows: set CUDA_VISIBLE_DEVICES=0
- python:程序开头添加
- import os
- os.environ['CUDA_VISIBLE_DEVICES'] = '0'
- os.environ['CUDA_VISIBLE_DEVICES'] = '0,2,3' #多GPU
- 命令行
- CUDA_VISIBLE_DEVICES=0 python **.py
- 注:[转]使用CUDA_VISIBLE_DEVICES设置显卡_华科附小第一名的博客-CSDN博客
- CUDA应用运行时,CUDA将遍历当前可见的设备,并从零开始为可见设备编号。
- 第一种情况,卡1设置为主卡,但CUDA遍历时会设置为可见编号0。
- 最后一种情况,设备0,2,3将显示为设备0,1,2。如果将字符串的顺序更改为“2,3,0”,则设备2,3,0将分别被设置为0,1,2。
- 如果为CUDA_VISIBLE_DEVICES 设置了不存在的设备,所有实际设备将被隐藏,CUDA 应用将无法使用GPU设备;
- 如果设备序列是存在和不存在设备的混合,那么不存在设备前的所有存在设备将被重新编号,不存在设备之后的所有设备将被屏蔽。
- 当前可见的(重新编号后的)设备可使用CUDA 程序来查看。
- import torch
print(torch.cuda.current_device())
- import torch
2. 使用torch.cuda接口
在生成网络对象之前执行:
torch.cuda.set_device(0)
3. 使用pytorch的并行GPU接口
net = torch.nn.DataParallel(model, device_ids=[0])
4. 初始化模型时
net = Net.cuda(0)
##########################pycharm设置方法###############
-
直接在程序中设置
os.environ["CUDA_VISIBLE_DEVICES"] = '0,1,2,3'
打开Run/Debug Configurations,在Environment variables右边点击…处。
################################################
方法2:永久设置
- linux: 在~/.bashrc 的最后加上export CUDA_VISIBLE_DEVICES=‘ids’(预设置的gpu_id),然后source ~/.bashrc
- windows: 打开我的电脑环境变量设置的地方,直接添加就行了。
###################
确定GPU的个数
-
count = torch.cuda.device_count()
-
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
把一个模型放到GPU上
- device = torch.device("cuda:0")
- model.to(device)
GPU: 然后复制所有的张量到GPU上:
-
mytensor = my_tensor.to(device)
-
只调用
my_tensor.to(device)
并没有复制张量到GPU上,而是返回了一个copy。你需要把它赋值给一个新的张量并在GPU上使用这个张量。
获得GPU的名字
- torch.cuda.get_device_name(0)