pytorch使用指定GPU训练的实例

在PyTorch中,我们可以使用指定的GPU来训练模型。在本文中,我们将详细讲解如何使用指定的GPU来训练模型。我们将使用两个示例来说明如何完成这些步骤。

示例1:使用单个GPU训练模型

以下是使用单个GPU训练模型的步骤:

import torch
import torch.nn as nn
import torch.optim as optim

# 检查GPU是否可用
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
print(device)

# 定义模型
class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.fc1 = nn.Linear(784, 128)
        self.fc2 = nn.Linear(128, 10)

    def forward(self, x):
        x = x.view(-1, 784)
        x = torch.relu(self.fc1(x))
        x = self.fc2(x)
        return x

model = Net().to(device)

# 定义损失函数和优化器
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(model.parameters(), lr=0.1)

# 加载数据
train_loader = torch.utils.data.DataLoader(train_dataset, batch_size=64, shuffle=True)

# 训练模型
for epoch in range(10):
    running_loss = 0.0
    for i, data in enumerate(train_loader, 0):
        inputs, labels = data
        inputs, labels = inputs.to(device), labels.to(device)
        optimizer.zero_grad()
        outputs = model(inputs)
        loss = criterion(outputs, labels)
        loss.backward()
        optimizer.step()
        running_loss += loss.item()

    print(f'Epoch {epoch + 1}, Loss: {running_loss / len(train_dataset)}')

在上述代码中,我们首先检查GPU是否可用,并将模型移动到GPU上。然后,我们定义了一个简单的全连接神经网络Net,它含有一个输入层、一个隐藏层和一个输出层。在训练模型的过程中,我们使用inputs.to(device)labels.to(device)将数据移动到GPU上。在训练模型的过程中,我们使用torch.utils.data.DataLoader加载数据,并使用enumerate()函数遍历数据。在每个批次中,我们使用optimizer.zero_grad()清除梯度,使用model(inputs)计算输出,使用criterion(outputs, labels)计算损失,使用loss.backward()计算梯度,使用optimizer.step()更新权重。

示例2:使用多个GPU训练模型

以下是使用多个GPU训练模型的步骤:

import torch
import torch.nn as nn
import torch.optim as optim
import torch.nn.parallel
import torch.distributed as dist
import torch.multiprocessing as mp
import torch.utils.data
import torch.utils.data.distributed

# 检查GPU是否可用
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
print(device)

# 定义模型
class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.fc1 = nn.Linear(784, 128)
        self.fc2 = nn.Linear(128, 10)

    def forward(self, x):
        x = x.view(-1, 784)
        x = torch.relu(self.fc1(x))
        x = self.fc2(x)
        return x

model = Net().to(device)

# 定义损失函数和优化器
criterion = nn.CrossEntropyLoss().to(device)
optimizer = optim.SGD(model.parameters(), lr=0.1)

# 加载数据
train_loader = torch.utils.data.DataLoader(train_dataset, batch_size=64, shuffle=True, num_workers=4, pin_memory=True)

# 训练模型
def train(gpu, train_loader):
    rank = gpu
    dist.init_process_group(backend='nccl', init_method='tcp://127.0.0.1:23456', world_size=2, rank=rank)
    torch.cuda.set_device(gpu)
    model = Net().to(device)
    model = torch.nn.parallel.DistributedDataParallel(model, device_ids=[gpu])
    criterion = nn.CrossEntropyLoss().to(device)
    optimizer = optim.SGD(model.parameters(), lr=0.1)

    for epoch in range(10):
        running_loss = 0.0
        for i, data in enumerate(train_loader, 0):
            inputs, labels = data
            inputs, labels = inputs.to(device), labels.to(device)
            optimizer.zero_grad()
            outputs = model(inputs)
            loss = criterion(outputs, labels)
            loss.backward()
            optimizer.step()
            running_loss += loss.item()

        print(f'Epoch {epoch + 1}, Loss: {running_loss / len(train_dataset)}')

# 启动多个进程
if __name__ == '__main__':
    mp.spawn(train, nprocs=2, args=(train_loader,))

在上述代码中,我们首先检查GPU是否可用,并将模型移动到GPU上。然后,我们定义了一个简单的全连接神经网络Net,它含有一个输入层、一个隐藏层和一个输出层。在训练模型的过程中,我们使用inputs.to(device)labels.to(device)将数据移动到GPU上。在训练模型的过程中,我们使用torch.utils.data.DataLoader加载数据,并使用enumerate()函数遍历数据。在每个批次中,我们使用optimizer.zero_grad()清除梯度,使用model(inputs)计算输出,使用criterion(outputs, labels)计算损失,使用loss.backward()计算梯度,使用optimizer.step()更新权重。在使用多个GPU训练模型时,我们使用torch.nn.parallel.DistributedDataParallel函数将模型并行化,并使用mp.spawn()函数启动多个进程。

结论

在本文中,我们详细讲解了如何使用指定的GPU来训练模型。我们使用了两个示例来说明如何完成这些步骤。如果您按照这些步骤操作,您应该能够成功使用指定的GPU来训练模型。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:pytorch使用指定GPU训练的实例 - Python技术站

(0)
上一篇 2023年5月15日
下一篇 2023年5月15日

相关文章

  • PyTorch 常用代码段整理

    基础配置 检查 PyTorch 版本 torch.__version__               # PyTorch versiontorch.version.cuda              # Corresponding CUDA versiontorch.backends.cudnn.version()  # Corresponding cuDN…

    PyTorch 2023年4月6日
    00
  • minconda安装pytorch的详细方法

    Miniconda安装PyTorch的详细方法 在本文中,我们将介绍如何使用Miniconda安装PyTorch,并提供两个示例说明。 安装Miniconda 首先,我们需要从官方网站下载适用于您的操作系统的Miniconda安装程序,并按照提示进行安装。 创建虚拟环境 接下来,我们需要创建一个虚拟环境,以便在其中安装PyTorch。在终端中输入以下命令: …

    PyTorch 2023年5月16日
    00
  • pytorch保存模型等相关参数,利用torch.save(),以及读取保存之后的文件

    转载自: https://www.cnblogs.com/qinduanyinghua/p/9311410.html 假设网络为model = Net(), optimizer = optim.Adam(model.parameters(), lr=args.lr), 假设在某个epoch,我们要保存模型参数,优化器参数以及epoch 一、 1. 先建立一个…

    PyTorch 2023年4月8日
    00
  • 深度学习环境搭建常用网址、conda/pip命令行整理(pytorch、paddlepaddle等环境搭建)

    前言:最近研究深度学习,安装了好多环境,记录一下,方便后续查阅。 1. Anaconda软件安装 1.1 Anaconda Anaconda是一个用于科学计算的Python发行版,支持Linux、Mac、Windows,包含了众多流行的科学计算、数据分析的Python包。请自行到官网下载安装,下载速度太慢的话可移步清华源。 官网:https://repo.a…

    2023年4月8日
    00
  • pytorch多GPU并行运算的实现

    PyTorch多GPU并行运算的实现 在深度学习中,使用多个GPU可以加速模型的训练过程。PyTorch提供了多种方式实现多GPU并行运算,本文将详细介绍其中的两种方法,并提供示例说明。 1. 使用nn.DataParallel实现多GPU并行运算 nn.DataParallel是PyTorch提供的一种简单易用的多GPU并行运算方式。使用nn.DataPa…

    PyTorch 2023年5月15日
    00
  • PyTorch全连接ReLU网络

    PyTorch全连接ReLU网络 1.PyTorch的核心是两个主要特征: 一个n维张量,类似于numpy,但可以在GPU上运行 搭建和训练神经网络时的自动微分/求导机制 本文将使用全连接的ReLU网络作为运行示例。该网络将有一个单一的隐藏层,并将使用梯度下降训练,通过最小化网络输出和真正结果的欧几里得距离,来拟合随机生成的数据。 2.张量 2.1 热身: …

    PyTorch 2023年4月8日
    00
  • pytorch–之halfTensor的使用详解

    pytorch–之halfTensor的使用详解 在PyTorch中,halfTensor是一种半精度浮点数类型的张量,它可以在减少内存占用的同时提高计算速度。本文将介绍如何使用halfTensor,并演示两个示例。 示例一:将floatTensor转换为halfTensor import torch # 定义一个floatTensor x = torch…

    PyTorch 2023年5月15日
    00
  • NLP(十):pytorch实现中文文本分类

    一、前言 参考:https://zhuanlan.zhihu.com/p/73176084 代码:https://link.zhihu.com/?target=https%3A//github.com/649453932/Chinese-Text-Classification-Pytorch 代码:https://link.zhihu.com/?target…

    2023年4月7日
    00
合作推广
合作推广
分享本页
返回顶部