Liuyi Wen's Blog
搜索

Liuyi Wen's Blog

verl框架:2. 对比OpenRLHF+colocate思路解析
发表于2025-05-06|verl
SPMD->MPMD SPMD设计范式:单程序多数据,所有进程/线程执行同一个程序的拷贝,通过环境变量差异自主确定行为模式,无需中心调度节点。主流并行框架(DDP/DeepSpeed/Megatron)均基于SPMD范式。 优点:SPMD由于没有controller,完全由worker自驱,在运行时更为高效; 缺点:由于各个worker上需要运行相同程序,灵活性不如single-controller模式;需要考虑各个rank之间的通信,增加编程复杂度。 经典代码如下: 123456import torchimport osprint(os.environ['RANK'], os.environ['WORLD_SIZE'], os.environ['MASTER_ADDR'],...
verl框架:1. Ray 集群介绍 + verl 中基于 Ray 的执行流程解析
发表于2025-05-03|verl
现代计算机体系结构 现代计算机体系结构如下: 多核:一台计算机上有多颗CPU,每个 CPU 有多个计算核心。CPU内部有缓存结构,外部有主存。 集群:多台计算机通过高速网络互联,每台计算机上配有至少一块高速网卡。使得不同节点之间互相访问数据就像在单个节点一样。 异构计算:CPU 和主存通常被称为主机(Host),各类专用的加速器被称为设备(Device)。当前基于 GPU 的异构计算是主流,GPU 有区别于 CPU 的芯片微架构和编译软件栈。 软件层面:GPU 提供了 CUDA编程接口; 硬件层面:GPU 有很多个专用计算核心,和 GPU...
大模型推理框架vLLM:paper + code 解析
发表于2025-04-10
论文解读:Efficient Memory Management for Large Language Model Serving with PagedAttention 论文原文 Abstract 为了提供LLM的高吞吐量服务,每次需要批量处理足够多的请求。然而现有系统面临KV缓存内存不足的挑战:每个请求的KV缓存内存占用巨大,且动态增减。当内存管理效率低下时,碎片化和冗余复制会造成显著的内存浪费,从而限制批处理规模。为解决这一问题,我们提出PagedAttention,这是一种受经典操作系统虚拟内存与分页技术启发的注意力算法。基于此,我们构建了vLLM这一LLM服务系统,其实现了:(1) KV缓存内存接近零浪费;(2) 支持请求内及跨请求的KV缓存灵活共享,进一步降低内存占用。评估表明,在相同延迟水平下,vLLM将主流LLM的吞吐量较FasterTransformer、Orca等最先进系统提升了2-4倍。当处理更长序列、更大模型及更复杂解码算法时,性能提升尤为显著。 Introduction 当前LLM...
并行训练系列:7. Flash Attention V1/V2
发表于2025-12-16|Parallelism
对于输入序列长度为\(N\)的 Transformer 类模型,其计算复杂度和存储空间为\(O(N^2)\);Flash Attention(Fast and Memory Efficient Exact Attention with IO-Awareness) 技术旨在缓解上述计算和存储压力。 一个洞察为:计算慢的卡点在于读写速度,而非计算能力。Flash Attention 通过 tiling 和 kernel fusion 降低对显存(HBM)的访问次数以加速计算。 计算瓶颈分析: 定义: \(\pi\):硬件算力上限。每秒钟能完成的浮点运算次数,单位是 FLOPS 或...
RL 系列:5. 从 TRPO 到 PPO 算法
发表于2025-12-08|RL
上一篇记录了策略梯度算法的目标:通过梯度上升的方法执行策略更新,目标是最大化期望奖励,数学形式为: \[ \nabla\overline{R_\theta}=\mathbb{E}_{\tau\sim p_\theta(\tau)}[R(\tau)\nabla\log p_\theta(\tau)] \] 由于策略梯度算法是 on-policy 的,因此要求行为策略\(\mu\)和目标策略\(\pi_\theta\)相同。每次将策略\(\theta\)更新为\(\theta'\)时,来源于上一轮采样数据的概率\(p_\theta(\tau)\)不能再使用,需要重新采样;这说明 on-policy 算法每次采样的数据在更新参数时只能使用一次。耗时巨大。能不能转为 off-policy 算法呢? 一个想法是使用冻结的策略\(\pi_{\theta'}\)专门与环境交互,使用\(\theta'\)采样的数据训练优化目标\(\pi_\theta\)....
并行训练系列:6. 序列并行上篇(Megatron-SP, DeepSpeed-Ulysses)
发表于2025-12-01|Parallelism
中间激活值的显存占用量 参考:https://lywencoding.com/posts/76aa9d6e.html 对 Transformer 在训练过程中的模型参数、中间激活值的显存占用量进行了分析。直接给出结论: 对于\(l\)层的 Transformer 模型:模型参数量为 \((12h^2+13h)*l\);中间激活值为\((34bsh+5bs^2a)*l\)。 可以发现:模型参数的显存占用量与输入数据大小无关;中间激活值的显存占用量与输入数据大小(批次大小\(b\)和序列长度\(s\))成正相关。 显存占用量随着批量大小线性增长,并随着序列长度的平方增长,那么:激活内存是最容易“膨胀”的部分;对于短序列(或者小批量大小),激活几乎可以忽略不计;但从大约 2-4k 个 token 开始,它们开始占用大量显存。 如何优化激活值的占用呢?有以下几种策略: 激活值重计算:抛弃 FWD 的部分激活值;在 BWD 时实时重新计算。(当前大多数框架使用 Flash Attention) 梯度累积:将 batch 拆分为若干个小的 micro-batch;依次在每个...
verl 框架:3. 加载数据与创建 batch
发表于2025-11-24|verl
verl 框架:3. 加载数据与创建 batch run_ppo()函数完成 Ray 集群初始化之后,创建一个TaskRunner将整个 RL 训练流程封装在一个独立的 Ray Actor 中,提交到远程执行,以支持分布式调度。 TaskRunner.run运行在远程 Ray Actor 中,流程如下(重点关注 PPO 训练器RayPPOTrainer中的 dataset 来源): 1234567891011121314151617181920212223242526272829303132333435363738394041424344def run(self, config): # 0. 注册各种 Worker 角色,初始化资源池管理器 ...... from verl.utils.dataset.rl_dataset import collate_fn # Create training and validation datasets. train_dataset = create_rl_dataset( ...
RL 系列:4. 策略梯度算法
发表于2025-11-17|RL
RL 的三个组成部分为:Actor, Environment 和 Reward. Environment 和 Reward 在 RL 学习开始前已经决定,要求是寻找 Actor 的最优策略以最大化 Reward. 假设轨迹为: \[ \tau=\{s_1, a_1, s_2, a_2, ..., s_t, a_t\} \] 给定 Actor 的参数\(\theta\)(策略\(\pi\)中的网络参数\(\theta\)),某个轨迹\(\tau\)发生的概率为: \[ p_{\theta}(\tau)=p(s_1)\prod_{t=1}^Tp_{\theta}(a_t|s_t)p(s_{t+1}|s_t,a_t) \] 其中\(p(s_{t+1}|s_t,a_t)\)由环境决定;\(p_{\theta}(a_t|s_t)\)由策略\(\pi\)决定,也即 RL 的优化目标。 期望奖励为: 使用梯度上升最大化期望奖励: \[ \nabla\overline{R_{\theta}}=\sum_\tau R(\tau)\nabla...
RL 系列:3. 时序差分算法
发表于2025-11-10|RL
有模型 vs 免模型 有模型的强化学习:知晓状态转移函数(\(P[s_{t+1}, r_t|s_t, a_t]\))和环境的奖励函数(\(R[s_t, a_t]\)),可通过策略迭代或价值迭代寻找最佳策略;智能体与环境无交互。 免模型的强化学习:状态转移函数和概率函数未知,非马尔可夫决策过程,无法直接采用动态规划。智能体和环境交互,通过采样到的数据学习。 免模型预测方法 蒙特卡洛策略评估 蒙特卡洛方法是一种基于概率统计的数值计算方法。一个例子是计算圆的面积:在正方形内部随机产生若干个点,细数落在圆中点的个数,圆的面积与正方形面积之比就等于圆中点的个数与正方形中点的个数之比。 在马尔可夫决策过程中,状态的价值是其期望回报;利用蒙特卡洛方法在...
深入 Parquet:从 Dremel 论文到列式存储的工程权衡
发表于2025-09-30|Database
parquet(列式存储)在 OLAP 场景广泛使用,空闲时间阅读了 paper 和相关源码。 paper 原文阅读:Dremel Dremel是一个可扩展的交互式查询系统,专门用于分析 read-only 的嵌套数据。它结合了多级执行树和列式数据布局,能够在几秒钟内对万亿行的表运行聚合查询。Dremel 可以扩展到数千个 CPU 和 PB 级数据,并且在 Google 内部有数千名用户。Dremel 并不是用来替代 MapReduce的,而是经常与 MR 结合使用,用于分析 MR 管道的输出或快速原型化更大的计算。 数据模型 Dremel 的数据模型是基于强类型的嵌套记录,抽象语法: \[ t = dom | <A1:t[*|?], ..., An:t[*|?]> \] t 是原子类型或一个记录类型,原子类型包括整型、浮点数、字符串等;Ai 为记录的第 i 个字段,其后的 [*|?] 表示其重复类型。 * 表示该字段为 Repeated; ?表示该字段为 Optional; 无标记则表示该字段为...
12…5
avatar
Liuyi Wen
文章
50
标签
5
分类
9
Follow Me
公告
The Journey Is the Reward.
最新文章
并行训练系列:7. Flash Attention V1/V22025-12-16
RL 系列:5. 从 TRPO 到 PPO 算法2025-12-08
并行训练系列:6. 序列并行上篇(Megatron-SP, DeepSpeed-Ulysses)2025-12-01
verl 框架:3. 加载数据与创建 batch2025-11-24
RL 系列:4. 策略梯度算法2025-11-17
分类
  • Database6
  • Distributed System1
  • High Concurrency2
  • Network1
  • OS3
  • Parallelism8
  • RL5
  • Transformer4
标签
KV Cache Go OOP Web Platforms Display C++
归档
  • 十二月 2025 3
  • 十一月 2025 3
  • 九月 2025 11
  • 七月 2025 5
  • 六月 2025 1
  • 五月 2025 4
  • 四月 2025 7
  • 三月 2025 16
网站信息
文章数目 :
50
本站访客数 :
本站总浏览量 :
最后更新时间 :
©2019 - 2026 By Liuyi Wen
框架 Hexo 7.3.0|主题 Butterfly 5.3.5
搜索