参考书籍:Python深度学习-基于PyTorch
背景:
深度学习中的一些算法,如CNN、BP、Auto-Encoder等,都可以通过矩阵运算得到,但在单核CPU上执行时,矩阵运算会被展开为循环的形式串行执行,而GPU可将矩阵运算并行执行,大大缩短计算时间。Pytorch支持使用to(device)将数据从内存转移到GPU显存,还支持定位到多个GPU的一个或多个。
PS:pytorch一般把GPU作用于tensor(FloatTensor或LongTensor等类型)或模型(包括torch.nn下面的一些网络模型及自己创建的模型)等数据结构上。
准备:
(1)判断GPU是否可用:
torch.cuda.is_available()
(2)获取可使用的GPU数量:
torch.cuda.device_count()
(3)查看平台的GPU配置信息:
nvidia_smi命令
单GPU加速:
(1)GPU作用于tensordevice=toch.device("cuda:0" if torch.cuda.is_available() else "cpu") for batch_idx,(img,label) in enumerate(train_loader): img=img.to(device) label=label.to(device) # 或是直接采用.cuda() # img=img.cuda() # label=label.cuda() 1234567 (2)GPU作用于模型:方法同(1)
model=Net() model.to(device) #或model.cuda() 123
多GPU加速:
(1)多机多GPU一般用DistributedParallel,也可以DataParallel
(2)单机多GPU使用DataParallel函数
假设有4个GPU,编号为0,1,2,3
device_ids=[0,1,2,3] 1
#只使用部分GPU,如编号1、2的GPU
device ='1,2' 1
#使用所有GPU
device=','.joint(map(str,device_ids)) 1 对数据
input_data=input_data.to(device)
for batch_idx,(img,label) in enumerate(train_loader): img=img.to(device) label=label.to(device) 123 对模型
net=torch.nnDataParallel(model) net.to(device) 12