Pytorch环境搭建,基础知识及GPU并行简介

文章目录

  • 第一章 PyTorch的简介和安装
    • 1.1 PyTorch的简介
      • 知识点1. Pytorch的使用Trends
    • 1.2 PyTorch的安装
      • 知识点1. Anaconda 退出当前环境命令
      • 知识点2. 如何查看系统中的显卡
      • 知识点3. CUDA版本兼容表
      • 知识点4. Pytorch和cudatoolkit的版本适配网址
      • 知识点5. 离线下载
      • 知识点6. 检验是否安装成功
    • 1.3 Pytorch相关资源
  • 第二章 Pytorch基础知识
    • 2.1 张量
      • 知识1. 张量的几种类型
      • 问题2: 关于多维数据属于哪种张量类型
    • 2.2 自动求导
      • 问题1.关于.grad_fn属性
      • 知识2. 关于修改tensor数值,且不印象反向传播(不被autograd记录)
    • 2.3 并行计算简介
      • 知识点1. GPU的两种使用方式
      • 知识点2. 三种并行方式

第一章 PyTorch的简介和安装

1.1 PyTorch的简介

知识点1. Pytorch的使用Trends

Pytorch环境搭建,基础知识及GPU并行简介_第1张图片

1.2 PyTorch的安装

知识点1. Anaconda 退出当前环境命令

conda deactivate

知识点2. 如何查看系统中的显卡

  • 方法1: 在cmd/terminal 输入 nvidia-smi
  • 使用 NVIDIA控制面板和使用任务管理器查看自己是否有NVIDIA的独立显卡及其型号.

知识点3. CUDA版本兼容表

Pytorch环境搭建,基础知识及GPU并行简介_第2张图片

安装PyTorch的时候可以向下兼容.

知识点4. Pytorch和cudatoolkit的版本适配网址

Previous PyTorch Versions|PyTorch

知识点5. 离线下载

  • 下载地址: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/
  • 通过地址,我们需要下载好对应版本的Pytorch和torchvision包,然后打开 Anaconda Prompt/Terminal中,进入我们安装的路径下.
cd package_location
conda activate env_name
  • 接下来输入以下命令安装两个包
conda install --offline pytorch压缩包的全称(后缀都不能忘记)
conda install --offline torchvision压缩包的全称(后缀都不能忘记)

知识点6. 检验是否安装成功

  • 进入所在的虚拟环境,紧接着输入python,再输入下面的代码
import torch
torch.cuda.is_available()
  • 这条命令意思是检验是否可以调用cuda, 如果我们安装的是CPU版本的话会返回False, 能够调用GPU的会返回True. 一般这个命令不报错的话就证明安装成功.

1.3 Pytorch相关资源

  1. Awesome-pytorch-list: 目前已获12K Star, 包含了NLP, CV, 常见库, 论文实现以及Pytorch的其他项目.

第二章 Pytorch基础知识

2.1 张量

知识1. 张量的几种类型

张量维度 代表含义
0维张量 代表的是标量(数字)
1维张量 代表的是向量
2维张量 代表的是矩阵
3维张量 时间序列数据 股价 文本数据 单张彩色图片(RGB)

问题2: 关于多维数据属于哪种张量类型

  • 一个数据的列表形式表示为: [1.1, 2,3, 4.4, 5.5, 6.6].将这个形状为 1 * 6的数据转化为Tensor数据类型;请问它是几维张量?
  • My Answer:
    • 这个是一个向量,是6维的一维张量.简单的来说,有几层[]就表示几维张量.

2.2 自动求导

问题1.关于.grad_fn属性

  • 每个张量都有一个.grad_fn属性,该属性引用了创建Tensor自身的Function.
  • torch.Tensor是Autograd这个包的核心类.如果设置它的属性.requires_grad为True,那么它将会追踪对于该张量的所有操作.当完成计算后可以通过调用.backward(),来自动计算所有的梯度.这个张量的所有梯度会自动累加到.grad属性.
  • 我想问: 一个张量的.grad_fn属性数值为None,那么这个张量的.requires_grad是否一定为False?反之,如果一个张量的.grad_fn属性数值不为None,那么这个张量的.requires_grad是否一定为True?
  • My Answer:
    • 如果是自己生成的变量,那么grad_fn就是None,如果是涉及到一些函数的生成的变量,那么.grad_fn就不是None.
    • 在函数y=2*x情况下,如果x的requires_grad是True,那么y的requires_grad也是True.此时y的requires_grad不能再次设置为False.
      如果x的requires_grad是False,那么y的requires_grad也是False.此时y的requires_grad可以设置为True.

知识2. 关于修改tensor数值,且不印象反向传播(不被autograd记录)

  • 如果我们想要修改tensor的数值,但是又不希望被autograd记录,那么我们可以对tensor.data进行操作.
x = torch.ones(1, requires_grad = True)

print(x.data)    # 还是一个tensor
print(x.data.requires_grad)     #但是已经是独立于计算图之外

y = 2 * x
x.data *= 100     # 只改变了值, 不会记录在计算图, 所以不会影响梯度传播

y.backward()
print(x)     # 更改data的数值也会影响tensor的数值
print(x.grad)
tensor([1.])
False
tensor([100.], requires_grad=True)
tensor([2.])

2.3 并行计算简介

知识点1. GPU的两种使用方式

  • 在.py文件中设置
import os
os.environ["CUDA_VISIBLE_DEVICE"] = "2"     #设置默认的显卡

  • 在控制台中设置
CUDA_VISBLE_DEVICE=0,1 python train.py     # 使用0, 1两块GPU

知识点2. 三种并行方式

  • Network partitioning; 将不同模型的组件分配到不同的GPU上.GPU的传输,通信很重要.但是GPU的通信在这种密集任务中很难办到.
    Pytorch环境搭建,基础知识及GPU并行简介_第3张图片

  • Layer-wise partitioning; 对同一层的模型做一个拆分,让不同的GPU取训练同一层模型的部分任务.架构如下:(在同步任务加重的情况下, 会出现和第一种方式一样的问题)
    Pytorch环境搭建,基础知识及GPU并行简介_第4张图片

  • Data parallelism; 同一个模型在不同GPU中训练一部分数据,然后再分别计算一部分数据之后,只需要将输出的数据做一个汇总,然后再反转.架构如下:
    Pytorch环境搭建,基础知识及GPU并行简介_第5张图片

    • 这种方式可以解决前两种模式下的通讯问题.现在主流的方式是数据并行的方式.

你可能感兴趣的:(Pytorch,pytorch,深度学习,python)