Personal Knowledge Publishing

唐宇涵的个人知识站

体系结构——权衡的艺术,性能的诗歌

最新文章

  • 翻译:HybridFlow: A Flexible and Efficient RLHF Framework(未完成)

    · 10 min read

    原文连接:HybridFlow: A Flexible and Efficient RLHF Framework 开源代码 AI 翻译的内容,还没有仔细看和贴上图片。 还缺乏足够的背景知识,补充完成后再来看。 Abstract 人类反馈强化学习(RLHF)被广泛用于大语言模型(LLM)对齐。传统强化学习可以被建模为一种数据流,其中每个节点表示一个神经网...

  • RLHF 学习路线

    · 3 min read

    推荐先从 huggingface 强化学习教程入门。 图解大模型RLHF系列之:人人都能看懂的PPO原理与源码解读 分界线,以下内容由 AI 生成 下面给你一版更“工程 + 科研”两条线并行的 RLHF 学习路线。定位是:你已经懂一些 LLM/SFT/Transformer,但强化学习基础较弱,目标是进入 AI Infra 里的 RLHF/RLVR/Ali...

  • LLM 推理框架学习路线

    · 8 min read

    以下内容为 AI 生成 下面我不再给“30天强行冲刺”的安排,而是按你要的顺序,整理一份LLM 推理框架研究地图: 发展脉络 → 综述/论文 → 代码资源。 重点面向后续做 LLM inference serving / AI Infra / Systems for ML 方向科研。 (1)LLM 推理框架发展的脉络 LLM 推理框架的发展,本质上是在...

  • 方差、协方差、相关系数

    · 3 min read

    基本概念 方差 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 散度

    · 2 min read

    老饼讲解-机器学习 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 的缩放因子推导

    · 2 min read

    Transformer 中的数值稳定性:为什么 Attention 需要除以 $\sqrt{d_k}$

  • DeepSeek-V2(一):DeepSeekMoE

    · 6 min read

    MoE(混合专家)的核心目标是:在显著降低训练和推理计算代价的同时,保持甚至提升模型的整体能力。 参考DeepSeek-MOE 原理讲解 从 Dense 模型到 MoE 架构 在标准的 Transformer 中,Attention 机制负责捕捉序列内的长距离依赖关系,而后续的 FeedForward 层则对每个位置的表征进行非线性变换与升维再降维的处理。...

  • 位置编码(一):旋转位置编码 RoPE

    · 7 min read

    RoPE 旋转位置编码:从旋转矩阵到 LLaMA 源码实现 RoPE 还具备远程衰减和外推性,后面有需要再推导。 本文的推导过程与 RoFormer: Enhanced Transformer with Rotary Position Embedding 中的推导方式有所不同。原论文采用的是复平面展开的分析方法,而本文的推导思路更为直观易懂,主要参考了...

  • MoE 负载均衡损失的数学推导:从损失函数下界到 MoE 可微辅助损失

    · 2 min read

    在机器学习(如 MoE 混合专家模型机制)或分布式计算中,负载均衡辅助损失函数(Load Balancing Loss) 的核心目标是让所有计算节点(专家)的调用频率完全一致。通过柯西不等式可以严谨地证明:当且仅当系统达到绝对的负载均衡时,该损失函数取得全局最小值,此时算力利用率最高,系统损失最小。 损失函数的下界 1. 构建损失函数模型 假设系统中有 $...

  • DeepSeek-V2(二):MLA

    · 4 min read

    多头潜在注意力 MLA:从 KV Cache 到 DeepSeek 的低秩压缩方案 来源: DeepSeek-v2 MLA 原理讲解 MLA原理讲解 1. 为什么先从标准多头注意力说起 在大模型自回归生成中,模型每次根据已有 token 预测下一个 token。以某一层 Transformer block 为例,当前 token 的隐藏状态记为...

  • DeepSeek-V3(一):稀疏注意力机制(DSA)

    · 8 min read

    这是 GPT 生成的内容。超过现有数学基础,只能说大概看懂了,后面基础上来了再细节推导和检查正确性。 DeepSeek Sparse Attention, DSA 可以理解为一个两阶段稀疏注意力系统: 用一个很轻量的 Lightning Indexer 近似估计“哪些历史 token 对当前 query 重要”; 再用 Fine-grained Sp...

  • TrioSim 模拟器 (一):事件驱动模拟

    · 2 min read

    事件驱动模拟器(Event-Driven Simulator) 事件驱动模拟器简介 事件驱动模拟器是只有当某个事件发生时,模拟器才处理它,并把模拟时间跳到下一个事件的发生时间。一般它的组成是: 维护一个按时间排序的事件队列, 每次取出最早发生的事件执行, 执行事件时可能产生新的未来事件, 然后继续处理下一个事件。 在事件驱动模拟器中,“事件”被定义为“在...

  • TrioSim 模拟器 (二):Trace 的产生和处理

    · 2 min read

    生成 Trace 并转换为 TrioSim 格式 Trace 的采集与格式转换主要由以下两个脚本完成: tracer/datacollect.py tracer/dataprocess.py 具体使用方法可参考:TrioSim 模拟器(一):事件驱动模拟。 由于本文重点介绍模拟器本身的运行机制,因此暂不展开脚本的具体实现细节,后续将另行补充说明。 Tr...

  • TrioSim 模拟器 (四):内存和网络模型

    · 2 min read

    内存模型 以 main.cpp 中 PlayTrace() 函数为例: void PlayTrace(triosim::Trace& trace, akita::sim::SerialEngine* engine, triosim::TimeEstimator* timeEstimator...

  • TrioSim 模拟器 (三):TracePlayer

    · 3 min read

    TracePlayer 介绍 在 main.cpp 的 int main(int argc, char* argv[]) 函数中,可以看到如下代码: int main(int argc, char* argv[]) { ... switch (config.case_num) { case 0: PlayTra...

  • TrioSim 模拟器 (六):Cases 总结

    · 1 min read

    TrioSim 模拟器的 Cases 有: Case 0: forward 推理。 Case 1: forward + 梯度 AllReduce。 Case 2: 数据并行训练。 参考资料: Data-Parallelism数据并行(一);Data-Parallelism数据并行(二) Case 3: 张量并行训练。 参考资料: Tensor...

  • TrioSim 模拟器 (五):消息的发送和接收

    · 2 min read

    消息发送/接收不是靠 InferenceTracePlayer::Handle() 完成的。Handle() 只处理事件,比如 PlayNextEvent、LayerCompletionEvent、PlayNextReduceEvent。 真正的消息路径是: TracePlayer 创建 TensorMsg -> src Port 发送 -> Network...

  • 优化器算法(一):Adam 和 AdamW

    · 2 min read

    介绍神经网络训练中的优化器算法: SGD,SGD + Momentum,AdaGrad, RMSProp,Adam,AdamW

  • 最优模型参数选择(一):最优 GEMM 维度选择

    · 3 min read

    汇总了GPU性能影响因素,并详细说明如何选择最优 GEMM 维度

  • 软件调优(二):DataLoader

    · 4 min read

    介绍 pytorch DataLoader 的用法

  • 软件调优(三):torch.compile

    · 1 min read

    介绍 torch.compile torch.compile 通过将 PyTorch 代码 JIT 编译成优化的内核来加速 PyTorch 代码的运行,同时只需要极少的代码修改。 torch.compile 编程模型 详细介绍了 torch.compiler 原理。 torch.compile 使用教程 详细介绍了如何使用 torch.compile...

  • 软件调优(一):NUMA 绑定

    · 6 min read

    NUMA 亲和性和 NUMA 绑定

  • 软件调优(五):训练损失尖峰现象观察与分析

    · 4 min read

    此处展示一些好的、不好的以及异常的训练模式。内容整理自 Stas Bekman 的 Machine Learning Engineering by Stas Bekman。 一个非常失败的训练案例 在启动 BLOOM-176B 训练之前,我们用 104B 模型做了多次实验。但始终没能解决 训练很早就出现梯度发散(diverge) 的问题。如下图所示: 我们...

  • 软件调优(四):避免训练不稳定

    · 2 min read

    为了避免训练不稳定,需要着重注意以下要点。内容整理自 Stas Bekman 的 Machine Learning Engineering by Stas Bekman。 术语表 训练相关内容中常包含大量缩写和专有名词。以下是本文涉及的一些重要概念: BS:Batch Size(批次大小)—— 在这里通常指每个 GPU 上一次处理的样本数,也常称为 M...

  • 软件调优(六):Checkpoint 文件优化

    · 3 min read

    对 Checkpoint 进行脚本处理 torch-checkpoint-convert-to-bf16:这个脚本会将两类 checkpoint 文件: torch 的 ".bin" 文件和 safetensor 的 ".safetensor" 文件中的权重转换为 bf16 ,并在名为 bf16 的子目录下创建一个...

  • 软件调优(七):选择合适的张量数据类型

    · 2 min read

    最初,神经网络训练使用的张量类型都是 fp32,但速度慢、占用显存大。此后,NVIDIA 提出了混合精度训练,研究人员结合使用 fp16 和 fp32 两种浮点精度格式,这一创新极大地提升了模型训练速度。 混合精度训练(Mixed Precision Training) 图片中的混合精度训练流程可以概括为以下步骤: Step 1:Forward Pass...

  • 分布式训练(一):使用单节点模拟多节点配置

    · 1 min read

    如果一个节点配备了多张 GPU,可以将该节点内的每张 GPU 模拟成一个独立的节点,从而实现“单节点模拟多节点”的配置。 需要注意的是,这种模拟方式下,各 GPU 之间通过本地的 NVLink 或 PCIe 进行互联,而不是像真实多节点环境那样使用 InfiniBand 或以太网。因此,该方法是否适用,取决于具体测试对网络互联特性的依赖程度。 更详细的配置方...

  • GPU 内存子系统分析(一):延迟分析

    · 17 min read

    分析GPU 的 L1/Shared Memory,L2,DRAM 的访问延迟

  • GPU 内存子系统分析(二):DRAM 带宽分析

    · 6 min read

    DRAM 带宽分析

  • GPU 内存子系统分析(三):L1 和 L2 带宽分析

    · 2 min read

    测量代码和脚本 代码和脚本 与 DRAM 带宽测量区别 L1 和 L2 缓存带宽的测量使用 device 端计时,方便只统计 kernel 内的 measured 阶段,不统计 warmup 阶段,代码如下: __global__ void l2_read_kernel_timed( const float4* __restrict__ data,...

  • Transformer 模型 GPU 显存分析(一):训练

    · 4 min read

    transformer 模型的 GPU 显存使用分析:训练阶段分析

  • Transformer 模型 GPU 显存分析(二):推理

    · 5 min read

    transformer 模型的 GPU 显存使用分析:推理阶段分析

  • Transformer 模型 GPU 显存分析(三):反向传播需要保存哪些中间结果?

    · 5 min read

    为了实现反向传播,前向传播时需要计算并保存一些必要的“中间值”[1]。 本文将详细讨论在 Transformer 架构的前向传播过程中,具体需要保存哪些中间值。 基本原则 核心原则:反向传播时,某个梯度公式如果要用到前向里的某个“中间值”,这个“中间值”就要暂存。 以线性层举例。对于 $$ y = xW $$ 反向传播: $$ \frac{\partial...

  • Pipeline-Parallelism流水线并行(一)

    · 5 min read

    Model Parallelism 之 Pipeline Parallelism: Naive Pipeline Parallelism, Gpipe, PipeDream

  • Data-Parallelism数据并行(二)

    · 3 min read

    Model Parallelism 之 Data Parallelism: Naive Data Parallelism, Distributed Data Parallelism (DDP), ZeRO Data Parallelism

  • Data-Parallelism数据并行(一)

    · 3 min read

    Model Parallelism 之 Data Parallelism: Naive Data Parallelism, Distributed Data Parallelism (DDP), ZeRO Data Parallelism

  • Tensor Parallelism张量并行(二)

    · 2 min read

    这是一篇基于 Megatron-LM Tensor Parallelism (TP) 核心逻辑的源码解析文章。 代码路径:Megatron-LM/megatron/legacy/model/transformer.py 前言 在大模型训练中,Tensor Parallelism (张量并行,TP) 是最核心的并行策略之一。它不仅仅是简单的分片训练,而是将一个...

  • Tensor Parallelism张量并行(三)

    · 2 min read

    在分布式大模型训练(如 GPT-3, Llama 3, DeepSeek)中,张量并行 (Tensor Parallelism, TP) 是处理超大规模参数的核心技术。而 Megatron-LM 的 TP 源码设计充满了系统工程的智慧。 今天我们将深入 Megatron-LM 剖析其最基础的组件——ColumnParallelLinear(列并行线性层)。我...

  • Tensor Parallelism张量并行(一)

    · 2 min read

    论文来自 Megatron-LM: Training Multi-Billion Parameter Language Models Using Model Parallelism。 什么是 Tensor Parallelism(张量并行) 大模型训练通常面临两个核心问题: 显存压力大:当模型参数规模达到数十亿甚至更高时,在每张 GPU 上都完整保存一份模...

  • Sequence Parallelism序列并行(一)

    · 3 min read

    原始论文 Reducing Activation Recomputation in Large Transformer Models 序列并行 序列并行是在张量并行的基础上进行的进一步深度优化,旨在减少“中间值”带来的显存占用(“中间值”是反向传播所必需的。如果不保存这些中间值,在反向传播过程中就必须重新执行前向计算来生成它们,这会显著增加训练的时间开销)。...

  • 网页语法

    · 1 min read

    写网页的一些语法介绍

  • gdb-dashboard-工具

    · 1 min read

    gdb dashboard 工具指南

  • VSCode SSH 免密远程连接配置

    · 1 min read

    在 Windows 系统下配置 SSH 免密登录远程服务器,并且支持多用户配置。

  • Ubuntu 系统服务器远程连接配置

    · 6 min read

    参考 玩转Ubuntu SSH:从零开始开启远程连接大门 Ubuntu设置静态IP地址的几种方法(亲测有效) ubuntu20.04和22.04关闭自动休眠,息屏 Ubuntu修改DNS方法(临时和永久修改DNS) Linux 如何将用户设为管理员(Admin):详细指南 环境 服务器:Ubuntu 20.04,带图形化 UI 主机:windows 11...

  • 工具配置

    · 1 min read

    vim, tmux, nvcc 配置

  • 互联网络(一):集合通信原语

    · 4 min read

    AI 加速卡的互联介绍

  • 互联网络(二):伴随通信算子

    · 2 min read

    介绍通信算子和伴随通信算子