码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 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

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

    1.2 PyTorch的安装

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

    conda deactivate
    
    • 1

    知识点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
    
    • 1
    • 2
    • 接下来输入以下命令安装两个包
    conda install --offline pytorch压缩包的全称(后缀都不能忘记)
    conda install --offline torchvision压缩包的全称(后缀都不能忘记)
    
    • 1
    • 2

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

    • 进入所在的虚拟环境,紧接着输入python,再输入下面的代码
    import torch
    torch.cuda.is_available()
    
    • 1
    • 2
    • 这条命令意思是检验是否可以调用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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    tensor([1.])
    False
    tensor([100.], requires_grad=True)
    tensor([2.])
    
    • 1
    • 2
    • 3
    • 4

    2.3 并行计算简介

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

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

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

    知识点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)]

      • 这种方式可以解决前两种模式下的通讯问题.现在主流的方式是数据并行的方式.
  • 相关阅读:
    Vue里面怎么使用站点地图Sitemap做SEO
    微服务: xxl-job的安装(docker),使用及springboot整合[完整版详解]
    java计算机毕业设计线上医药用品分销系统设计与实现MyBatis+系统+LW文档+源码+调试部署
    使用ZIP包安装MySQL及配置教程
    Python基础入门笔记
    Vue2封装评论组件详细讲解
    [量子计算与量子信息] 2.1 线性代数
    腾讯云-服务违规封禁提醒解决
    数据结构与算法之字典: Leetcode 76. 最小覆盖子串 (Typescript版)
    如何改善交通管制带来的交通拥堵?
  • 原文地址:https://blog.csdn.net/weixin_42596275/article/details/126841626
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号