CUDA的基础知识

文章目录

  • 数据精度
  • CUDA概念
    • 线程&线程块&线程网络&计算核心
    • GPU规格参数
    • 内存
  • GPU并行方式
    • 数据并行
    • 流水并行
    • 张量并行
    • 混合专家系统

数据精度

  • FP32 是单精度浮点数,用8bit 表示指数,23bit 表示小数;
  • FP16 是半精度浮点数,用5bit 表示指数,10bit 表示小数;
  • BF16 是对FP32单精度浮点数截断数据,即用8bit 表示指数,7bit 表示小数
    在这里插入图片描述
  • 为什么聚焦半精度?
  1. 内存占用更少:fp16 模型占用的内存只需 fp32 模型的一半:
    • 模型训练时,可以用更大的batchsize;
    • 模型训练时,GPU并行时的通信量大幅减少,大幅减少等待时间,加快数据的流通;
  2. 计算更快:主流 GPU 都有针对 fp16 的计算进行优化,在这些 GPU 中,半精度的计算吞吐量可以是单精度的 2-8 倍;

CUDA概念

线程&线程块&线程网络&计算核心

  • CUDA中线程可以分成三个层次:线程、线程块和线程网络
    • 线程(Thread):CUDA 中基本执行单元,由硬件支持、开销很小,每个线程执行相同代码;
    • 线程块(Block):若干线程的分组,Block 内一个块至多512个线程、或1024个线程(根据不同的 GPU 规格),线程块可以是一维、二维或者三维的;
    • 线程网络(Grid):若干线程块 Block 的网格,Grid 是一维和二维的
  • GPU 有很多线程,在CUDA里被称为 Thread,同一组 Thread归为一个Block,而Block 又会被组织成一个Grid
    在这里插入图片描述
  • GPU 上有很多计算核心[ Streaming Multiprocessor (SM)], SM 是一块硬件,包含固定数量的运算单元,寄存器和缓存。
  • 在具体的硬件执行中,一个SM会同时执行一组线程,在CUDA 里叫warp,直接可以理解这组硬件线程warp会在这个 SM 上同时执行一部分指令,一组的数量一般为32或者64个线程
  • 一个 Block 会被绑定到一个SM上,这些线程组会被相应的调度器来进行调度,在逻辑层面上1024个线程同时执行,但实际上在硬件上是一组线程同时执行。假如一个SM同时能执行 64个线程,但一个Block 有1024个线程,那这 1024 个线程是分 1024 / 64 = 16 1024/64=16 1024/64=16次执行

  • GPU 在管理线程的时候是以block为单元调度到 SM 上执行。每个 block 中以warp(一般32个线程或64线程) 作为一次执行的单位(真正的同时执行)
  1. 一个GPU包含多个 SM ,而每个SM包含多个 Core,SM 支持并发执行多达几百的Thread 。
  2. 一个Block只能调度到一个 SM 上运行,直到Thread Block运行完毕。一个SM可以同时运行多个Block (因为有多个 Core)

GPU规格参数

不同的GPU规格参数不一样,执行参数不同,比如 Fermi 架构:

  • 每一个SM上最多同时执行 8 个 Block。(不管 Block 大小)
  • 每一个SM上最多同时执行 48 个 warp。
  • 每一个SM上最多同时执行 48 × 32 = 1536 48 \times 32=1536 48×32=1536 个线程。

内存

  • 一个 Block 会绑定在一个 SM 上,同时一个 Block内的Thread共享一块 ShareMemory(一般是SM的一级缓存,越靠近SM的内存就越快)。
  • GPU和CPU也一样有着多级 Cache 还有寄存器的架构,把全局内存的数据加载到共享内存上再去处理可以有效的加速。
    在这里插入图片描述

GPU并行方式

  • 数据并行(Data Parallelism):在不同的GPU上运行同一批数据的不同子集;
  • 流水并行(Pipeline Parallelism):在不同的GPU上运行模型的不同层;
  • 张量并行(Tensor Parallelism):将单个数学运算(如矩阵乘法)拆分到不同的GPU上运行;
  • 混合专家系统(Mixture-of-Experts):只用模型每一层中的一小部分来处理
    在这里插入图片描述

数据并行

  • 将整个模型放在一块GPU里,再复制到每一块GPU上,同时进行正向传播和反向误差传播,相当于加大batch_size。
  • 每个GPU都加载模型参数,这些GPU称为工作节点(workers),为每个GPU分配分配不同的数据子集同时进行处理,分别求解梯度,然后求解所有节点的平均梯度,每个节点各自进行反向传播

  • 各节点的同步更新策略
  1. 单独计算每个节点上的梯度
  2. 计算节点之间的平均梯度(阻塞,涉及大量数据传输,影响训练速度)
  3. 单独计算每个节点相同的新参数
  • Pytorch对于数据并行有很好的支持,数据并行也是最常用的GPU并行加速方法之一。

  • 将模型按层分割,不同的层被分发到不同的GPU上运行。每个GPU上只有部分参数,因此每个部分的模型消耗GPU的显存成比例减少,常用于GPU显存不够,无法将一整个模型放在GPU上
    请添加图片描述

流水并行

  • layer的输入和输出之间存在顺序依赖关系,因此在一个GPU等待其前一个GPU的输出作为其输入时,朴素的实现会导致出现大量空闲时间。这些空闲时间被称作“气泡”,而在这些等待的过程中,空闲的机器本可以继续进行计算。
    请添加图片描述

张量并行

  • 张量并行:如果在一个layer内“水平”拆分数据。许多现代模型(如Transformer)的计算瓶颈是将激活值与权重相乘

  • 矩阵乘法可以看作是若干对行和列的点积:可以在不同的 GPU 上计算独立的点积,也可以在不同的 GPU 上计算每个点积的一部分,然后相加得到结果。

  • 无论采用哪种策略,都可以将权重矩阵切分为大小均匀的“shards”,不同的GPU负责不同的部分,要得到完整矩阵的结果,需要进行通信将不同部分的结果进行整合

混合专家系统

  • 混合专家系统(MoE)是指,对于任意输入只用一小部分网络用于计算其输出在拥有多组权重的情况下,网络可以在推理时通过门控机制选择要使用的一组权重,这可以在不增加计算成本的情况下获得更多参数。
  • 每组权重都被称为“专家(experts)”,理想状态下,网络能够学会为每个专家分配专门的计算任务不同的专家可以托管在不同的GPU上,为扩大模型使用的GPU数量提供一种明确的方法。
    请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/829925.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

「Good Subarrays」Solution

简述题意 我们定义一个数组 b b b 是好的当且仅当所有的 b i ≥ i b_i \ge i bi​≥i。 现在给你 q q q 次操作,每次操作有两个数 p p p 和 x x x,求出把 a p a_p ap​ 赋值成 x x x 后 a a a 数组好的子序列的个数,每次操作独立。 …

[97编程世界冠军4K组]代码被转为ts脚本github代码如何在WIN10运行和调试

源代码地址:iGitHub - SuperSodaSea/Omniscent: Analysis and Replication of Omniscent, the 1st in the Mekka & Symposium 1997 PC 4K Intro Competition. 1、软件安装nodejs和webstorm都要安装: node-v20.12.2-x64.msi WebStorm-2024.1.1.exe 代…

L1-041 寻找250

作者 陈越 单位 浙江大学 对方不想和你说话,并向你扔了一串数…… 而你必须从这一串数字中找到“250”这个高大上的感人数字。 输入格式: 输入在一行中给出不知道多少个绝对值不超过1000的整数,其中保证至少存在一个“250”。 输出格式&a…

【进程通信】利用管道创建进程池(结合代码)

文章目录 什么叫进程池进程池的优点 创建进程池代码实现: 什么叫进程池 我们知道,一个进程创建子进程通常是为了让这个子进程去为它完成某个任务。例如我们使用的指令,其实就是bash进程创建子进程让子进程去执行的。但是我们需要考虑这样一个…

【介绍下分布式系统】

🌈个人主页: 程序员不想敲代码啊 🏆CSDN优质创作者,CSDN实力新星,CSDN博客专家 👍点赞⭐评论⭐收藏 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共…

macos如何安装Tesseract软件

问题在线过程: 今天在mac系统上安装tesseract持续失败,整了很久终于把这个问题解决了,所以希望通过这篇文章分享给大家: 首先,我在用 brew install tesseract 或 brew install --build-from-source tesseract 一直报错,报错内容如下: Warning: You are using macO…

wegame启动游戏错误代码126,加载x3daudio1_7.dll失败的修复教程

在尝试通过WeGame平台启动某款游戏时,遇到了阻碍,系统反馈了一个特定的错误代码“错误代码126,加载x3daudio1_7.dll失败”。这个错误提示表示游戏无法加载x3daudio17.dll文件,导致游戏无法正常启动。经过一番研究和尝试&#xff0…

vue elementui el-table表格 点击单元格添加选中样式

注意: 1、点击某行单元格添加选中样式; 2、表格第一列数据单独添加样式,比如:加粗; 3、表格表头添加样式,比如:修改背景色; 先上代码(效果图在文章末尾)&…

python-pytorch 如何使用python库Netron查看模型结构(以pytorch官网模型为例)0.9.2

Netron查看模型结构 参照模型安装Netron写netron代码运行查看结果需要关注的地方 2024年4月27日14:32:30----0.9.2 参照模型 以pytorch官网的tutorial为观察对象,链接是https://pytorch.org/tutorials/intermediate/char_rnn_classification_tutorial.html 模型代…

Ansible自动化

Ansible自动化 自动化的需求: 1. 在什么样的场景下需要自动化? 批量化的工作: 装软件包、配置服务、升级、下发文件… 2. 为什么在自动化工具中选择ansible? 对比shell脚本: 相对于用shell的脚本来实现自动化&#x…

42.接雨水

接雨水是一个非常经典的题目了,我在二刷的时候,终于能独立做了,在记录一下灵神的横着计算的单调栈思想. 法一: 竖着计算 奇思妙想 让我们想想,接到的雨水到底是存储哪里了呢,其实他就是凹陷部分,而什么是凹陷呢,就是从左边看,从右边看都发现不了的地方. …

滑块验证码破解----Java使用opencv后端破解滑块验证

使用技术:Java SpringBootopenCV 在windows上首先需要下载opencv进行安装,先去官网:Releases - OpenCV 下载这个windows版本的安装包 下载后直接安装解压就行,然后需要,然后找到安装位置里的这个文件: 你下载的是什么版本的,这里的数字就是多少,比如我下载4.5.3版本那么这…

kubectl无法使用清理磁盘

执行Kubectl get pods 报错如下&#xff1a; # kubectl get nodes The connection to the server <master>:6443 was refused - did you specify the right host or port?查看占用磁盘&#xff1a; df -h 查看占用100%的数据 df -h | grep 100% 检查环境变量&#xff…

(学习日记)2024.04.26:UCOSIII第五十节:User文件夹函数概览(uC-CPU文件夹)

之前的章节都是针对某个或某些知识点进行的专项讲解,重点在功能和代码解释。 回到最初开始学μC/OS-III系统时,当时就定下了一个目标,不仅要读懂,还要读透,改造成更适合中国宝宝体质的使用方式。在学完野火的教程后,经过几经思考,最后决定自己锦上添花,再续上几章。 这…

【数据库】关于数据库你必须知道的事情

常用命令 mysql -u username -p USE mydatabase; SHOW DATABASES; CREATE DATABASE newdatabase;数据库的规约 包括&#xff1a; 建表规约&#xff1b;索引规约&#xff1b;SQL与ORM映射规约&#xff1b; Explain技巧 explain的结果代表的含义需要比较清楚。参数中&#x…

永磁同步电机SMO负载转矩观测matlab模型。

永磁同步电机SMO负载转矩观测matlab模型。 负载转矩的有效识别是提高伺服驱动系统抗负载扰动性能的关键之一。现在的传统结构的LTID滑模观测器存在频率抖动大&#xff0c;估计精度差的缺点&#xff0c;限制了其在高性能伺服系统中的应用。 本模型推导分析了传统LTID滑模观测器…

【k8s】:Pod的生命周期详解

【k8s】:Pod的生命周期详解 1、Pod的生命周期1.1、Pod的创建1.2、Pod的调度1.3、Pod的初始化1.4、Pod的运行及钩子函数1.4.1 k8s中的3种钩子函数1.4.2 k8s中的3种探测类型1.5、Pod的终止1.6、Pod的重启2、Pod的生命周期的五种状态(相位)💖The Begin💖点点关注,收藏不迷…

eclipse 如何创建python文件

一、准备 1.平台要求&#xff1a; 电脑除了要安装eclipse软件和Python语言包之外&#xff0c;还需要将Python集成到eclipse软件中&#xff0c;网上有很多的方法&#xff0c;这里就不细细介绍如何集成了。 在下面界面中可以看到自己已经安装了继承插件。具体方法见步骤2&…

YOLOV5 TensorRT部署 BatchedNMS(转换engine模型)(上)

文章目录 1.修改yolo detct层2.导出onnx模型并引入plugin3.转换为engine文件YoloV5使用tensorRT部署时,模型推理是放在cuda上操作,得到的结果需要在cpu上执行nms操作,但是当图像中的目标较多,或者检测出来的框较多时,nms耗时较长。 TensorRT 官方提供了batchedNMSPlugin的…

AI新篇章:全面解读ChatGPT3.5与GPT4.0的革命性融合

MidTool&#xff08;kk.zlrxjh.top&#xff09;&#xff0c;一个集成了多种先进人工智能技术的助手&#xff0c;融合了ChatGPT3.5、GPT4.0、DALLE 3和Midjourney等多个智能服务&#xff0c;提供多功能体验。下面是对这些技术的简要概述&#xff1a; **ChatGPT3.5**&#xff1a;…