LLM 推理加速技巧 KVCache 解析

💡 最近李宏毅老师更新了关于 KVCache 的教学视频,正好趁这个机会整理了下 KVCache 原理相关内容。 核心原理:transformer 架构是自回归的,在计算 Attention 是会用到过去的 key 和 value,缓存这些值通过空间换时间的方式,提高算力计算效率。 原理分析 Understanding and Coding the Self-Attention Mechanism of Large Language Models From Scratch 输入的句子通过 tokenizer 进行分词 对每个 token 进行 embedding 得到 embedding 向量 x 向量乘上预先训练好的权重矩阵 Wq、Wk、Wv 得到 q、k、v 向量 使用 attention 公式计算得到 z 向量 通过预先训练的好的权重矩阵可以得到 Query Token 1、Key Token 1 和 Value Token 1 使用 Attention 公式,计算得到 Token 1 对应的 Attention 通过 softmax 层并全连接到词表得到 Token 2 ...

April 1, 2026

🤖 MoonCake 解构极速权重同步:从内存寻址到流⽔线引擎

背景 在 VSCode 中让 Github Copilot 进行辅助阅读源码,针对不明白的点,及时提问 等所有细节都整理清楚后,将与 Copilot 的聊天内容导入到 NotebookLM 中 在 NotebookLM 中,再次对内容进行梳理,NotebookLM 也会主动引导提问 对 NotebookLM 每轮返回的结果进行评估,如果符合预期则保存为 note 在 NotebookLM 中,将所有保存的 note 作为 source,然后通过「Slide Deck」生成 Slide 核⼼挑战:⼤模型时代下的权重更新瓶颈 优化一:提供硬件直达,消除中介 优化二:零拷贝与内核旁路,告别开销 优化三:利用 P2P 以及流水异步化机制,压榨并行 这里需要补充一点,在 checkpoint-engine 中 P2P 只在 h2d 阶段获取原始权重时才会用到,其余权重同步逻辑均由 NCCL 库来实现。 单 GPU 视角 多 GPU 视角 总体架构回顾 P2P 分发 & vLLM 更新权重 总结 & 思考 权重按 bucket 细分后,可以充分利用 PCIE、RDMA 性能,减少硬件闲置 ...

November 29, 2025

DeepSeek OCR 实操和论文学习

部署体验 Copy git clone https://github.com/deepseek-ai/DeepSeek-OCR.git && cd DeepSeek-OCR conda create -n ocr python=3.12 conda install cuda-toolkit=12.8 pip install torch==2.8.0 torchvision==0.23.0 torchaudio==2.8.0 --index-url https://download.pytorch.org/whl/cu128 pip install -r requirement.py python DeepSeek-OCR-master/DeepSeek-OCR-hf/run_dpsk_ocr.py 模型架构 将输入的图片进行切分,得到 n 个 16x16 patches 图片块 使用 SAM 模型获取局部的 attention,并采用 16x 的下采样将 vision token 压缩到 n/16 个 将 vision token 逐个输入到 CLIP 模型,得到图片块的 Embedding 将图片块的 Embedding 和 Prompt 对应的 Embedding 合并作为输入,喂给 DeepSeek-3B DeepSeek-3B 根据输入语义,完成实际的任务 Q&A 自问自答 Q1. DeepSeek-3B 作为 backbone 时参数是否冻结? Q2. SAM/CLIP/DeepSeek-3B 间的维度如何对齐? 在 SAM ⇒ CLIP 中间有一个 16x 的卷积层,可以特征向量缩放到 1024。这与 CLIP 模型的特征向量维度一致。 ...

November 8, 2025

fp8 量化的几种姿势

背景 Copy num_params = 20 * 2^30 fp8_size = 1 byte total_size = num_params * fp8_size = 20 * 2^30 * 1 byte = 20 GBytes 关于精度与量化 FP8 的几种量化方式 Cast-To:该方法不属于量化范畴,只是简单的数值转换。可以发现灰色部分会被直接映射到 INF 或者 -INF 上。代码验证: Copy >>> v = torch.finfo(torch.bfloat16).max >>> v 3.3895313892515355e+38 >>> tv=torch.Tensor(v) >>> tv.to(torch.float8_e5m2) tensor([inf], dtype=torch.float8_e5m2) Tensor-wise FP8 量化:对于每个 Tensor(模型是由多个 Tensor 组成,Tensor 中包含一组参数),找出当前参数数值的最小取值范围,并将这个范围映射到 fp8 的范围内。该过程就是量化,其中映射过程会有一个缩放因子,通过缩放因子可以对参数进行反量化。 Block-wise FP8 量化:将每个 Tensor 按照固定 block 大小切分成多个 block,在对 block 中的参数按 Tensor-wise 的方法进行量化,区别在于每个 block 会有一个缩放因子。这个方法粒度更细,精度相对会更高。 ...

October 13, 2025