1.CesiumJS 源码杂谈 - 从光到 Uniform
2.[转]Megatron-LM源码系列(八): Context Parallel并行
CesiumJS 源码杂谈 - 从光到 Uniform
CesiumJS 源码探索:光照与Uniform的转换之旅
CesiumJS 对光照的处理主要依赖于其底层API与WebGL着色器的交互。尽管它默认只支持一个太阳光,安全安全但通过DirectionalLight扩展,底层的双可模拟各种光照效果。源码光在CesiumJS中被转换为Uniform值,向量线程线程向以统一的安全安全通信达 源码形式传递给着色器执行。
首先,底层的双CesiumJS的源码光照类型主要包括场景默认的太阳光和DirectionalLight,后者允许设定光照方向。向量线程线程向例如,安全安全官方示例中的底层的双《Lighting》展示了如何运用DirectionalLight创建灯光效果。方向光多了一个方向属性,源码通常表示为单位向量。向量线程线程向
在源码中,安全安全光照信息通过UniformState对象在每帧渲染时传递给Renderer。底层的双这个过程始于Scene.js模块的render函数,其中的uniformState会更新来自FrameState的光照参数。当Context对象执行DrawCommand时,ShaderProgram的element改源码_uniforms列表会填充来自uniformState的值,包括那些由AutomaticUniforms自动更新的,如光的属性。
光照Uniform在着色器中的应用十分广泛,如点云着色时使用czm_lightColor,冯氏着色法(Phong)材质通过czm_lightColor进行漫反射和高光计算,Globe.js则在GlobeFS片元着色器中使用czm_lightColor。在Model API的PBR着色法中,czm_lightColorHdr变量在光照阶段的计算中扮演重要角色。
总的ai瞄准源码来说,CesiumJS的光照系统通过Uniform的转换,确保光照信息在复杂渲染流程中的顺畅传递。然而,深入研究光照材质,特别是在自定义光照效果方面,仍需要进一步学习实时渲染(RealTimeRendering)的知识。
[转]Megatron-LM源码系列(八): Context Parallel并行
原文链接: Megatron-LM源码系列(八): Context Parallel并行
Context Parallel并行(CP)与sequence并行(SP)相比,核心差异在于SP只针对Layernorm和Dropout输出的activation在sequence维度进行切分,而CP则进一步扩展,gtp检测源码对所有input输入和所有输出activation在sequence维度上进行切分,形成更高效的并行处理策略。除了Attention模块外,其他如Layernorm、Dropout等模块在CP并行中无需任何修改,因为它们在处理过程中没有涉及多token间的交互。
Attention模块之所以特殊,是因为在计算过程中,每个token的cad测量源码查询(query)需要与同一sequence中其他token的键(key)和值(value)进行交互计算,存在内在依赖性。因此,在进行CP并行时,计算开始前需要通过allgather通信手段获取所有token的KV向量,反向计算时则通过reduce_scatter分发gradient梯度。
为了降低显存使用,前向计算阶段每个GPU仅保存部分KV块,反向阶段则通过allgather通信获取全部KV数据。这些通信操作在特定的rank位置(相同TP组内)进行,底层通过send和recv等操作实现allgather和reduce_scatter。
以TP2-CP2的transformer网络为例,CP并行的通信操作在Attention之前执行,其他则为TP通信。AG表示allgather,RS表示reduce_scatter,AG/RS表示前向allgather反向reduce_scatter,RS/AG表示前向reduce_scatter反向allgather。
TP2对应为[GPU0, GPU1], [GPU2, GPU3],CP2指的就是TP组相同位置的rank号,即[GPU0, GPU2], [GPU1, GPU3]。CP并行类似于Ring Attention,但提供了OSS与FlashAttention版本,并去除了冗余的low-triangle causal masking计算。
LLM常因序列长度过长而导致显存耗尽(OOM)。传统解决方法包括重计算或扩大TP(tensor parallel)大小,但各自存在计算代价增加或线性fc计算时间减少与通信难以掩盖的问题。CP则能更高效地解决这一问题,每个GPU处理一部分序列,同时减少CP倍的通信和计算量,同时保持TP不变,使得activation量也减少CP倍。性能优化结果展示于图表中,用户可通过指定--context-parallel-size在Megatron中实现CP。
具体源码实现以Megatron-Core 0.5.0版本为例进行说明。
参考资料:[链接]