Personal Knowledge Publishing
唐宇涵的个人知识站
体系结构——权衡的艺术,性能的诗歌
最新文章
-
翻译:HybridFlow: A Flexible and Efficient RLHF Framework(未完成)
原文连接:HybridFlow: A Flexible and Efficient RLHF Framework 开源代码 AI 翻译的内容,还没有仔细看和贴上图片。 还缺乏足够的背景知识,补充完成后再来看。 Abstract 人类反馈强化学习(RLHF)被广泛用于大语言模型(LLM)对齐。传统强化学习可以被建模为一种数据流,其中每个节点表示一个神经网...
-
RLHF 学习路线
推荐先从 huggingface 强化学习教程入门。 图解大模型RLHF系列之:人人都能看懂的PPO原理与源码解读 分界线,以下内容由 AI 生成 下面给你一版更“工程 + 科研”两条线并行的 RLHF 学习路线。定位是:你已经懂一些 LLM/SFT/Transformer,但强化学习基础较弱,目标是进入 AI Infra 里的 RLHF/RLVR/Ali...
-
LLM 推理框架学习路线
以下内容为 AI 生成 下面我不再给“30天强行冲刺”的安排,而是按你要的顺序,整理一份LLM 推理框架研究地图: 发展脉络 → 综述/论文 → 代码资源。 重点面向后续做 LLM inference serving / AI Infra / Systems for ML 方向科研。 (1)LLM 推理框架发展的脉络 LLM 推理框架的发展,本质上是在...
-
方差、协方差、相关系数
基本概念 方差 Variance 方差衡量随机变量相对其均值的离散程度。 $$ \operatorname{Var}(X)=\mathbb{E}\left[(X-\mathbb{E}[X])^2\right] $$ 等价形式: $$ \operatorname{Var}(X)=\mathbb{E}[X^2]-\left(\mathbb{E}[X]\right...
-
KL 散度
老饼讲解-机器学习 KL散度公式 KL散度(Kullback-Leibler divergence)也称为 KL 距离。 KL 散度衡量一个概率分布 $Q$ 相对于真实分布 $P$ 的差异,它们的KL 散度计算公式为: $$ \mathrm{KL}(P\|Q)=\sum_{x\in X} P(x)\ln\frac{P(x)}{Q(x)} $$ 当 $x$...
-
Transformer 架构:Scaled Dot-Product Attention 的缩放因子推导
Transformer 中的数值稳定性:为什么 Attention 需要除以 $\sqrt{d_k}$
-
DeepSeek-V2(一):DeepSeekMoE
MoE(混合专家)的核心目标是:在显著降低训练和推理计算代价的同时,保持甚至提升模型的整体能力。 参考DeepSeek-MOE 原理讲解 从 Dense 模型到 MoE 架构 在标准的 Transformer 中,Attention 机制负责捕捉序列内的长距离依赖关系,而后续的 FeedForward 层则对每个位置的表征进行非线性变换与升维再降维的处理。...
-
位置编码(一):旋转位置编码 RoPE
RoPE 旋转位置编码:从旋转矩阵到 LLaMA 源码实现 RoPE 还具备远程衰减和外推性,后面有需要再推导。 本文的推导过程与 RoFormer: Enhanced Transformer with Rotary Position Embedding 中的推导方式有所不同。原论文采用的是复平面展开的分析方法,而本文的推导思路更为直观易懂,主要参考了...
-
MoE 负载均衡损失的数学推导:从损失函数下界到 MoE 可微辅助损失
在机器学习(如 MoE 混合专家模型机制)或分布式计算中,负载均衡辅助损失函数(Load Balancing Loss) 的核心目标是让所有计算节点(专家)的调用频率完全一致。通过柯西不等式可以严谨地证明:当且仅当系统达到绝对的负载均衡时,该损失函数取得全局最小值,此时算力利用率最高,系统损失最小。 损失函数的下界 1. 构建损失函数模型 假设系统中有 $...
-
DeepSeek-V2(二):MLA
多头潜在注意力 MLA:从 KV Cache 到 DeepSeek 的低秩压缩方案 来源: DeepSeek-v2 MLA 原理讲解 MLA原理讲解 1. 为什么先从标准多头注意力说起 在大模型自回归生成中,模型每次根据已有 token 预测下一个 token。以某一层 Transformer block 为例,当前 token 的隐藏状态记为...
-
DeepSeek-V3(一):稀疏注意力机制(DSA)
这是 GPT 生成的内容。超过现有数学基础,只能说大概看懂了,后面基础上来了再细节推导和检查正确性。 DeepSeek Sparse Attention, DSA 可以理解为一个两阶段稀疏注意力系统: 用一个很轻量的 Lightning Indexer 近似估计“哪些历史 token 对当前 query 重要”; 再用 Fine-grained Sp...
-
TrioSim 模拟器 (一):事件驱动模拟
事件驱动模拟器(Event-Driven Simulator) 事件驱动模拟器简介 事件驱动模拟器是只有当某个事件发生时,模拟器才处理它,并把模拟时间跳到下一个事件的发生时间。一般它的组成是: 维护一个按时间排序的事件队列, 每次取出最早发生的事件执行, 执行事件时可能产生新的未来事件, 然后继续处理下一个事件。 在事件驱动模拟器中,“事件”被定义为“在...
-
TrioSim 模拟器 (二):Trace 的产生和处理
生成 Trace 并转换为 TrioSim 格式 Trace 的采集与格式转换主要由以下两个脚本完成: tracer/datacollect.py tracer/dataprocess.py 具体使用方法可参考:TrioSim 模拟器(一):事件驱动模拟。 由于本文重点介绍模拟器本身的运行机制,因此暂不展开脚本的具体实现细节,后续将另行补充说明。 Tr...
-
TrioSim 模拟器 (四):内存和网络模型
内存模型 以 main.cpp 中 PlayTrace() 函数为例: void PlayTrace(triosim::Trace& trace, akita::sim::SerialEngine* engine, triosim::TimeEstimator* timeEstimator...
-
TrioSim 模拟器 (三):TracePlayer
TracePlayer 介绍 在 main.cpp 的 int main(int argc, char* argv[]) 函数中,可以看到如下代码: int main(int argc, char* argv[]) { ... switch (config.case_num) { case 0: PlayTra...
-
TrioSim 模拟器 (六):Cases 总结
TrioSim 模拟器的 Cases 有: Case 0: forward 推理。 Case 1: forward + 梯度 AllReduce。 Case 2: 数据并行训练。 参考资料: Data-Parallelism数据并行(一);Data-Parallelism数据并行(二) Case 3: 张量并行训练。 参考资料: Tensor...
-
TrioSim 模拟器 (五):消息的发送和接收
消息发送/接收不是靠 InferenceTracePlayer::Handle() 完成的。Handle() 只处理事件,比如 PlayNextEvent、LayerCompletionEvent、PlayNextReduceEvent。 真正的消息路径是: TracePlayer 创建 TensorMsg -> src Port 发送 -> Network...
-
优化器算法(一):Adam 和 AdamW
介绍神经网络训练中的优化器算法: SGD,SGD + Momentum,AdaGrad, RMSProp,Adam,AdamW
-
最优模型参数选择(一):最优 GEMM 维度选择
汇总了GPU性能影响因素,并详细说明如何选择最优 GEMM 维度
-
软件调优(二):DataLoader
介绍 pytorch DataLoader 的用法
-
软件调优(三):torch.compile
介绍 torch.compile torch.compile 通过将 PyTorch 代码 JIT 编译成优化的内核来加速 PyTorch 代码的运行,同时只需要极少的代码修改。 torch.compile 编程模型 详细介绍了 torch.compiler 原理。 torch.compile 使用教程 详细介绍了如何使用 torch.compile...
-
软件调优(一):NUMA 绑定
NUMA 亲和性和 NUMA 绑定
-
软件调优(五):训练损失尖峰现象观察与分析
此处展示一些好的、不好的以及异常的训练模式。内容整理自 Stas Bekman 的 Machine Learning Engineering by Stas Bekman。 一个非常失败的训练案例 在启动 BLOOM-176B 训练之前,我们用 104B 模型做了多次实验。但始终没能解决 训练很早就出现梯度发散(diverge) 的问题。如下图所示: 我们...
-
软件调优(四):避免训练不稳定
为了避免训练不稳定,需要着重注意以下要点。内容整理自 Stas Bekman 的 Machine Learning Engineering by Stas Bekman。 术语表 训练相关内容中常包含大量缩写和专有名词。以下是本文涉及的一些重要概念: BS:Batch Size(批次大小)—— 在这里通常指每个 GPU 上一次处理的样本数,也常称为 M...
-
软件调优(六):Checkpoint 文件优化
对 Checkpoint 进行脚本处理 torch-checkpoint-convert-to-bf16:这个脚本会将两类 checkpoint 文件: torch 的 ".bin" 文件和 safetensor 的 ".safetensor" 文件中的权重转换为 bf16 ,并在名为 bf16 的子目录下创建一个...
-
软件调优(七):选择合适的张量数据类型
最初,神经网络训练使用的张量类型都是 fp32,但速度慢、占用显存大。此后,NVIDIA 提出了混合精度训练,研究人员结合使用 fp16 和 fp32 两种浮点精度格式,这一创新极大地提升了模型训练速度。 混合精度训练(Mixed Precision Training) 图片中的混合精度训练流程可以概括为以下步骤: Step 1:Forward Pass...
-
分布式训练(一):使用单节点模拟多节点配置
如果一个节点配备了多张 GPU,可以将该节点内的每张 GPU 模拟成一个独立的节点,从而实现“单节点模拟多节点”的配置。 需要注意的是,这种模拟方式下,各 GPU 之间通过本地的 NVLink 或 PCIe 进行互联,而不是像真实多节点环境那样使用 InfiniBand 或以太网。因此,该方法是否适用,取决于具体测试对网络互联特性的依赖程度。 更详细的配置方...
-
GPU 内存子系统分析(一):延迟分析
分析GPU 的 L1/Shared Memory,L2,DRAM 的访问延迟
-
GPU 内存子系统分析(二):DRAM 带宽分析
DRAM 带宽分析
-
GPU 内存子系统分析(三):L1 和 L2 带宽分析
测量代码和脚本 代码和脚本 与 DRAM 带宽测量区别 L1 和 L2 缓存带宽的测量使用 device 端计时,方便只统计 kernel 内的 measured 阶段,不统计 warmup 阶段,代码如下: __global__ void l2_read_kernel_timed( const float4* __restrict__ data,...
-
Transformer 模型 GPU 显存分析(一):训练
transformer 模型的 GPU 显存使用分析:训练阶段分析
-
Transformer 模型 GPU 显存分析(二):推理
transformer 模型的 GPU 显存使用分析:推理阶段分析
-
Transformer 模型 GPU 显存分析(三):反向传播需要保存哪些中间结果?
为了实现反向传播,前向传播时需要计算并保存一些必要的“中间值”[1]。 本文将详细讨论在 Transformer 架构的前向传播过程中,具体需要保存哪些中间值。 基本原则 核心原则:反向传播时,某个梯度公式如果要用到前向里的某个“中间值”,这个“中间值”就要暂存。 以线性层举例。对于 $$ y = xW $$ 反向传播: $$ \frac{\partial...
-
Pipeline-Parallelism流水线并行(一)
Model Parallelism 之 Pipeline Parallelism: Naive Pipeline Parallelism, Gpipe, PipeDream
-
Data-Parallelism数据并行(二)
Model Parallelism 之 Data Parallelism: Naive Data Parallelism, Distributed Data Parallelism (DDP), ZeRO Data Parallelism
-
Data-Parallelism数据并行(一)
Model Parallelism 之 Data Parallelism: Naive Data Parallelism, Distributed Data Parallelism (DDP), ZeRO Data Parallelism
-
Tensor Parallelism张量并行(二)
这是一篇基于 Megatron-LM Tensor Parallelism (TP) 核心逻辑的源码解析文章。 代码路径:Megatron-LM/megatron/legacy/model/transformer.py 前言 在大模型训练中,Tensor Parallelism (张量并行,TP) 是最核心的并行策略之一。它不仅仅是简单的分片训练,而是将一个...
-
Tensor Parallelism张量并行(三)
在分布式大模型训练(如 GPT-3, Llama 3, DeepSeek)中,张量并行 (Tensor Parallelism, TP) 是处理超大规模参数的核心技术。而 Megatron-LM 的 TP 源码设计充满了系统工程的智慧。 今天我们将深入 Megatron-LM 剖析其最基础的组件——ColumnParallelLinear(列并行线性层)。我...
-
Tensor Parallelism张量并行(一)
论文来自 Megatron-LM: Training Multi-Billion Parameter Language Models Using Model Parallelism。 什么是 Tensor Parallelism(张量并行) 大模型训练通常面临两个核心问题: 显存压力大:当模型参数规模达到数十亿甚至更高时,在每张 GPU 上都完整保存一份模...
-
Sequence Parallelism序列并行(一)
原始论文 Reducing Activation Recomputation in Large Transformer Models 序列并行 序列并行是在张量并行的基础上进行的进一步深度优化,旨在减少“中间值”带来的显存占用(“中间值”是反向传播所必需的。如果不保存这些中间值,在反向传播过程中就必须重新执行前向计算来生成它们,这会显著增加训练的时间开销)。...
-
网页语法
写网页的一些语法介绍
-
gdb-dashboard-工具
gdb dashboard 工具指南
-
VSCode SSH 免密远程连接配置
在 Windows 系统下配置 SSH 免密登录远程服务器,并且支持多用户配置。
-
Ubuntu 系统服务器远程连接配置
参考 玩转Ubuntu SSH:从零开始开启远程连接大门 Ubuntu设置静态IP地址的几种方法(亲测有效) ubuntu20.04和22.04关闭自动休眠,息屏 Ubuntu修改DNS方法(临时和永久修改DNS) Linux 如何将用户设为管理员(Admin):详细指南 环境 服务器:Ubuntu 20.04,带图形化 UI 主机:windows 11...
-
工具配置
vim, tmux, nvcc 配置
-
互联网络(一):集合通信原语
AI 加速卡的互联介绍
-
互联网络(二):伴随通信算子
介绍通信算子和伴随通信算子