【exe 格式源码】【海南溯源码划掉】【家政平台系统源码】05的源码_源代码0和1
1.LM训练05 ZeRO系列
2.求cocos2d-x教程
3.Cesium开发基础篇 | 05glTF介绍及加载
4.SparkSQL源码分析-05-SparkSQL的源代码join处理
5.UE5 05 Media框架的探索与流视频播放应用
LM训练05 ZeRO系列
分布式训练的几个主题包括:
LLM训练 分布式通信,LLM训练 显存占用分析,码源LLM训练 高效训练方法,源代码LLM训练 数据并行,码源LLM训练 ZeRO系列,源代码LLM训练 流水线并行,码源exe 格式源码LLM训练 张量并行,源代码LLM训练 Megatron-LM 源码分析。码源
微软发布了四篇论文:
ZeRO: Memory optimizations Toward Training Trillion Parameter Models (/) - 提出了ZeRO-DP和 ZeRO-R
ZeRO-Offload: Democratizing Billion-Scale Model Training (/) - 微软
ZeRO-Infinity: Breaking the GPU Memory Wall for Extreme Scale Deep Learning (/) - 微软
ZeRO++: Extremely Efficient Collective Communication for Giant Model Training (/) - 微软
ZeRO1.1 概览
ZeRO包含两组优化:
(1)ZeRO-DP:减少模型状态PGO的源代码显存占用
(2)ZeRO-R:减少剩余显存的消耗。
1.2 ZeRO-DP
目标是码源优化数据并行,减少显存冗余,源代码最小化通信量。码源
原理是源代码使用动态通信策略来分区优化器状态、梯度和参数。码源
实现是源代码对模型参数进行分区,梯度也相应分区,优化器只优化本分区的参数。
两个原则:类型:
1.2.1 ZeRO-Stage 1
原理是对优化器状态进行分区,每个rank更新相应参数后,收集构成完整模型。
流程:通信分析:单个GPU总通信量为2*ψ。
1.2.2 ZeRO-Stage 2
在Stage1基础上,对梯度进行分区。
ZeRO-2分割Optimizer States与Gradients。
用完即删原则:每个rank只对自己负责的参数Pi的梯度进行规约。
通信分析:同ZeRO-Stage1,单个GPU总通信量为2*ψ。
1.2.3 ZeRO-Stage 3
在Stage1/Stage2基础上,海南溯源码划掉对模型参数进行分区。
ZeRO-3分割Optimizer States、Gradients和Parameters。
需要用时去取原则:计算特定layer时,对参数进行all-gather。
通信分析:单个GPU总通信量为3*ψ。
1.2.4 动画视频
The video below shows how ZeRO (with all three stages) performs a training step including forward pass, backward pass, and parameter update.
1.2.5 实验效果
实验配置:G 8*A、全参训练,bs=1,checkpointing=True。
实验全参训练,最多只能跑B模型,B模型跑不起来。
1.2.6 ZeRO-DP VS DDP
1.3 ZeRO-R
1.3.1 中间激活值
认为checkpoint方法虽然有用,但在大型LLM中激活值仍然占用大量显存。
eg:B的LLM,bs=,激活值显存占用GB。
方法:Offload到CPU中。
1.3.2 临时缓存区
在梯度reduce操作中,用于存储中间结果的临时缓冲区会消耗大量显存。
方法:申请固定大小的缓存区 constant size buffers 。
1.3.3 内存碎片
原因:内存碎片是tensor生命周期错配的结果。
问题:即使有足够的显存,可能会因为缺少连续内存而使得内存分配失败。
方法:ZeRO为激活检查点和梯度预先分配连续内存块,并在初始化时将它们复制到预先分配的家政平台系统源码连续内存中。
2、ZeRO-Offload
利用CPU内存来解决GPU显存不足的问题。
CPU:参数更新在CPU完成。
GPU:前向和后向的计算在GPU上完成。
3、ZeRO-Infinity
利用外接存储设备来解决GPU显存不足的问题。
4、ZeRO++
to do...
5、Deepspeed ZeRO源码
5.1 入口
5.1.1 总入口initialize()
源码地址:deepspeed.__init__
简介:选择不同的engin引擎。
5.1.2 ZeRO引擎DeepSpeedEngine
源码地址:deepspeed.runtime.engine
整体流程及关键方法如下所示:
(1)DeepSpeedEngine.init
核心内容:最重要的就是对优化器(Optimizer)的初始化。
ZeRO 的核心特性的实现都在优化器(Optimizer)中,核心方法_configure_zero_optimizer() 。
stage1/2 优化器:DeepSpeedZeroOptimizer
stage3 优化器:DeepSpeedZeRoOffload
(2)DeepSpeedEngine.forward
核心内容:在模型model进行前向传播,返回loss,ZeRO不需要进行特殊处理
(3)DeepSpeedEngine.backward
核心内容:获得各个rank上对应分片参数Pi的梯度Gi。
self.optimizer.backward()
Zero stage1:self.optimizer.reduce_gradients()
Zero stage2:self.overlapping_partition_gradients_reduce_epilogue
(4)DeepSpeedEngine.step
核心内容:基于梯度Gi更新对应的分片参数Pi,各rank收集最新的、完整的模型参数P
self.optimizer.step()
self.optimizer.zero_grad()
5.2 DeepSpeedZeroOptimizer
源码地址:deepspeed.runtime.zero.stage_1_and_2
简介:stage1/2 优化器,对参数的Optimizer States与Gradients进行分割。
5.2.1 init
核心思路:ZeRO初始化时候会对参数进行均匀切分给各个rank。通过参数分区,进而实现梯度、优化器的分区。
除此之外,注册梯度钩子函数reduce_partition_and_remove_grads(当梯度计算完成时自动调用该函数)
5.2.2 forward
在模型model进行前向传播,返回loss,ZeRO不需要进行特殊处理。mud欢乐源码网
5.2.3 backward
5.2.4 reduce_ipg_grads()
ipg:Independent Parallel Gradient
简介:对连续的ipg梯度进行reduce。
求cocos2d-x教程
cocos教程百度网盘免费资源在线学习链接: /s/1lYZHKPPVuvBR4rddE1jasA
提取码: e2htcocos教程 极客学院Cocos2d-x源码 _第5阶段 项目实战 _第4阶段 功能扩展 _第3阶段 常用功能 _第2阶段 基础知识 _第1阶段 环境搭建 5 使用Eclipse在Ubuntu下搭建Cocos2d-x 3集成开发环境 4 Cocos Code IDE使用 3 Windows环境下Visual Studio 中搭建Cocos2d-x 3.1集成开发环境 2 Cocos2d-x3.1rc0项目创建及新功能介绍 1 WinMac环境Cocos2d-x开发环境搭建 . HelloWorld示例详解.webm . 在Mac平台编译成Android程序.webm . Mac平台开发环境搭建.webm
Cesium开发基础篇 | glTF介绍及加载
在Cesium开发中,了解如何加载和使用glTF模型是非常重要的。glTF,即Graphics Language Transmission Format,是一种专为图形应用设计的高效、可扩展且互操作的3D内容传输格式,由Khronos集团维护,现已成为Web上的3D对象标准。
glTF提供了一种通用的方式来传输和加载3D模型,几乎所有的3D Web框架都支持glTF格式。它通过JSON文件描述模型,支持外部数据,并允许将文件转换为二进制格式glb。Cesium提供了一个源码库,可将obj文件转换为glTF格式,方便开发者使用。
glTF模型结构包括一个JSON文件和可选的外部文件,以及两种主要格式:glTF和glb。glTF文件定义了场景、节点、网格、相机、材质等元素,而glb则将所有内容封装在二进制格式中。JSON文件中的场景对象以数组形式存储,每个对象通过引用节点定义了场景图。游戏源码解说文案节点可以包含变换参数、网格引用、相机等,并通过索引定义了对象之间的关系。
每个glTF模型的核心是其JSON结构,包括场景、节点、相机、网格、皮肤、动画、访问器、材质和纹理等元素。场景由引用节点定义,节点可以包含变换参数、网格和相机,以及描述网格变换的蒙皮。相机定义了渲染场景的视锥体配置,网格描述了场景中的几何数据,皮肤定义了蒙皮参数,动画描述了节点随时间变化的参数,访问器提供了数据源,材质定义了3D对象的外观参数,而纹理定义了图像如何在对象上张贴。
为了验证和查看glTF模型,可以使用多个在线工具,如glTF在线验证器、浏览-Sketchfab、PlayCanvas查看器、ThreeJS查看器、BabylonJS查看器等。开发者还可以使用glTF转glb工具将模型转换为二进制格式。
Cesium提供了两种加载glTF模型的方式:通过Entity API和Primitive API。Entity API允许开发者创建和管理模型,而Primitive API则负责渲染模型。使用模型时,可以设置模型矩阵属性,定义模型的坐标转换,为模型创建一个局部坐标系。
为了深入学习Cesium和glTF,推荐查阅相关文档和书籍。此外,了解glTF规范、掌握Cesium API,并尝试使用不同工具加载和查看模型,可以极大地提升开发技能。通过实践和学习,开发者能够更好地利用Cesium实现复杂的3D可视化应用。
SparkSQL源码分析--SparkSQL的join处理
SparkSQL的join处理策略多样,针对不同场景各有优劣。首先,map join适用于小表广播至worker节点,提升性能,但大表可能导致OOM。shuffle hash join则对大表进行分区和排序,效率高但内存密集。默认策略通过sort merge join,对大表进行分区排序,避免内存问题,但需预先排序。
当常规策略不可用时,会考虑等值或不等值join的广播nested loop join,适用于特定条件的right或left outer join。笛卡尔积join在无指定key时使用,仅限inner join。
SparkPlan中的Join子节点与策略紧密相关,如在等值连接时,根据hint选择Broadcast hash join、Shuffle sort merge join或shuffle hash join。没有hint时,依据表大小、join类型和排序情况自动选择。
非等值连接时,hint会引导使用broadcast nested loop join或Cartesian product join,无hint时则依据表大小和连接类型来决定。
在特殊情况下,如NotInSubquery,仍可能选择Broadcast hash join。总的来说,SparkSQL的join策略灵活多变,旨在根据具体场景提供最优的执行效率和资源利用率。
UE5 Media框架的探索与流视频播放应用
在探讨如何在虚幻引擎(Unreal Engine,简称UE)中集成视频流播放功能时,我们首先需要了解UE的基本播放流程和模块设计。通常,UE在蓝图中创建对应资产即可轻松搭建视频链接,但若涉及如rtsp协议等国产摄像头的视频流接入需求,则需要借助UE的灵活性和插件支持进行额外模块的加入。本文旨在深入解析UE Media框架,通过理解其设计模式、C++知识以及具体实现,帮助开发者实现视频播放功能的拓展。
在UE中,视频播放的通用流程主要在蓝图中完成,官方文档和各类个人博客提供了详尽的教程。模块(Module)作为UE的基本元素,封装和实现了特定功能,如Media模块,它在UE5.3版本中与其他版本有区别,但面向的是UE初学者。
理解UE的基本知识对于实现视频播放功能至关重要。UE的多线程机制允许在游戏过程中高效处理视频播放任务,避免阻塞主线程。掌握FRunnable、FRunnableThread、FAsyncTask、FEvent等多线程相关类是必要的,这有助于开发者正确地在视频播放中应用多线程技术。
UE的TickGroup机制则帮助开发者理解Tick流程,确保视频播放任务在恰当的时机执行。虽然整个Tick流程较为复杂,本文仅关注Media模块的Tick嵌入位置,提供一个概览,以便开发者理解其在引擎中的作用。
设计模式在UE中得到广泛应用,如工厂模式(Factory)用于创建和管理对象,外观模式(Facade)提供简化接口,而代理模式(Proxy)则用于保护或控制对真实对象的访问。理解这些模式有助于开发者更高效地组织和扩展代码。
在C++知识方面,`TSharedFromThis`是UE中智能指针的实现之一,用于方便地管理对象的生命周期和共享状态。通过了解`std::enable_shared_from_this`在STL中的应用,开发者能更好地在UE中使用这一特性。CRTP(The Curiously Recurring Template Pattern)的了解则能提供更深入的智能指针原理理解。
UE的Media模块包含三个主要部分:Media、MediaAssets、MediaUtils,分别从底层接口、具体实现到资源管理角度提供视频播放功能。MediaPlayerFacade和MediaPlayer是关键组件,它们通过外观模式(Facade Pattern)提供接口,隐藏底层复杂性,同时允许开发者通过插件轻松扩展功能。
UMediaPlayer与IMediaPlayer之间的区别在于高、低层播放器的职责划分,前者负责高阶逻辑处理,后者实现底层解码逻辑。MediaPlayer的实例化通常通过MediaPlayerFacade实现,通过不同的插件支持不同的解码器。
UE视频播放流程涉及多个线程的协作,Media模块单独运行在自己的线程中,处理视频解码和采样,而其他功能(如输入、输出和渲染)则在主GameThread中执行。UE源码中使用特定术语如Track和Sink来管理视频播放的各个部分,每个部分在不同Tick阶段执行特定任务。
本文旨在提供UE Media框架的全面解析,帮助开发者理解其工作原理和实现细节,以便在项目中灵活应用和扩展视频播放功能。通过本文,开发者不仅能够解决特定需求,如接入国产摄像头视频流,还能更深入地理解UE的模块化设计和多线程机制,为复杂项目提供坚实的基础。