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

第一章 PyTorch的简介和安装

1.1 PyTorch的简介

知识点1. Pytorch的使用Trends

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wf62Uy2a-1663158273249)(1-0.png)]

1.2 PyTorch的安装

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

conda deactivate

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

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

知识点3. CUDA版本兼容表

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QwPphlrB-1663158273250)(1-1.png)]

安装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的通信在这种密集任务中很难办到.
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-b32cqT33-1663158273250)(01.png)]

  • Layer-wise partitioning; 对同一层的模型做一个拆分,让不同的GPU取训练同一层模型的部分任务.架构如下:(在同步任务加重的情况下, 会出现和第一种方式一样的问题)
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xh4CIuQq-1663158273251)(02.png)]

  • Data parallelism; 同一个模型在不同GPU中训练一部分数据,然后再分别计算一部分数据之后,只需要将输出的数据做一个汇总,然后再反转.架构如下:
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jX3nvN96-1663158273251)(03.png)]

    • 这种方式可以解决前两种模式下的通讯问题.现在主流的方式是数据并行的方式.
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值