网站做移动适配,如何加强网站建设,中国建设银行汕头支行网站,建设一个货代网站想要多少钱文章目录 数据精度CUDA概念线程线程块线程网络计算核心GPU规格参数内存 GPU并行方式数据并行流水并行张量并行混合专家系统 数据精度
FP32 是单精度浮点数#xff0c;用8bit 表示指数#xff0c;23bit 表示小数#xff1b;FP16 是半精度浮点数#xff0c;用… 文章目录 数据精度CUDA概念线程线程块线程网络计算核心GPU规格参数内存 GPU并行方式数据并行流水并行张量并行混合专家系统 数据精度
FP32 是单精度浮点数用8bit 表示指数23bit 表示小数FP16 是半精度浮点数用5bit 表示指数10bit 表示小数BF16 是对FP32单精度浮点数截断数据即用8bit 表示指数7bit 表示小数 为什么聚焦半精度
内存占用更少fp16 模型占用的内存只需 fp32 模型的一半 模型训练时可以用更大的batchsize模型训练时GPU并行时的通信量大幅减少大幅减少等待时间加快数据的流通 计算更快主流 GPU 都有针对 fp16 的计算进行优化在这些 GPU 中半精度的计算吞吐量可以是单精度的 2-8 倍
CUDA概念
线程线程块线程网络计算核心
CUDA中线程可以分成三个层次线程、线程块和线程网络。 线程ThreadCUDA 中基本执行单元由硬件支持、开销很小每个线程执行相同代码线程块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/6416 1024/6416次执行 GPU 在管理线程的时候是以block为单元调度到 SM 上执行。每个 block 中以warp(一般32个线程或64线程) 作为一次执行的单位(真正的同时执行)
一个GPU包含多个 SM 而每个SM包含多个 CoreSM 支持并发执行多达几百的Thread 。一个Block只能调度到一个 SM 上运行直到Thread Block运行完毕。一个SM可以同时运行多个Block 因为有多个 Core
GPU规格参数
不同的GPU规格参数不一样执行参数不同比如 Fermi 架构:
每一个SM上最多同时执行 8 个 Block。(不管 Block 大小)每一个SM上最多同时执行 48 个 warp。每一个SM上最多同时执行 48 × 32 1536 48 \times 321536 48×321536 个线程。
内存
一个 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分配分配不同的数据子集同时进行处理分别求解梯度然后求解所有节点的平均梯度每个节点各自进行反向传播 各节点的同步更新策略
单独计算每个节点上的梯度计算节点之间的平均梯度阻塞涉及大量数据传输影响训练速度单独计算每个节点相同的新参数 Pytorch对于数据并行有很好的支持数据并行也是最常用的GPU并行加速方法之一。 将模型按层分割不同的层被分发到不同的GPU上运行。每个GPU上只有部分参数因此每个部分的模型消耗GPU的显存成比例减少常用于GPU显存不够无法将一整个模型放在GPU上
流水并行
layer的输入和输出之间存在顺序依赖关系因此在一个GPU等待其前一个GPU的输出作为其输入时朴素的实现会导致出现大量空闲时间。这些空闲时间被称作“气泡”而在这些等待的过程中空闲的机器本可以继续进行计算。
张量并行 张量并行如果在一个layer内“水平”拆分数据。许多现代模型如Transformer的计算瓶颈是将激活值与权重相乘。 矩阵乘法可以看作是若干对行和列的点积可以在不同的 GPU 上计算独立的点积也可以在不同的 GPU 上计算每个点积的一部分然后相加得到结果。 无论采用哪种策略都可以将权重矩阵切分为大小均匀的“shards”不同的GPU负责不同的部分要得到完整矩阵的结果需要进行通信将不同部分的结果进行整合
混合专家系统
混合专家系统MoE是指对于任意输入只用一小部分网络用于计算其输出。在拥有多组权重的情况下网络可以在推理时通过门控机制选择要使用的一组权重这可以在不增加计算成本的情况下获得更多参数。每组权重都被称为“专家experts”理想状态下网络能够学会为每个专家分配专门的计算任务不同的专家可以托管在不同的GPU上为扩大模型使用的GPU数量提供一种明确的方法。