Pytorch多GPU训练

临近放假, 服务器上的GPU好多空闲, 博主顺便研究了一下如何用多卡同时训练

原理

多卡训练的基本过程

首先把模型加载到一个主设备

把模型只读复制到多个设备

把大的batch数据也等分到不同的设备

最后将所有设备计算得到的梯度合并更新主设备上的模型参数

代码实现(以Minist为例)

#!/usr/bin/python3

# coding: utf-8

import torch

from torchvision import datasets, transforms

import torchvision

from tqdm import tqdm

device_ids = [3, 4, 6, 7]

BATCH_SIZE = 64

transform = transforms.Compose([transforms.ToTensor(),

transforms.Normalize(mean=[0.5,0.5,0.5],std=[0.5,0.5,0.5])])

data_train = datasets.MNIST(root = "./data/",

transform=transform,

train = True,

download = True)

data_test = datasets.MNIST(root="./data/",

transform = transform,

train = False)

data_loader_train = torch.utils.data.DataLoader(dataset=data_train,

# 这里注意batch size要对应放大倍数

batch_size = BATCH_SIZE * len(device_ids),

shuffle = True,

num_workers=2)

data_loader_test = torch.utils.data.DataLoader(dataset=data_test,

batch_size = BATCH_SIZE * len(device_ids),

shuffle = True,

num_workers=2)

class Model(torch.nn.Module):

def __init__(self):

super(Model, self).__init__()

self.conv1 = torch.nn.Sequential(

torch.nn.Conv2d(1, 64, kernel_size=3, stride=1, padding=1),

torch.nn.ReLU(),

torch.nn.Conv2d(64, 128, kernel_size=3, stride=1, padding=1),

torch.nn.ReLU(),

torch.nn.MaxPool2d(stride=2, kernel_size=2),

)

self.dense = torch.nn.Sequential(

torch.nn.Linear(14 * 14 * 128, 1024),

torch.nn.ReLU(),

torch.nn.Dropout(p=0.5),

torch.nn.Linear(1024, 10)

)

def forward(self, x):

x = self.conv1(x)

x = x.view(-1, 14 * 14 * 128)

x = self.dense(x)

return x

model = Model()

model = torch.nn.DataParallel(model, device_ids=device_ids) # 声明所有可用设备

model = model.cuda(device=device_ids[0]) # 模型放在主设备

cost = torch.nn.CrossEntropyLoss()

optimizer = torch.optim.Adam(model.parameters())

n_epochs = 50

for epoch in range(n_epochs):

running_loss = 0.0

running_correct = 0

print("Epoch {}/{}".format(epoch, n_epochs))

print("-"*10)

for data in tqdm(data_loader_train):

X_train, y_train = data

# 注意数据也是放在主设备

X_train, y_train = X_train.cuda(device=device_ids[0]), y_train.cuda(device=device_ids[0])

outputs = model(X_train)

_,pred = torch.max(outputs.data, 1)

optimizer.zero_grad()

loss = cost(outputs, y_train)

loss.backward()

optimizer.step()

running_loss += loss.data.item()

running_correct += torch.sum(pred == y_train.data)

testing_correct = 0

for data in data_loader_test:

X_test, y_test = data

X_test, y_test = X_test.cuda(device=device_ids[0]), y_test.cuda(device=device_ids[0])

outputs = model(X_test)

_, pred = torch.max(outputs.data, 1)

testing_correct += torch.sum(pred == y_test.data)

print("Loss is:{:.4f}, Train Accuracy is:{:.4f}%, Test Accuracy is:{:.4f}".format(running_loss/len(data_train),

100*running_correct/len(data_train),

100*testing_correct/len(data_test)))

torch.save(model.state_dict(), "model_parameter.pkl")

结果分析

可以通过nvidia-smi清楚地看到3, 4, 6, 7卡在计算/usr/bin/python3进程(进程号都为34930)

从实际加速效果来看, 由于minist是小数据集, 可能调度带来的overhead反而比计算的开销大, 因此加速不明显. 但是到大数据集上训练时, 多卡的优势就会体现出来了

pytorch指定用多张显卡训练_Pytorch多GPU训练相关推荐

  1. pytorch指定用多张显卡训练_Pytorch中多GPU训练指北

    前言 在数据越来越多的时代,随着模型规模参数的增多,以及数据量的不断提升,使用多GPU去训练是不可避免的事情.Pytorch在0.4.0及以后的版本中已经提供了多GPU训练的方式,本文简单讲解下使用P ...

  2. python多显卡支持_pytorch多GPU并行运算的实现

    Pytorch多GPU运行 设置可用GPU环境变量.例如,使用0号和1号GPU' os.environ["CUDA_VISIBLE_DEVICES"] = '0,1' 设置模型参数 ...

  3. pytorch 指定卡1_如何为TensorFlow和PyTorch自动选择空闲GPU,解决抢卡争端

    原标题:如何为TensorFlow和PyTorch自动选择空闲GPU,解决抢卡争端 雷锋网按:本文作者天清,原文载于其知乎专栏世界那么大我想写代码,雷锋网获其授权发布. 项目地址:QuantumLiu ...

  4. 外接gpu 训练神经网络,显卡训练神经网络

    为什么要用GPU来训练神经网络而不是CPU? 许多现代神经网络的实现基于GPU,GPU最初是为图形应用而开发的专用硬件组件.所以神经网络收益于游戏产业的发展. 中央处理器(centralprocess ...

  5. pytorch多GPU训练实例与性能对比

    以下实验是我在百度公司实习的时候做的,记录下来留个小经验. 多GPU训练 cifar10_97.23 使用 run.sh 文件开始训练 cifar10_97.50 使用 run.4GPU.sh 开始训 ...

  6. 程序如何在两个gpu卡上并行运行_深度学习分布式训练相关介绍 - Part 1 多GPU训练...

    本篇文章主要是对深度学习中运用多GPU进行训练的一些基本的知识点进行的一个梳理 文章中的内容都是经过认真地分析,并且尽量做到有所考证 抛砖引玉,希望可以给大家有更多的启发,并能有所收获 介绍 大多数时 ...

  7. 利用GPU训练网络模型

    文章 方式一 方式二 本文章中使用的网络模型架构图: GPU训练有两种方式: 方式一 使用gpu训练只要找到:网络模型.数据(输入和标注).损失函数再调用.cuda()即可. CPU训练代码: imp ...

  8. TensorFlow在美团外卖推荐场景的GPU训练优化实践

    省时查报告-专业.及时.全面的行研报告库 省时查方案-专业.及时.全面的营销策划方案库 知识图谱在美团推荐场景中的应用实践 搜索场景下的智能实体推荐 机器学习在B站推荐系统中的应用实践 小红书推荐系统 ...

  9. MMDetection——GPU训练

    预先知识 ${CONFIG_FILE}:config/里面的文件 config/faster_rcnn_r50_fpn_1x_coco.py ${CHECKPOINT_FILE}:模型权重所在位置 c ...

最新文章

  1. Vertica的这些事lt;十一gt;—— Vertica 管理
  2. pip Can't connect to HTTPS URL because the SSL module is not available
  3. DCMTK:修改DICOM文件的类
  4. leetcode(2)---两数相加
  5. C# 简单的XML读取修改写入
  6. [vue] 你有写过自定义指令吗?自定义指令的生命周期(钩子函数)有哪些?
  7. rman打开oracle归档日志,Oracle RAC中使用RMAN管理归档日志
  8. pyhon-matplotlib包-数据图形化
  9. Android获取所有Activity
  10. 内置模块/核心模块 (自带的) --fs 文件系统
  11. 实验3-5 查询水果价格 (15 分)
  12. 操作系统—内存的连续分配管理方式
  13. 【把P2P进行到底:讲述Jxta的故事(2)】
  14. iOS 警告收录及科学快速的消除方法
  15. ckdeitor的使用方法
  16. lambda表达式学习使用实例
  17. 计算机文化第15版快速测试答案,《计算机文化基》第1次作业及答案.doc
  18. ROS串口通信协议解析
  19. MATLAB 中gcf、gca 以及gco 的区别
  20. eclipse编写web.xml中出现The word ‘...‘ is not correctly spelled

热门文章

  1. python创建项目包
  2. 2016.2.17文件夹选择框及文件选择框
  3. error LNK2001: 无法解析的外部符号 __imp__Shell_NotifyIconA@8
  4. [C#]手把手教你打造Socket的TCP通讯连接(一)
  5. 每天进步一点点:(11)进程优先级学习 nice
  6. dummy.php 下载,internal dummy connection
  7. 第一章 TensorFlow基础——python语法(三)
  8. Spring选择哪种注入方式
  9. docker镜像构建工具kaniko构建过程缓慢原因探究
  10. 【收藏】Maven 生成打包可执行jar包