pytorch将数据与模型都放到GPU上训练

默认是CPU,如果想要用GPU需要:

  1. 安装配置cuda,然后更新/下载支持gpu版本的pytorch,可以参考:https://blog.csdn.net/weixin_35757704/article/details/124315569

  2. 设置device:

    py 复制代码
    device = torch.device('cuda' if torch.cuda.is_available else 'cpu')

    然后将数据与模型后面都额外加上.to(device)即可

示例程序

py 复制代码
import torch
import torch.nn as nn


# 一个简单的模型
class LinearRegressionModel(nn.Module):
    def __init__(self, input_shape, output_shape):
        super(LinearRegressionModel, self).__init__()
        self.linear = nn.Linear(input_shape, output_shape)

    def forward(self, x):
        out = self.linear(x)
        return out


def main():
    x_train = torch.randn(100, 4)  # 生成训练特征
    y_train = torch.randn(100, 1)  # 生成label
    model = LinearRegressionModel(x_train.shape[1], 1)
    optimizer = torch.optim.SGD(model.parameters(), lr=0.01)  # 优化函数
    criterion = nn.MSELoss()  # 损失函数
    for epoch in range(100):
        optimizer.zero_grad()
        outputs = model(x_train)
        loss = criterion(outputs, y_train)
        loss.backward()
        optimizer.step()


if __name__ == '__main__':
    main()

修改为GPU版本:

py 复制代码
import torch
import torch.nn as nn


# 一个简单的模型
class LinearRegressionModel(nn.Module):
    def __init__(self, input_shape, output_shape):
        super(LinearRegressionModel, self).__init__()
        self.linear = nn.Linear(input_shape, output_shape)

    def forward(self, x):
        out = self.linear(x)
        return out


def main():
    # 1. 设置device
    device = torch.device('cuda' if torch.cuda.is_available else 'cpu')
    # 2. 数据与模型后都加 .to(device) 即可
    x_train = torch.randn(100, 4).to(device)  # 生成训练特征
    y_train = torch.randn(100, 1).to(device)  # 生成label
    model = LinearRegressionModel(x_train.shape[1], 1).to(device)  # next(transformer.parameters()).device

    optimizer = torch.optim.SGD(model.parameters(), lr=0.01)  # 优化函数
    criterion = nn.MSELoss()  # 损失函数
    for epoch in range(100):
        optimizer.zero_grad()
        outputs = model(x_train)
        loss = criterion(outputs, y_train)
        loss.backward()
        optimizer.step()


if __name__ == '__main__':
    main()

修改后:

  1. 查看变量的位置:可以使用x_train.device查看tensor变量的位置
  2. 查看模型的位置:可以使用next(model.parameters()).device查看模型的位置

注意:不在同一个位置上的变量之间无法计算,模型无法使用不在同一个位置的数据

相关推荐
头发够用的程序员7 小时前
TensorRT 自定义算子插件实战(一):从零手写 customScaledTanh
c++·人工智能·pytorch·python·深度学习·边缘计算·jetson
论文复现现场8 小时前
RTX 5090 32GB 适合科研计算吗?单卡训练、推理、论文复现与 OOM 判断方法
pytorch·深度学习·cuda·rtx5090
论文复现现场10 小时前
论文复现看到“RTX 3090 or higher”:显存、CUDA、batch size 与 OOM 怎么判断?
开发语言·pytorch·batch·cuda·rtx3090
zh路西法17 小时前
【ResNet18】从图像到视觉特征:卷积神经网络如何理解图像
pytorch·python·神经网络·cnn·resnet·resnet18
FPGA小徐17 小时前
Ubuntu 22.04 安装 Miniconda、PyTorch 与 YOLOv8 并完成 CPU 推理
pytorch·yolo·ubuntu
CAE虚拟与现实1 天前
PyTorch和scikit-learn的区别
人工智能·pytorch·scikit-learn
程序猿编码2 天前
不用 PyTorch!纯 C 实现 N 维张量 + 反向传播,完成手写数字识别训练
c语言·人工智能·pytorch·神经网络·卷积神经网络·大模型推理
技术狂人1682 天前
WAM-Trainer世界动作模型训练实战:IDM/FDM模块化架构与DeepSpeed ZeRO-2多卡训练
pytorch·具身智能·deepspeed·世界动作模型·idm逆动力学
奕鼎竜瑆2 天前
[新手小白也能学会] 01-PyTorch框架使用(上)
人工智能·pytorch·python