筛选

卡片视图

//

结合nanovllm的FlashAttention和PagedAttention主要原理概述

总结:FlashAttention用于降低Attention计算阶段预存的显存消耗(内部计算范畴), PagedAttention用于高效管理推理的KV Cache(外部推理范畴)。 FlashAttention: 问题:标准 Attention 需要存储 N×N 的中间矩阵,显存 O(N²) 解决:分块 + 在线 softmax,显存降到 O(N) 关键:外循环 Q 块,内循环 K、V 块,在线更新 m、l、O PagedAttention: 问题:预分配连续显存导致大量浪费(内部碎片 + 外部碎片)…

//

从SGD到AdamW,优化器怎么发展过来的?

Adam = Momentum + RMSProp 本文可以省流成以下几句话: SGD往梯度下降的方向更新权重。 SGD+Momentum把梯度累积起来、得到了方向,一直同向就更新快一点,变向就慢一点。 AdaGrad把梯度的平方累积起来,让出现得频繁却梯度值很小的步长更大。 RMSProp给AdaGrad加了一个衰减系数,不看整个历史、只看近期历史,防止学习率消失。 Adam = Momentum + RMSProp。 AdamW解决了在使用Adam时应该怎么做权重衰减。 $$ \theta{t+1} =…

/

值得顺便掌握一下的那些linux指令

命令行能够即时地做很多事情,甚至代表一种简洁而切题的计算机哲学。 为了直接进入正题,省略诸如 cd 这样的广为人知的基础指令,直接看那些显著提升体验的东西。 用于查看磁盘空间。使用场景比如训模型会保存很多中间文件,可以这样看看需要清理哪些。 比如 fuse-overlayfs 是这个实例本身的存储, shared-nvme 是它的外接可持久化存储,使用率分别为 50% 和 40% 。 至于要看哪几个文件最大,可以和 ncdu 这样的工具搭配使用。 查找关键词,关键词可以写正则。…

//

CS336 Assignment 1 后半段记录:实验

已经搭建起了训练循环,接下来做一些实验。训得有多快?有多好? 之前的实现接口不是很好用,更进一步包装了一下,并麻烦GPT帮我优化了naive实现。 由于 testtokenizer 中 import resource 这个库只能在linux中使用,决定将核心代码拷贝到linux环境下进行测试。 而为了保证实现的正确性,在原来的windows环境下利用gpt撰写了 testtokenizerwindows.py 用于替换。 成功通过了所有测试。 在实际的训练过程中大约有如下的日志: 5.1 Data Loader…