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

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

背景 在 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

KCD Hangzhou 2025

KCD Hangzhou + OpenInfra Days China 2025,云原生,人工智能,开源,大模型,KCD Hangzhou 2025 组委会,OpenInfra 中国用户组, 照片直播 | KCD HANGZHOU OPENINFRA DAYS CHINA 2025 谈谈几点收获 关于 MaaS 关于 Nydus 谈谈几点感想 关于灵魂拷问「在 AI 推理的背景下,是否一定需要 K8s?」: K8s 作为 GPU 资源统一纳管层的角色不会被替代,可以通过 Pod 作为 infra 和业务之间界限。Pod 之下,K8s 繁荣的生态可以免去操作系统层面很多不必要的运维工作;Pod 之上,业务需要自身来维护。那能不能把 AI infra 也纳入到 K8s 生态呢,享受 K8s 中例如 HPA 这样的功能?从我个人的角度来说,我觉得比较困难: 从常规角度思考,「模型」≠「镜像」,「模型 + vLLM 等运行框架」==「镜像」。从镜像开始,才有 Pod 的生命周期,K8s 才能对 Pod 进行管理。所以无法通过只更新模型完成 Pod 的更新。 如果我们把 vLLM 等框架理解成特殊「容器运行时」,在「容器运行时」中提供了 **UpdateContainerResources**** 来修改容器的资源,那么我们可以把「模型」想象成一种特定的资源来完成更新。但是 **UpdateContainerResources** 目前还是 beta 的状态,并且更新的流程也会牵涉到具体推理框架的实现,难度较大。** ...

November 17, 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

「非线性成长」摘录

1. 关于成长 如何在这个世界上生存,并学会依靠规则去赢得基本竞争 如何能够看到更大的世界 如何在看到更大的世界后担负起更大的责任,赢得更大的荣耀和认可,创造更大的社会价值 一个环境长期越稳定,线性法则在其中就越适用;相反,如果一个环境变化越快、越频繁,则非线性法则越容易在其中起主导作用。 找到某些在非线性的世界中适用的基本规律和法则,对于你的成长至关重要。 任何个体或组织,本质上都需要线性法则和非线性法则交替发生作用,才能更好地驱动其发展和成长。 2. 关于职业成长通关 获得稳定可观的收入的能力 拥有自己的核心竞争力和不可替代性 依靠某种技能成为一个业内顶级、位于 Top 3%- 5% 的专家 优秀的商业操盘手,通过商业经营让一家公司或一个业务的商业价值能够持续得到放大、收益更多并且效率更高 自己尝试着刻意练习并依靠自我学习进行突破 尝试着参与到一个能给你提供实践机会的组织或团队中,义务为其劳动,并获得指导 参与某个能够给你提供大量真实实践机会和高质量反馈的课程 伴随着新技术,新模式出现,短期发展还完全不确定 你主动挑起大家都认为“很坑”,“很碎”,“摊子很烂”,无人愿意接手的项目,然后干出来了 你已经具备某些在该领域获得成功的“独特”能力或经验 ...

November 3, 2025

Github Copilot remote-ssh 支持 Claude 系列模型

背景 原因分析 解决思路 在本地 .ssh/config 配置中,找到需要远程连接的主机,增加 RemoteForward 配置。有了这个配置,就会在 ssh 连接时,自动创建端口转发,将 remote 机器上所有请求 7897 端口的流量都转发到 local 机器的 127.0.0.1:7897 上。 Copy Host comfy HostName ngb1.dc.huixingyun.com User root Port 53727 PubkeyAuthentication yes IdentityFile ~/.ssh/id_rsa RemoteForward 7897 127.0.0.1:7897 在 VSCode 的 Remote-ssh 配置中设置 http.proxy 参考资料 VsCode远程Copilot无法使用Claude Agent问题_vscode远程没有claude-CSDN博客 Updating restrictions of sales to unsupported regions

October 28, 2025

ComfyUI 模型加载分析 & 自定义量化算子

背景 模型加载过程图 UNETLoader:从硬盘读取模型文件,根据文件内容判断模型类型,并生成模型对象,最终加载模型到 cpu 上,得到 ModelPatcher LoraLoader:从硬盘读取模型文件,并将模型数据保存在 ModelPatcher 的 object_patches 字段中 KSampler:将 ModelPatcher 中存放的 lora 权重合并到 model 上,随后加载到 GPU 上,最后运行推理 自定义算子,加载 block wise scaled 模型 场景一:参考 kijai 大神的做法,先使用 block wise scaling 方法将 QwenImage 量化后导出模型文件,然后在使用 ComfyUI 时加载量化后的模型。 劫持 __init__ 方法,用于设置模块的 dtype,例如,fp8_e4m3,后续在 load_state_dict 时会将具体的数值 cast_to 到该 dtype 上 劫持 reset_parameters 方法,用于为模块新增参数。在 block wise scaling 场景下,模型中会多一个 scale_weight 字段,该字段在原始模型结构中不存在。因此,需要通过 reset_parameters 新增 scale_weight 参数。 劫持 forward 方法,用于接入自定义 foward 逻辑。在 block wise scaling 场景下,需要先将加载的权重通过 scale_weight 反量化成 bf16,然后执行 forward 运算。 ...

October 18, 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

使用 Notion-Hugo 构建个人博客

1. 为什么? 为什么会想要构建个人博客并且还是通过 Notion 的方式? Notion 中毒用户,馋 Notion 的编辑器 对 Notion 中记录的内容做一个系统整理并输出,尽量使用图的形式来展示 记录个人的思考、成长以及展示自己的能力,以便后续回顾 希望每篇博客都有自己的拍摄的一张照片,记录生活的点滴 为什么选择 Hugo? 2. 架构图 3. 遇到的问题 Copy https://prod-files-secure.s3.us-west-2.amazonaws.com/dc681554-1505-4cec-9a8f-844b66d5dcc8/4e9385da-92e0-4c4a-9ba1-871eb116b2e5/DSCF9506_preview.jpeg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=ASIAZI2LB466SETVVHQ7%2F20250927%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20250927T010113Z&X-Amz-Expires=3600&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEBEaCXVzLXdlc3QtMiJHMEUCIBgl6TamR&X-Amz-Signature=d9be103faf2f37cf40ca1481c3dd906b8aa9e47d57bf05b8195d9929f53eebcc&X-Amz-SignedHeaders=host&x-amz-checksum-mode=ENABLED&x-id=GetObject 4. 其他核心点 Copy name: Build and Deploy Blog on: # 每天凌晨 1 点自动触发 schedule: - cron: '0 17 * * *' # 北京时间 01:00 # 允许手动触发 workflow_dispatch: jobs: build-deploy: runs-on: ubuntu-latest permissions: contents: write steps: - name: Checkout code uses: actions/checkout@v3 # Hugo 主题库拉取 - name: Update git submodules run: | git submodule update --init --recursive - name: Set up Python uses: actions/setup-python@v4 with: python-version: '3.x' - name: Install dependencies run: | sudo apt-get update sudo apt-get install -y make pip install -r py/requirements.txt - name: Install latest Hugo run: | wget https://github.com/gohugoio/hugo/releases/download/v0.151.0/hugo_0.151.0_linux-amd64.deb -O hugo.deb sudo dpkg -i hugo.deb hugo version # 指定 NOTION DB 和 NOTION TOKEN - name: Set up environment variables run: | echo "NOTION_DB_ID=${{ secrets.NOTION_DB_ID }}" > .env echo "NOTION_TOKEN=${{ secrets.NOTION_TOKEN }}" >> .env echo "NOTION_DB_ID=${{ secrets.NOTION_DB_ID }}" >> $GITHUB_ENV echo "NOTION_TOKEN=${{ secrets.NOTION_TOKEN }}" >> $GITHUB_ENV - name: Build blog run: | make convert && make build # 自动提交 hugo-site/content 中的内容 - name: Commit updated content uses: stefanzweifel/git-auto-commit-action@v6 with: commit_message: Sync content with Notion file_pattern: 'hugo-site/content/' 5. 后续的思考 需要去解决 Notion 中特殊块到 Markdown 的连接 ...

September 22, 2025