第一章 PyTorch的简介和安装
1.1 PyTorch的简介
知识点1. Pytorch的使用Trends
1.2 PyTorch的安装
知识点1. Anaconda 退出当前环境命令
conda deactivate
知识点2. 如何查看系统中的显卡
- 方法1: 在cmd/terminal 输入 nvidia-smi
- 使用 NVIDIA控制面板和使用任务管理器查看自己是否有NVIDIA的独立显卡及其型号.
知识点3. CUDA版本兼容表
安装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相关资源
- 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的通信在这种密集任务中很难办到.
-
Layer-wise partitioning; 对同一层的模型做一个拆分,让不同的GPU取训练同一层模型的部分任务.架构如下:(在同步任务加重的情况下, 会出现和第一种方式一样的问题)
-
Data parallelism; 同一个模型在不同GPU中训练一部分数据,然后再分别计算一部分数据之后,只需要将输出的数据做一个汇总,然后再反转.架构如下:
- 这种方式可以解决前两种模式下的通讯问题.现在主流的方式是数据并行的方式.