当前位置: 首页 > news >正文

网站开发模板用什么秀米网站怎么做推文

网站开发模板用什么,秀米网站怎么做推文,建站的步骤,有哪些做微场景的没费网站PS#xff1a;本篇只在宏观上介绍相关概念和技术#xff0c;不做数学推导和过于细节介绍#xff0c;旨在快速有一个宏观认知#xff0c;不拘泥在细节上#xff0c;导致很混乱。 涉及技术名词 分布式框架等涉及的技术名词很多#xff0c;很容易让人眼花缭乱#xff0c;…PS本篇只在宏观上介绍相关概念和技术不做数学推导和过于细节介绍旨在快速有一个宏观认知不拘泥在细节上导致很混乱。 涉及技术名词 分布式框架等涉及的技术名词很多很容易让人眼花缭乱整体可以概括如下 1、混合精度训练。 2、并行维度数据并行、张量并行、流水线并行、模型并行、3D并行、混合并行。 3、ZeRO 1、ZeRO 2、ZeRO 3、ZeRO-offload 4、框架基本都有或就是基于pytorchMegatron、DeepSpeed、Megatron-LM、Megatron-DeepSpeed 、pytorch 自带的FSDP。 5、关于Attention优化Flash Attention、Flash Attention 2、 Paged Attention、Xformers、MHA、MQA、GQA。 6、硬件nvlink、nvswitch、Infiniband。 1、混合精度训练 目的是降低显存消耗和加速推理过程。大致原理是模型参数、梯度、激活等使用FP16或BF16然后再保存一份模型的状态sgd如果是Adam则包含模型、一阶专状态、二阶状态三份参数用于梯度更新。原因是单纯半精度有如下问题 1溢出错误由于FP16的动态范围比FP32位的狭窄很多因此在计算过程中很容易出现上溢出和下溢出溢出之后就会出现NaN的问题。在深度学习中由于激活函数的梯度往往要比权重梯度小更易出现下溢出的情况。 2舍入误差当梯度过小时小于当前区间内的最小间隔时该次梯度更新可能会失败。 如下为不同精度的表示。由于 FP16 和 BF16 相较 FP32 精度低训练过程中可能会出现梯度消失和模型不稳定的问题。因此需要使用一些技术来解决这些问题例如动态损失缩放Dynamic Loss Scaling和混合精度优化器Mixed Precision Optimizer。 混合训练整体流程如下Adam为例。 Adam 优化器状态包括采用 FP32 保存的模型参数备份一阶动量和二阶动量也都采用 FP32 格式存储。假设模型参数量为 Φ模型参数和梯度都是用 FP16格式存储则共需要 2Φ 2Φ (4Φ 4Φ 4Φ) 16Φ 字节存储。其中 Adam 状态占比 75%。动态损失缩放反向传播前将损失变化dLoss手动增大 2K 倍因此反向传播时得到的激活函数梯度则不会溢出反向传播后将权重梯度缩小 2K 倍恢复正常值。举例来说对于包含 75 亿个参数模型如果用 FP16 格式只需要 15GB 计算设备内存但是在训练阶段模型状态实际上需要耗费 120GB。    使用方式很简单需要Tensor core 支持如下 # amp依赖Tensor core架构所以模型必须在cuda设备下使用 model Model() model.to(cuda)  # 必须 optimizer optim.SGD(model.parameters(), ...)# 新增创建GradScaler对象 scaler GradScaler(enabledTrue)  # 虽然默认为True体验一下过程for epoch in epochs:for img, target in data:optimizer.zero_grad()# 新增启动autocast上下文管理器with autocast(enabledTrue):# 不变上下文管理器下model前向传播以及loss计算自动切换数值精度output model(img)loss loss_fn(output, target)# 修改反向传播scaler.scale(loss).backward()# 修改梯度计算scaler.step(optimizer)# 新增scaler更新scaler.update() 但是注意并行训练时需要autocast装饰model的forward函数 MyModel(nn.Module):autocast()def forward(self, input):... 2、并行维度 单设备计算速度主要由单块计算加速芯片的运算速度和数据 I/O 能力来决定对单设备训练效率进行优化主要的技术手段有混合精度训练、算子融合、梯度累加等多设备加速比需要综合考虑计算、显存、通信三方面因素。 并行大体上分为数据并行、模型并行细分为流水线并行和张量并行、混合并行也叫3D并行混合使用数据并行和模型并行。 数据并行对数据进行切分并将同一个模型复制到多个设备上并行执行不同的数据分片这种方式通常被称为数据并行。它和单计算设备训练相比最主要的区别就在于反向计算中的梯度需要在所有计算设备中进行同步以保证每个计算设备上最终得到的是所有进程上梯度的平均值。     模型并行对模型进行划分将模型中的算子分发到多个设备分别完成往往用于解决单节点内存不足的问题。模型并行从计算图角度分为如下两种 1按模型的层切分到不同设备即层间并行或算子间并行Inter-operator Parallelism也称之为流水线并行Pipeline Parallelism PP 2将计算图层内的参数切分到不同设备即层内并行或算子内并行Intra-operator Parallelism也称之为张量并行Tensor Parallelism TP。需要根据模型的具体结构和算子类型解决如何将参数切分到不同设备以及如何保证切分后数学一致性两个问题。 其中流水线并行存在的问题就是并行气泡改进方案有Gpipe(数据分割成更小的micro-batch)、megtron里面的1F1B策略每个设备可以并行执行不同阶段的计算任务。 混合并行训练超大规模语言模型时往往需要同时对数据和模型进行切分从而实现更高程度的并行这种方式通常被称为混合并行。针对千亿规模的大语言模型通常在每个服务器内部使用张量并行策略由于该策略涉及的网络通信量较大需要利用服务器内部的不同计算设备之间进行高速通信带宽。通过流水线并行将模型的不同层划分为多个阶段每个阶段由不同的机器负责计算。这样可以充分利用多台机器的计算能力并通过机器之间的高速通信来传递计算结果和中间数据以提高整体的计算速度和效率。最后在外层叠加数据并行策略以增加并发数量提升整体训练速度。通过数据并行将训练数据分发到多组服务器上进行并行处理每组服务器处理不同的数据批次。参考下图BLOOM模型的训练结构。     3、zero系列优化 通过混合精度和并行维度前两部分的解读对于数据并行而言如果你使用的是Adam优化器目前LLM几乎都是Adam那么75%的参数都在存储FP32的模型状态。所以zero目标就是针对模型状态的存储进行去冗余的优化。本质而言是针对数据并行的优化使用分区的方法即将模型状态量分割成多个分区每个计算设备只保存其中的一部分。这样整个训练系统内只需要维护一份模型状态减少了内存消耗和通信开销。包含3种强度的去冗余不同强度通信开销不同 Zero-1 和 Zero-2 对整体通信量没有影响对通讯有一定延迟影响但是整体性能影响很小。 Zero-3 所需的通信量则是正常通信量的1.5 倍。对应下图的Pos、Posg、Posgp *zero-1对 Adam 优化器状态进行分区图中的 Pos。模型参数和梯度依然是每个计算设备保存一份。此时每个计算设备所需内存是 4Φ 12Φ/N 字节其中 N 是计算设备总数。当 N 比较大时每个计算设备占用内存趋向于 4ΦB也就是原来 16ΦB 的 1/4。 *zero-2对模型梯度进行分区图中的 Posg。模型参数依然是每个计算设备保存一份。此时每个计算设备所需内存是 2Φ (2Φ12Φ)/N 字节。当 N 比较大时每个计算设备占用内存趋向于2ΦB也就是原来 16ΦB 的 1/8。 *zero-3: 对模型参数也进行分区图中的 Posgp。此时每个计算设备所需内存是 (16Φ /N) * B。当 N比较大时每个计算设备占用内存趋向于 0。 *ZeRO Infinity可以看成是stage-3的进阶版本需要依赖于NVMe的支持。他可以offload所有模型参数状态到CPU以及NVMe上。得益于NMVe协议除了使用CPU内存之外ZeRO可以额外利用SSD(固态)从而极大地节约了memory开销加速了通信速度。 使用方法 DeepSpeed使用过程中的一个难点就在于时间和空间的权衡。先使用下述代码大概估计一下显存消耗决定使用的GPU数目以及ZeRO-stage。原则是能直接多卡训练就不要用ZeRO能用ZeRO-2就不要用ZeRO-3。 from transformers import AutoModel from deepspeed.runtime.zero.stage3 import estimate_zero3_model_states_mem_needs_all_live## specify the model you want to train on your device model AutoModel.from_pretrained(t5-large)## estimate the memory cost (both CPU and GPU) estimate_zero3_model_states_mem_needs_all_live(model, num_gpus_per_node1, num_nodes1) 真实使用主要就是三点安装DeepSpeed、编写配置文件、训练shell命令。具体可以参考DeepSpeed使用指南(简略版)-CSDN博客 1安装transformers 默认已经集成了deepspeed pip install deepspeed # 或 pip install transformers 2编写配置文件以zero-2为例命名为ds_config.json    {bfloat16: {enabled: auto},fp16: {enabled: auto,loss_scale: 0,loss_scale_window: 1000,initial_scale_power: 16,hysteresis: 2,min_loss_scale: 1},optimizer: {type: AdamW,params: {lr: auto,betas: auto,eps: auto,weight_decay: auto}},scheduler: {type: WarmupLR,params: {warmup_min_lr: auto,warmup_max_lr: auto,warmup_num_steps: auto}},zero_optimization: {stage: 2,offload_optimizer: {device: cpu,pin_memory: true},allgather_partitions: true,allgather_bucket_size: 2e8,overlap_comm: true,reduce_scatter: true,reduce_bucket_size: 2e8,contiguous_gradients: true},gradient_accumulation_steps: auto,gradient_clipping: auto,train_batch_size: auto,train_micro_batch_size_per_gpu: auto,steps_per_print: 1e5} 3编写启动shell脚本 deepspeed --master_port 29500 --num_gpus2 run_s2s.py --deepspeed ds_config.json 4、框架 Megatron、DeepSpeed、Megatron-LM、Megatron-DeepSpeed 、pytorch 自带的FSDP。目前网上已有总结也不是很清楚其中DeepSpeed是微软的Megtron是NVIDIA的用的最多的是deepspeed, transformers库很多也是用Deepspeed。然后DeepSpeed也集成了megatron所以目前我的理解是用DeepSpeed作为基础本身基于pytorch再集成使用megatron、pytorch、flash Attention2是202303xx最优解 PS:在 DeepSpeed 框架个人理解最大的优势就是zero优化zero论文和DeepSpeed都是微软团队 Pos 对应 Zero-1 Posg 对应 Zero-2 Posgp 对应 Zero-3。 如下给出了 DeepSpeed 3D 并行策略示意图。图中给出了包含 32 个计算设备进行 3D 并行的例子。神经网络的各层分为 4 个流水线阶段。每个流水线阶段中的层在 4 个张量并行计算设备之间进一步划分。最后每个流水线阶段有两个数据并行实例使用 ZeRO 内存优化在这 2 个副本之间划分优化器状态量。     5、关于Attention优化 MHA、MQA、GQA 是算法上的概念对应不同的注意力机制如下图。 1MHAMulti Head Attention中每个头有自己单独的 key-value 对 2MQAMulti Query Attention中只会有一组 key-value 对 3GQAGrouped Query Attention中会对 attention 进行分组操作query 被分为 N 组每个组共享一个 Key 和 Value 矩阵。GQA-N 是指具有 N 组的 Grouped Query Attention。GQA-1具有单个组因此具有单个Key 和 Value等效于MQA。而GQA-H具有与头数相等的组等效于MHA。 flash Attention、 flash Attention 2、xformer、 Paged Attention 工程实现优化Attention的推理性能。 Flash Attention、Flash Attention 2主要是利用GPU的并行特性从循环角度进行优化。 Paged Attention主要是针对KV的缓存cache的优化。 Xformer虽然有优化显存等底层也用了flash Attention我的理解是个库有很多实现。 使用都很简单都是一句话直接调用参考速度飙升200%Flash Attention 2一统江湖注意力计算不再是问题 - 知乎涉及代码如下 import torch import torch.nn.functional as F from flash_attn import flash_attn_func from xformers.ops import memory_efficient_attention, LowerTriangularMaskdef pytorch_func(q, k, v, causalFalse):o F._scaled_dot_product_attention(q, k, v, is_causalcausal)[0]return odef flash_attention(q, k, v, causalFalse):o flash_attn_func(q, k, v, causalcausal)return odef xformers_attention(q, k, v, causalFalse):attn_bias xformers_attn_bias if causal else Noneo memory_efficient_attention(q, k, v, attn_biasattn_bias)return o 6、硬件架构 NVLink可以简单理解是GPU卡上有通信接口网口网线的概念。nv switch可以理解为是交换机确实是一个硬件同一台机器pod不同GPU使用nvswich 底层通过nvlink链接如果卡很少我的理解其实可以不使用nvswtich,直接卡间互联。可以参考如下图 不同机器pod之间通过采用InfiniBand网络通信标准的交换机链接如下图     参考链接 [LLM]大模型训练(一)--DeepSpeed介绍-CSDN博客 LLM十七从 FlashAttention 到 PagedAttention, 如何进一步优化 Attention 性能 - 知乎
http://www.tj-hxxt.cn/news/222103.html

相关文章:

  • 茶叶销售网站源代码怎么开网站平台
  • 做农家乐网站榆次做企业网站
  • 天津建设厅官方网站网站制作设计发展前景
  • 怎样做内网网站网站流量监控
  • 网站网址查询工具利润在100万到300万之间税率2021
  • 如何查询网站已经提交备案关于网站建设毕业答辩怎么说
  • 局域网建设个人网站秦皇岛网站制作与网站建设
  • 泉州企业免费建站中国建筑网官网电工证证件查询
  • 仿摄影网站wordpress同时登录
  • 网站设计网站维护原生多重筛选插件wordpress
  • 广东东莞属于哪个市seo专员工资一般多少
  • 用dw做简单图片网站多元网络兰州网站建设
  • 烟台做网站的淘宝网站是谁做的好
  • 招标网站哪个比较好广告投放代理商
  • 徐州优化网站网站流量的做
  • 网站开发类标书模板做网站项目体会
  • 购物网站可行性分析报告ps做网页效果图
  • 网站服务器如何搭建邢台163最新交友
  • 网上手机商城网站建设安徽seo网站
  • 宜兴建设局 网站wordpress用户推广插件
  • 网页设计与网站建设的概述百度账号快速注册
  • 网站返回500错误页面西安门户网站建设公司哪家好
  • 正版传奇手游官方网站深圳比较好的网站设计公司
  • 古色古香的网站模板网页网站建设的步骤流程
  • 自己怎么做外贸网站空间安卓程序下载安装
  • 怎么查网站到期时间网站建设公司响应式网站模板
  • 哪里可以上传自己的php网站wordpress新建页面源码
  • 学校网站 aspx源码服务器上网站打不开
  • 登陆工伤保险网站 提示未授权 怎么做百度热搜高考大数据
  • 网站快速建设程序陕西高速公路建设网站