Linux环境下GPU版本的pytorch安装

在Linux环境下安装GPU版本的PyTorch需要以下步骤:

  1. 安装CUDA和cuDNN

首先需要安装CUDA和cuDNN,这是GPU版本PyTorch的基础。可以从NVIDIA官网下载对应版本的CUDA和cuDNN,也可以使用包管理器进行安装。

  1. 安装Anaconda

建议使用Anaconda进行Python环境管理。可以从Anaconda官网下载对应版本的Anaconda安装包,也可以使用包管理器进行安装。

  1. 创建虚拟环境

使用Anaconda创建一个新的虚拟环境,可以避免与其他Python环境产生冲突。可以使用以下命令创建一个名为“pytorch”的虚拟环境:

conda create --name pytorch python=3.8
  1. 激活虚拟环境

使用以下命令激活虚拟环境:

conda activate pytorch
  1. 安装PyTorch

使用以下命令安装GPU版本的PyTorch:

conda install pytorch torchvision torchaudio cudatoolkit=<version>

其中,<version>是安装的CUDA版本号,例如11.1

  1. 测试安装

使用以下代码测试PyTorch是否安装成功:

import torch

print(torch.cuda.is_available())

如果输出为True,则表示PyTorch已经成功安装并可以使用GPU加速。

以下是两个示例说明:

示例1:使用GPU加速的PyTorch进行图像分类

数据集

我们将使用CIFAR-10数据集进行图像分类。该数据集包含10个类别的60000张32x32彩色图像。

模型搭建

我们将使用一个简单的卷积神经网络(CNN)模型来进行图像分类。该模型包含两个卷积层、两个池化层和两个全连接层。

import torch.nn as nn

class CNN(nn.Module):
    def __init__(self):
        super().__init__()
        self.conv1 = nn.Conv2d(3, 16, kernel_size=3, padding=1)
        self.pool1 = nn.MaxPool2d(kernel_size=2, stride=2)
        self.conv2 = nn.Conv2d(16, 32, kernel_size=3, padding=1)
        self.pool2 = nn.MaxPool2d(kernel_size=2, stride=2)
        self.fc1 = nn.Linear(32 * 8 * 8, 128)
        self.fc2 = nn.Linear(128, 10)

    def forward(self, x):
        x = nn.functional.relu(self.conv1(x))
        x = self.pool1(x)
        x = nn.functional.relu(self.conv2(x))
        x = self.pool2(x)
        x = x.view(-1, 32 * 8 * 8)
        x = nn.functional.relu(self.fc1(x))
        x = self.fc2(x)
        return x

model = CNN()

模型训练

我们将使用交叉熵损失函数和随机梯度下降(SGD)优化器进行模型训练。我们将模型训练10个epoch,并在每个epoch结束时计算训练集和测试集的准确率。

import torch.optim as optim
import torchvision.datasets as datasets
import torchvision.transforms as transforms

# 加载数据集
train_dataset = datasets.CIFAR10(root='./data', train=True, download=True, transform=transforms.ToTensor())
test_dataset = datasets.CIFAR10(root='./data', train=False, download=True, transform=transforms.ToTensor())

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

# 训练模型
for epoch in range(10):
    # 在训练集上训练模型
    train_correct = 0
    train_total = 0
    for images, labels in train_dataset:
        optimizer.zero_grad()
        outputs = model(images.unsqueeze(0))
        loss = criterion(outputs, labels.unsqueeze(0))
        loss.backward()
        optimizer.step()
        _, predicted = torch.max(outputs.data, 1)
        train_total += labels.size(0)
        train_correct += (predicted == labels).sum().item()

    # 在测试集上测试模型
    test_correct = 0
    test_total = 0
    with torch.no_grad():
        for images, labels in test_dataset:
            outputs = model(images.unsqueeze(0))
            _, predicted = torch.max(outputs.data, 1)
            test_total += labels.size(0)
            test_correct += (predicted == labels).sum().item()

    # 打印准确率
    print(f'Epoch {epoch+1}, Train Accuracy: {train_correct/train_total}, Test Accuracy: {test_correct/test_total}')

模型预测

我们使用训练好的模型来预测测试集中的图像,并将预测结果与实际结果进行比较。

import matplotlib.pyplot as plt
import numpy as np

# 预测测试集中的图像
with torch.no_grad():
    images, labels = next(iter(test_dataset))
    outputs = model(images.unsqueeze(0))
    _, predicted = torch.max(outputs.data, 1)

# 绘制预测结果和实际结果的图像
plt.imshow(np.transpose(images.numpy(), (1, 2, 0)))
plt.title(f'Actual: {labels}, Predicted: {predicted.item()}')
plt.show()

示例2:使用GPU加速的PyTorch进行自然语言处理

数据集

我们将使用IMDB电影评论数据集进行情感分析。该数据集包含25000条电影评论,每条评论都被标记为正面或负面。

模型搭建

我们将使用一个简单的循环神经网络(RNN)模型来进行情感分析。该模型包含一个嵌入层、一个LSTM层和一个全连接层。

import torch.nn as nn

class RNN(nn.Module):
    def __init__(self, vocab_size, embedding_dim, hidden_dim):
        super().__init__()
        self.embedding = nn.Embedding(vocab_size, embedding_dim)
        self.lstm = nn.LSTM(embedding_dim, hidden_dim, batch_first=True)
        self.fc = nn.Linear(hidden_dim, 1)

    def forward(self, x):
        x = self.embedding(x)
        x, _ = self.lstm(x)
        x = self.fc(x[:, -1, :])
        return x

model = RNN(vocab_size, embedding_dim, hidden_dim)

模型训练

我们将使用二元交叉熵损失函数和Adam优化器进行模型训练。我们将模型训练10个epoch,并在每个epoch结束时计算训练集和测试集的准确率。

import torch.optim as optim
import torchtext.datasets as datasets
import torchtext.data as data

# 定义数据集和数据处理
TEXT = data.Field(tokenize='spacy')
LABEL = data.LabelField(dtype=torch.float)
train_dataset, test_dataset = datasets.IMDB.splits(TEXT, LABEL)
TEXT.build_vocab(train_dataset, max_size=10000)
LABEL.build_vocab(train_dataset)

# 定义损失函数和优化器
criterion = nn.BCEWithLogitsLoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)

# 训练模型
for epoch in range(10):
    # 在训练集上训练模型
    train_correct = 0
    train_total = 0
    for batch in data.BucketIterator(train_dataset, batch_size=32):
        optimizer.zero_grad()
        outputs = model(batch.text)
        loss = criterion(outputs.squeeze(), batch.label)
        loss.backward()
        optimizer.step()
        predicted = torch.round(torch.sigmoid(outputs))
        train_total += batch.label.size(0)
        train_correct += (predicted == batch.label).sum().item()

    # 在测试集上测试模型
    test_correct = 0
    test_total = 0
    with torch.no_grad():
        for batch in data.BucketIterator(test_dataset, batch_size=32):
            outputs = model(batch.text)
            predicted = torch.round(torch.sigmoid(outputs))
            test_total += batch.label.size(0)
            test_correct += (predicted == batch.label).sum().item()

    # 打印准确率
    print(f'Epoch {epoch+1}, Train Accuracy: {train_correct/train_total}, Test Accuracy: {test_correct/test_total}')

模型预测

我们使用训练好的模型来预测测试集中的评论,并将预测结果与实际结果进行比较。

import spacy

# 加载Spacy模型
nlp = spacy.load('en_core_web_sm')

# 预测测试集中的评论
with torch.no_grad():
    text, label = next(iter(test_dataset))
    tokens = [token.text for token in nlp.tokenizer(text)]
    indices = [TEXT.vocab.stoi[token] for token in tokens]
    tensor = torch.LongTensor(indices).unsqueeze(0)
    output = model(tensor)
    predicted = torch.round(torch.sigmoid(output)).item()

# 绘制预测结果和实际结果的图像
print(f'Actual: {label}, Predicted: {predicted}')
print(text)

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Linux环境下GPU版本的pytorch安装 - Python技术站

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

相关文章

  • pytorch获取模型某一层参数名及参数值方式

    以下是关于“pytorch获取模型某一层参数名及参数值方式”的完整攻略,其中包含两个示例说明。 示例1:使用state_dict()函数 步骤1:导入必要库 在获取Pytorch模型某一层参数名及参数值之前,我们需要导入一些必要的库,包括torch。 import torch 步骤2:定义模型 在这个示例中,我们使用一个简单的卷积神经网络来演示如何使用sta…

    PyTorch 2023年5月16日
    00
  • win10子系统 (linux for windows)打造python, pytorch开发环境

    一、windows设置 0.启用windows子系统   控制面板–程序–启用或关闭windows功能–勾选适用于linux的Windows子系统   确定后会重启电脑   1.下载Ubuntu   在Microsoft store下载Ubuntu(ubuntu18默认python3是python3.6)   2.然后配置一下root密码,    su…

    2023年4月8日
    00
  • pytorch 模型不同部分使用不同学习率

    ref: https://blog.csdn.net/weixin_43593330/article/details/108491755 在设置optimizer时, 只需要参数分为两个部分, 并分别给定不同的学习率lr。 base_params = list(map(id, net.backbone.parameters())) logits_params…

    PyTorch 2023年4月6日
    00
  • windows下使用pytorch进行单机多卡分布式训练

    现在有四张卡,但是部署在windows10系统上,想尝试下在windows上使用单机多卡进行分布式训练,网上找了一圈硬是没找到相关的文章。以下是踩坑过程。 首先,pytorch的版本必须是大于1.7,这里使用的环境是: pytorch==1.12+cu11.6 四张4090显卡 python==3.7.6 使用nn.DataParallel进行分布式训练 这…

    PyTorch 2023年4月5日
    00
  • pytorch遇到的问题:RuntimeError: randperm is only implemented for CPU

    由此,我们找到sample.py,第51行如下图修改

    2023年4月8日
    00
  • [Pytorch数据集下载] 下载MNIST数据缓慢的方案

    步骤一 首先访问下面的网站,手工下载数据集。http://yann.lecun.com/exdb/mnist/把四个压缩包下载到任意文件夹,以便之后使用。 步骤二 把自己电脑上已经下载好的数据集的文件路径放到浏览器的窗口。直接输入 file:/// 会自行跳转 步骤三 `command + MNIST` 跳转至mnist.py,把源代码中的resource的…

    2023年4月6日
    00
  • Pytorch 如何训练网络时调整学习率

    PyTorch如何训练网络时调整学习率 在PyTorch中,我们可以使用学习率调度器来动态地调整学习率。本文将介绍如何使用PyTorch中的学习率调度器来调整学习率,并提供两个示例说明。 1. 示例1:使用StepLR调整学习率 以下是一个示例,展示如何使用StepLR调整学习率。 import torch import torch.nn as nn imp…

    PyTorch 2023年5月15日
    00
  • pytorch使用tensorboardX进行loss可视化实例

    PyTorch使用TensorboardX进行Loss可视化实例 在PyTorch中,我们可以使用TensorboardX库将训练过程中的Loss可视化。本文将介绍如何使用TensorboardX库进行Loss可视化,并提供两个示例说明。 1. 安装TensorboardX 要使用TensorboardX库,我们需要先安装它。可以使用以下命令在终端中安装Te…

    PyTorch 2023年5月15日
    00
合作推广
合作推广
分享本页
返回顶部