主页

混合精度训练与显存复用

本文是《Transformer 加速策略》的下篇,聚焦混合精度训练与自注意力反向传播的显存复用。上篇讲算子融合与减少同步,见 transformer-acc。 4 混合精度策略 4.1 动机 现代 GPU 支持 FP16/FP8(H100)。 收益 可以减少显存,增大batch size 可以更快传输数据 可以有更高的FLOPS 4.2 混合策略(为什么不全部采用低精度) forward 和 backward 可以用fp16 /fp8 优化器必须用fp32 FP16 / FP8 的动态范围有限,不能精确地累计很多次梯度更新,会导致数值不稳定、训练...

阅读更多

transformer的加速策略

1 Transformer 训练的4个阶段 如图所示,transformer 训练有4个阶段 前向传播 反向传播 梯度聚合(AllReudce Aggregation) 参数更新(Optimizer Step) 2 算子融合(Kernel Fusion)策略 2.1 概念 朴素实现: C = A + B E = C + D 需要 4 次 load、2 次 store、2 次矩阵加,并且 需要两次 kernel 启动(launch)。 融合后(自定义单个 kernel): E = A + B + C 只需 3 次 load、1 次 store、2 次矩阵加,一次...

阅读更多

GPU 内存访问优化与稀疏矩阵

本文是《GPU加速策略》的下篇,聚焦内存访问局部性、稀疏矩阵乘法与 cuBLAS 库。上篇讲 CUDA 内存模型与 Tiled 矩阵乘法,见 gpu-acceleration。 7 内存并行与访问局部性 Locality / Bursts Organization 局部排布/交错排除 • Consecutive memory 顺序读取 accesses in a warp are coalesced together. • Row-major format to store multidimensional array in C and CUDA • allows DRAM burst, faster than individual acces 7.1 合并访问 (Coalesc...

阅读更多

GPU加速策略

1 GPU 加速技术概览(GPU Acceleration Tech) 1.1 主要方向 Tiling(分块) Memory Parallelism(内存并行) GPU 上的矩阵乘法加速 稀疏矩阵乘法(Sparse MatMul) cuBLAS 库使用 2 GPU 上的矩阵乘法基础示例 __global__ void MatMulKernel(float *a, float *b, float *c, int N) { // Compute each thread's global row and col index -> output: (i, j) int row = blockIdx.y * blockDim.y + thr...

阅读更多

LLM的decoding

1. 序列解码(Sequence Decoding )概览 大语言模型在生成文本时,需要从词汇表中逐个选择 token 来组成完整的序列。 核心问题是:如何选择最优的 token 序列。 1.1 四种主要策略 1.1.1 朴素方案:穷举搜索(Exhaustive Search) 思路:尝试所有可能的 token 组合,找到概率最高的序列 复杂度: \(O(V^N)\) 其中 $V$:词汇表大小(通常几万到十几万) $N$:序列长度 示例:词汇表 5 万,生成 10 个 token → (50000^{10}) 种可能 结论:完全不可行,计算成本天文数字。 1.1.2 贪心解码(Gr...

阅读更多

LLM的tokenizer

tokenizer 有多种计算token,进行转换的方式 1. Byte Pair Encoding (BPE) 1.1 BPE 算法概述 BPE 最早是为数据压缩提出的算法, 其核心思想是: 统计字节(或字符)对的频率 把频率最高的一对替换成一个新的”符号” 重复这个过程,不断合并频繁出现的对,形成越来越大的”词典” 需要注意的是,BPE 拆分的子单词不一定都具有语义意义 1.2 BPE 词表构建流程 1.2.1 初始化词表(Initialize vocabulary) 一开始,BPE 的词表只包含: 所有单个字符(例如英文字母 a-z,标点,空格等) 一个词尾标志(end-of-word symbol,通常用 </w> 或 ▁...

阅读更多

MFU估算

1. 浮点计算基础概念 1.1 FLOP(Floating Point Operation) FLOP 表示一次基本的浮点运算,例如加法 $x + y$ 或乘法 $x \times y$。 1.2 FLOPs FLOPs 表示“总共做了多少浮点运算”,即计算工作量的度量。 例如,训练 GPT-3 的总计算量约为: \[3.14 \times 10^{23} \text{ FLOPs}\] 1.3 FLOP/s 或 FLOPS FLOP/s(FLOPS) 表示“每秒能执行多少次浮点运算”,是硬件的速度指标。 例如: NVIDIA A100:约 312 TFLOP/s NVIDIA H100:约 1979 TFLOP/s(带稀疏性) ≈ 989 TFLOP/s...

阅读更多

Energon 多模态数据加载框架

1 主要功能 基于 WebDataset 的存储格式 采用 WebDataset 作为底层数据集存储方案,支持高效的顺序读取和分布式访问。 超大规模数据集处理 针对多机多卡训练场景深度优化,尤其DP并行,能够处理 PB 级别的超大规模数据集。 数据集混合 支持将多个异构数据集按权重混合或拼接,适用于多任务学习和课程学习场景。 状态管理 提供状态保存与恢复机制,确保训练可中断、可复现、可继续,保证数据迭代的完全一致性。 多模态数据支持 在同一训练流程中处理文本、图像、视频、音频等多种模态数据。 2 基础接口与基础组件 2.1 基础接口 2.2.1 单条数据加载 from megatron.energon import get_train_dataset, get_load...

阅读更多