Pytorch:入门指南和 PyTorch 的 GPU版本安装(非常详细)

Pytorch: 入门指南和 PyTorch 的 GPU版本安装(非常详细)

Copyright: Jingmin Wei, Pattern Recognition and Intelligent System, School of Artificial and Intelligence, Huazhong University of Science and Technology

Pytorch教程专栏目录链接



本教程不商用,仅供学习和参考交流使用,如需转载,请联系本人。

教程前言

本教程为 Pytorch 入门到精通教程。

概览

第一阶段: 我们将介绍一些基础知识,从最简单的张量操作开始,一步步深入:核心模块 torch.nn 与操作算子,数据预处理与数据加载器构建,损失函数,优化器,网络模型搭建,网络参数计算,深度神经网络搭建框架与搭建实例。

在这一部分,我们将学习到:

  • 实现高维矩阵的计算,索引,变换,变量的自动微分。

  • 卷积,池化,全连接,循环,BN,GN,Dropout 等核心网络层的算法原理和实现方式。ReLU 及其变种, Softplus, Softmax 等常用的 Activation Function。感受野和空洞卷积相关理论。

  • 交叉熵,均方误差等损失函数,SGD, Adam 等常用的经典优化器。

  • 不同的数据增强方式,文字和图像数据的预处理和可视化。学习处理 IRIS鸢尾花,波士顿房价,Fashion-MNIST,IMDB 等常用数据集。

  • 学习如何计算网络的卷积,池化,全连接层的参数,根据要求计算并搭建不同的神经网络。

第二阶段: 我们将介绍全连接神经网络和任务实现:

学习多层感知机(全连接网络),实现基础的分类和回归任务。通过全连接神经网络实现垃圾邮件分类,波士顿房价预测。

第三阶段: 我们将学习不同的 CNN 的结构和原理。从这一部分开始,建议大家结合论文原文理解代码。这也是整个教程的核心部分。

  • 学习卷积网络的基本构成,并搭建简单的网络实现 Fashion-MNIST 的识别。

  • 利用爬虫爬取数据集,利用预训练的 VGG 网络在 ImageNet 上进行分类任务的分析。

  • 微调预训练的网络实现猴子,猫狗分类等任务。

  • 重难点:学习诸如 LeNet, AlexNet, NiN, VGG, GooLeNet, ResNet, DenseNet 的经典卷积网络模型。深入理解网络背后的结构,核心思想,优化理论,并用代码对论文中的网络结构进行复现。

第四阶段: 学习不同的循环神经网络,LSTM 和 GRU 。学习文本的预处理方法,并搭建不同的 RNN ,实现文本分类和情感预测等自然语言处理的常见任务。

第五阶段: 更加细化的学习一些经典算法和任务:

图像风格迁移,自编码器,图像语义分割,图卷积神经网络,图像目标检测与跟踪。

  • 我们将用一些经典网络模型,比如说 VGG19 ,实现图像风格迁移,图像语义分割等任务,感受现在很多流行的图像软件中,核心的风格算法的魅力。

  • 我们将用神经网络实现自编码器 Auto-encoder,实现基于神经网络的无监督学习(自监督学习),对数据降维分析,并对比它 PCA 主成分分析的效果。

  • 我们将学习半监督实现的图卷积神经网络,实现论文的分类,并对比 LP 标签传播半监督学习算法的效果。

  • 我们将学习 FCN, U-Net, SegNet 等经典的语义分割网络,并实现相关的图像语义分割任务。

  • 我们也将学习目标检测中的基础知识: IoU, mAP, NMS, FPN, 样本不均衡问题…探索 RetinaNet, Faster R-CNN, SSD, YOLO 等目标检测网络框架的魅力。

第六阶段,还没想好。 虽然深度强化学习,对抗学习等自己也有相关笔记的教程参考,但是这部分是 tensorflow 写的,之后有时间再补上吧。然后一些其他的,比如说集成学习算法优化等等,也可以写在这一部分。一些轻量网络的实现也可以作为拓展写在这。还有不知道啥时候更新的对抗攻击,Transformer,Diffusion 啥的,这是后话了。

本教程不会详细地说明每一个使用方法的数学推导。 比如说,本教程不会着重告诉你,激活函数怎么来的?损失函数(比如说 Sigmoid, ReLU 等)的梯度怎么推导?随机梯度下降法是怎么一回事?遇到相关概念,不明确的请自行查阅相关资料。

本教程侧重点为:通过实战,解决不同的分类回归问题;如何计算网络参数,搭建不同的网络模型;一些经典的神经网络模型和算法的代码实现;模型可视化,网络特征提取和可视化,结果可视化;模型的精度与损失的分析;一些经典的深度学习任务实现:高维数据回归预测,图像识别,文字分类,情感分析,风格迁移,语义分割,目标检测,对抗学习,自编码降维,图卷积半监督学习等等。

基础知识要求

如果没有以下某些基础的也不必担心,你可以直接看代码,在学代码写代码的同时,遇到相关问题,去搜索查阅相关即可。基础知识都不是太难理解,一旦入门,就足以攻克 PyTorch 所需要的数学知识部分。

本教程阅读前需要读者掌握一定的基础知识:

  • 高等数学,线性代数,概率论等数学基础。 其中,矩阵的基本运算,函数求偏导,链式法则求梯度等相关数学知识是必要的。
  • 对于机器学习(监督学习,无监督学习,半监督学习),深度学习有一定的基本概念认识。
  • Python 语言基础。尤其是面向对象的基础,一定程度的 numpy, matplotlib, pandas 的数据处理和可视化基础。
  • 机器学习基础。了解梯度下降法及其变种,了解损失函数(交叉熵,均方误差等)。接触过类似于感知器,线性回归,Logistic 回归,SVM 等机器学习的基础算法。
  • 非必须:自己实现过,或者调用过 scikit-learn 实现一些分类或回归任务
  • 非必须:一定的信号与系统基础知识。对于卷积,池化,归一化等操作有基本认识。
  • 非必须:一定的图像知识基础,了解彩色图,灰度图,二值图,通道相关概念。了解一些常用的图像增强,图像变换的算法。一定的自然语言处理基础,了解 Word2Vec ,停顿词等相关概念。

Python 安装。非常非常不推荐廖老师的教程里的安装方式,如果你只安装一个 Python 解释器,那么你需要用很多次 pip 命令一个一个安装管理需要的库,而且解释器自带的 IDLE 写起代码来非常不方便。 我们一般使用的是 Anaconda3 科学计算环境 + VSCode / Pycharm IDE 。Anaconda内置了很多常用库和 Jupyter Notebook ,而现代的 IDE 会让代码的书写更加的方便和漂亮。

Jupyter Notebook 是一个交互式的 python 编程环境,文件后缀为.ipynb。它支持 cell 编程方式,支持 Markdown 语法,支持多种文件格式导出。非常适合用来保存网络的训练预测结果,边写代码边做笔记,和随时随地的 debug 。第一次用 cell 可能会不太习惯,一旦上手你会发现它非常非常好用。一般 Anaconda 安装后就有内置的 Jupyter,但是有环境目录的限制,所以可以通过 VSCode 和 Pycharm 里安装 Jupyter 插件来使用。

Python 基础。可以看廖老师的教程。一般三天内即可入门,学完面向对象编程那一章节即可。面向对象部分重点提一下,如果你有 C++/JAVA 等面向对象语言基础,那么 Python 的面向对象其实也就是举一反三的事。如果你没有的话,一定要去学习一下,因为我们的网络搭建多数采用的是类继承 torch.nn.Module 的方法,数据集构建也是采用的类继承 torch.utils.data.Data 的方法。

数据处理和可视化基础。推荐北理的慕课。很多 Python 的科学计算和机器学习库是边用边学的,掌握基本的原理后,其他的方法只需在使用的时候查阅资料,了解相关参数和使用方式即可。但是有几个库推荐大家一定要系统学习一下:numpy, matplotlib, pandas, re。 这几个库上手难度因人而异。如果你在 C/C++/JAVA 等语言中,系统学习过数组,那么numpy 你可以轻松掌握;如果你有 matlab 的绘图经验,那么 matplotlib 你能轻松上手;如果你有 sql/excel 等数据管理经验,pandas 对你而言轻而易举;如果你学习过正则表达式,贪心算法等,那么 re 也不是问题。

上面说的几个库是一些数据处理和科学计算的核心库,大家在学习 Pytorch 的过程中,会看到代码中有很多调用上面的库,来实现一些数据处理和运算的过程。为了方便大家的学习,这些库提前学习一下会更好,尤其是 numpy,作为矩阵的科学计算库,真的非常重要。

机器学习基础。必须要指出的是,这个教程是针对于深度学习(Pytorch 神经网络框架),相信阅读这个教程的你们,都有一定的机器学习基础。如果没有的话,可以自己去阅读周志华的西瓜书,李航的统计机器学习等,看一些网课视频,比如吴恩达机器学习2022,实现一些相关算法。或者跟着 scikit-learn 官方教程学习和快速入门。scikit-learn 也有很多人翻译过教程中文版,我自己用的是这个网站

Reference

本教程主要参考并引用了如下资料:

  • 华中科技大学-模式识别课件 - 神经网络部分
  • 《Pytorch: 深度学习入门与实战》
  • 《深度学习之 Pytorch 物体检测实战》
  • 李沐《动手学深度学习》
  • 花书《Deep Learning》
  • 西瓜书《机器学习》
  • 《机器学习中的数学》
  • 相关神经网络,算法和数据库的源论文
  • 自己的课堂和课后笔记

详细的参考资料,论文在对应的各个教程部分都已经列出链接,大家打开相关链接前记得科学上网。

本教程主要使用了如下数据集:

  • 10-monkey-species
  • Boston House Price
  • Cat vs Dog
  • COCO
  • Face Emotion
  • Fashion-MNIST
  • ImageNet
  • IRIS
  • IMDB
  • MNIST
  • PASCAL VOC
  • Spam Base
  • THUCNews
  • VOT
  • Cora

使用每个数据集时,相关的数据集的下载链接我都放在了文章中,方便大家进行复现。

Python 安装和使用
  • Python 解释器:推荐 Anaconda3 。安装成功后,其 base 环境默认内置了很多科学计算库,不需要 pip / conda 一个个安装。但是 Pytorch 框架是是需要用包管理工具自己安装的。如果计算机磁盘不够可以考虑 Mini-Conda 。

  • 开发工具:VSCode / Pycharm 。推荐在 VSCode 下安装 Jupyter Notebook 插件,或者直接使用 Anaconda 自带的 Jupyter Notebook。不推荐使用 Pycharm 进行代码学习。

  • 操作系统:Linux / Windows 皆可。Linux 系统需要一定的命令基础,可以参考我的 Linux 专栏快速入门。本教程主要是基于 Windows 系统的,Linux 系统下运行请自行查阅资料。

  • 相关库:pytorch, torchvision, torchtext , torchsummary, torchviz, PyG, numpy, matplotlib, pandas, opencv-python, pillow, scikit-learn, scipy, cvxopt, nltk, re, requests, wordcloud, seaborn, hiddenlayer, os, time, copy 等等。

  • 硬件:电脑最好是有 N 卡,支持 CUDA 驱动。一些较为复杂的网络,CPU 是无法跑出一个好结果的,且非常的慢。如果没有 GPU,可以去租云服务器(MistGPU, AudoDL 等),或者使用免费的 Google Colab (但是会很不方便)。

请按需自行搜索相关教程Anaconda3 安装Anaconda3 + VSCode 环境配置;Anaconda3 + Pycharm 环境配置;Anaconda 安装 PytorchJupyter Notebook 使用;Markdown 入门;LaTeX 数学公式;Conda 入门与环境管理;shell 常用文件管理命令;VSCode 下 Jupyter Notebook 插件安装Pytorch 配置 GPU 相关教程。

对于我而言,相比起其他的开发环境,配置 Pytorch 开发环境其实很简单的。只要你有 Python 基础,和 Anaconda 环境配置经验,那么这一部分你可以轻松实现。

相关库安装

上个部分列举的大部分相关库是 Anaconda 已经预装好的,只有小部分库(torch, opencv, nltk, requests, wordcloud…)需要自己装。如果代码报错 ‘no module named …’ 的时候用 conda/pip3 install … 命令安装即可。安装太慢可以使用国内镜像源,或者科学上网。在 conda 环境里添加包和第三方库还有一些操作,需要自学一点 conda 和 shell 相关命令。

一般挂加速器后,在 conda 的 prompt 控制台输入命令( prompt 的位置:下载 Anaconda 后,在开始菜单最近添加里,有它的启动图标,可以添加进磁贴里方便快速打开)。

或者打开命令提示符 win+r ,然后框内输入 cmd ,按下回车,然后输入指令进行一些电脑文件的操作。当然,如果你电脑安装了 windows terminal ,则输入 wt,按下回车,输入指令更好看。

在这里插入图片描述

如果你没有加速器,也可以选择使用清华镜像源来安装一些第三方库。如何使用镜像,可以自己上网查。

# package_name为你需要安装的python库名字
conda install package_name

一些库如果不存在对应的 conda 版本(比如说 pytorch 中的 torchtext, PyG 等),这时候我们就需要 pip 安装标准版本的:

pip3 install package_name

或者:

pip install package_name
Pytorch 的 CPU 版本安装

Pytorch 官网提供了不同版本的 Pytorch 安装命令,大家按需自取。默认方式只会安装最新的稳定版 Pytorch 版本。

# 以cpu版本为例,在conda终端输入命令即可
conda install pytorch
conda install torchvision
conda install torchtext

或者一次性安装:

conda install pytorch torchvision torchtext

下载过慢请用其他镜像源,或者科学上网。

Pytorch 的 GPU 版本安装

GPU 版本的 Pytorch 可以比普通版本(CPU) 快上 80% ,它对于卷积层有 5 种并行计算的加速方式。使用 GPU 训练的神经网络,优化结果更好,精度更高。具体的效率和精度可能会因 GPU 而异。使用 GPU 版本的 Pytorch 需要支持 CUDA 驱动的独立显卡,一般为 N 卡(英伟达系列)。

GPU 版本的 Pytorch 需要配置 CUDA + CUDNN 的驱动支持,这一部分比较麻烦。

查看 CUDA 版本

首先查看自己电脑的 CUDA 版本:

win+r 后输入 cmd,打开命令行,输入 nvidia-smi :

在这里插入图片描述

或者,在开始菜单中,找到英伟达控制面板(Nvidia Control Panel) -> 帮助 -> 系统信息 -> 组件

在这里插入图片描述

如图,我的是 11.6。

下载和配置 CUDA

前往CUDA 官网,根据上一步得知的自己电脑的 CUDA 版本,下载对应的 CUDA 工具组件。

在这里插入图片描述

在这里插入图片描述

根据你的操作系统自行选择。我是 Windows 11 系统,选择下载本地的安装包。

下载后双击 CUDA 安装文件(我的是 cuda_11.6.1_511.65_windows.exe),选择安装工具的目录,建议不要装在 C 盘!

在这里插入图片描述

这个是 CUDA 的安装工具,安装完成后会打开对应的引导程序。这里选择自定义:

在这里插入图片描述

记得去掉 VS 工具的勾选。我之前做 Model Deployment 的时候有用到,但是这个工具很多时候会导致安装失败,所以还是不要安装:

在这里插入图片描述

如果 Display Driver 的当前版本大于新版本,则去掉勾选:

在这里插入图片描述

点击下一步,这一步很重要。网上很多教程都没告诉大家改安装目录,请千万记得如果你的盘都是固态盘,尽量不要安装在 C 盘。

我在 D 盘新建了目录,选择安装在了 D 盘,这是默认的安装路径:

在这里插入图片描述

注意这一步需要自己按照默认的路径来在其他盘自己新建文件夹。虽然文件夹名不一致问题不大,但是还是尽量命名时和默认路径中的名字保持一致,这是我自己新建了文件夹并修改后的:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

更改好安装目录后,点击下一步进行安装。

安装完成后,win+r 重启 cmd,并输入 nvcc -V 命令,检查是否安装好:

在这里插入图片描述

成功完成!

下载配置 cuDNN

cuDNN 官网下载 cuDNN ,注意选择版本时,要和 CUDA 版本对应)

选择下载 Zip 文件:

在这里插入图片描述

点击后会有个注册过程,注册后就可以下载了!

然后解压下载的文件(我的是 cudnn-windows-x86_64-8.4.1.50_cuda11.6-archive )。这里也可以顺便检查一下 cuDNN 和 CUDA 版本是否一致。
在这里插入图片描述
将解压后的文件夹重命名为 cudnn:

在这里插入图片描述

并复制到你的 CUDA 安装目录(我的是 D:\NVIDIA GPU Computing Toolkit\CUDA\v11.6)

在这里插入图片描述

配置环境变量

环境变量的修改网上教程很多,这里不详细描述。此电脑->右键->属性->高级系统设置->高级->环境变量

在这里插入图片描述

双击系统变量的 Path :

在这里插入图片描述

新建->浏览,选择对应的文件夹,然后一路确定(注意千万不要删掉其他的系统变量!)

在这里插入图片描述

安装 Pytorch 的 GPU 版本

Pytorch 官网安装提供了不同版本的 Pytorch 安装命令,大家按需自取。默认方式只会安装最新的稳定版 Pytorch 版本,可能会和你电脑的 CUDA 驱动不一致。

我的是 11.6 的 CUDA,且我已经安装了 Anaconda 集成编译环境,所以我选择 Stable 版本的。下文有讲到如果是其他版本的 CUDA,该如何选择使用不同命令来安装 PyTorch。

在这里插入图片描述

根据官网的提示,我们需要添加 conda-forge ,让 cudatoolkit 包能被搜索到,在命令行里输入:

conda config --append channels conda-forge

在这里插入图片描述

注意:如果你需要之前版本的 pytorch 可以点击 Previous PyTorch Versions。Pytorch 官网 - 以前版本安装提供了其他的 CUDA 版本的安装命令,请根据自己电脑的 CUDA 版本按需选择。

在这里插入图片描述

然后我们就可以输入 conda install 的安装命令,安装 pytorch 和 torchvision (我不做语音开发所以没有安装 torchaudio ):

# 以11.6版本为例
conda install pytorch torchvision cudatoolkit=11.6 -c pytorch -c conda-forge

成功安装最新版本 1.12.1 的 Pytorch!

在这里插入图片描述

查看是否安装了对应的 PyTorch 和,命令行输入:

conda list

如图,可以找到这两个包信息:
在这里插入图片描述
在这里插入图片描述

3.9 版本 python + 11.6 的 CUDA 驱动 + 对应的 8.0 cuDNN 神经网络加速,1.12.1 最新版本的 pytorch,成功!

注意: torchtext, PyG, torchsummary, torchviz 等一些拓展库没有 conda 版本支持,安装这些时需要用 pip install ... 。它们分别是,自然语言处理库,图神经网络库,两个模型可视化库。这四个库都是按需安装,根据特定任务选装。torchtext, torchsummary, torchviz 安装较为简单:

pip install torchtext torchsummary torchviz

PyG 图神经网络库的安装比较复杂,按需安装,可以看这篇文章

这一章节的余下部分我们将讲一些 GPU 测试和使用的代码。如果电脑本身不支持 CUDA 的,或者框架没有配置 GPU 的请跳过这章的剩余部分。`

判断 GPU 是否可用和版本号

接下来新建一个 py 文件,测试一下环境是否配置好:

如果以下代码输出为 True,则环境已经配置好。

# 导入相关库
import torch
import torch.nn as nn
from torchvision import transforms
torch.cuda.is_available()
True

输出版本号:

print(torch.__version__)
print(torch.version.cuda)
print(torch.backends.cudnn.version())
1.12.1
11.6
8302

在这里插入图片描述

使用 GPU

定义 device :

# import os
# os.environ["KMP_DUPLICATE_LIB_OK"]="TRUE"

# apply GPU
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
# device = torch.device('cpu')
print(device)
cuda

输出设备个数和版本号

print(torch.cuda.device_count())
print(torch.cuda.get_device_name(0))
1
NVIDIA GeForce RTX 3070 Ti Laptop GPU

在这里插入图片描述

1. 可用如下代码在数据建立时就指定 device.

X = torch.randn(3, 3, device=device, requires_grad=True)
X
tensor([[ 0.8280,  1.6671,  0.3400],
        [ 0.1082,  0.1605,  1.4127],
        [ 0.7233, -1.4746,  1.2668]], device='cuda:0', requires_grad=True)

2. 如果指定了 device 为 GPU ,可以用如下代码将数据和模型 push 到 GPU 上,默认为 CPU 。

X = X.to(device) # device为你自己指定的设备
y = torch.tensor([1, 2, 3], dtype=torch.float64)
y.to(device)
tensor([1., 2., 3.], device='cuda:0', dtype=torch.float64)

3. 如果不想指定 device,也可以用如下代码将数据和模型在不同设备上切换。

# 举例说明,这部分代码无法运行
X_train = X_train.cuda() # GPU
X_train = X_train.cpu() # CPU

4. 以下代码说明,在深度学习代码的框架中,什么时候需要将数据和模型 push 到 GPU 上。

如果你指定了device = torch.device("cuda"),则注释掉的代码和源代码等价。

# 举例说明,这部分代码无法运行
# 模型需要放到GPU上
my_net = my_net().to(device)
# my_net = my_net().cuda()

# 定义损失函数需要放到GPU上
loss_func = nn.CrossEntropyLoss().to(device)
# loss_func = nn.CrossEntropyLoss().cuda()  

# 训练过程中
for step, (X_train, y_label) in enumerate(data_loader):
    X_train, y_label = X_train.to(device), y_label.to(device)
    # X_train, y_label = X_train.cuda(), y_label.cuda()
    ...
    
# 对数据进行预测后,如果需要用numpy/matplotlib处理
y_pred = my_net(X_val).cpu()
指定 GPU

当前仅当如果你的设备有多个 GPU 时,可用以下代码进行管理:

1.终端直接指定

CUDA_VISIBLE_DEVICES=2 python3 xxx.py

2.在脚本中用函数指定

torch.cuda.set_device(1)

处理多 GPU 并行计算:

model_gpu = nn.DataParallel(my_net, device_ids=[0, 1])
output = model_gpu(input)

首先将模型加载到主 GPU 上,然后复制模型到各个指定的 GPU 上,将输入数据按 batch 维度进行划分,分配到每个 GPU 上独立前向传播,然后反向传播更新单个 GPU 的参数,最后将更新后的参数复制到各个 GPU 上。

  • 2
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值