第一章 PyTorch的简介和安装
1.1 PyTorch的简介
知识点1. Pytorch的使用Trends
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wf62Uy2a-1663158273249)(1-0.png)]](https://1000bd.com/contentImg/2023/11/05/183018786.png)
1.2 PyTorch的安装
知识点1. Anaconda 退出当前环境命令
conda deactivate
知识点2. 如何查看系统中的显卡
- 方法1: 在cmd/terminal 输入 nvidia-smi
- 使用 NVIDIA控制面板和使用任务管理器查看自己是否有NVIDIA的独立显卡及其型号.
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QwPphlrB-1663158273250)(1-1.png)]](https://1000bd.com/contentImg/2023/11/05/183017650.png)
安装PyTorch的时候可以向下兼容.
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)
print(x.data.requires_grad)
y = 2 * x
x.data *= 100
y.backward()
print(x)
print(x.grad)
tensor([1.])
False
tensor([100.], requires_grad=True)
tensor([2.])
2.3 并行计算简介
知识点1. GPU的两种使用方式
import os
os.environ["CUDA_VISIBLE_DEVICE"] = "2"
CUDA_VISBLE_DEVICE=0,1 python train.py
知识点2. 三种并行方式
-
Network partitioning; 将不同模型的组件分配到不同的GPU上.GPU的传输,通信很重要.但是GPU的通信在这种密集任务中很难办到.
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-b32cqT33-1663158273250)(01.png)]](https://1000bd.com/contentImg/2023/11/05/183018587.png)
-
Layer-wise partitioning; 对同一层的模型做一个拆分,让不同的GPU取训练同一层模型的部分任务.架构如下:(在同步任务加重的情况下, 会出现和第一种方式一样的问题)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xh4CIuQq-1663158273251)(02.png)]](https://1000bd.com/contentImg/2023/11/05/183016766.png)
-
Data parallelism; 同一个模型在不同GPU中训练一部分数据,然后再分别计算一部分数据之后,只需要将输出的数据做一个汇总,然后再反转.架构如下:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jX3nvN96-1663158273251)(03.png)]](https://1000bd.com/contentImg/2023/11/05/183016673.png)
- 这种方式可以解决前两种模式下的通讯问题.现在主流的方式是数据并行的方式.