LoRA 与 QLoRA
LoRA
LoRA (Low-Rank Adaptation): 保留原来的权重, 只学习一个由两个小矩阵表示的更新量.
令 y=W0xy = W_0xy=W0x. Fine-tuning (FT) 时, 将权重 W0W_0W0 更新为 W0+ΔWW_0 + \Delta WW0+ΔW, 其中:
ΔW=sBA.\Delta W = sBA.
ΔW=sBA.
各矩阵的维度为:
W0∈Rdout×din,B∈Rdout×r,A∈Rr×din.W_0 \in \mathbb{R}^{d_{\mathrm{out}} \times d_{\mathrm{in}}},
\qquad
B \in \mathbb{R}^{d_{\mathrm{out}} \times r},
\qquad
A \in \mathbb{R}^{r \times d_{\mathrm{in}}}.
W0∈Rdout×din,B∈Rdout×r,A∈Rr×din.
r≪dout,dinr \ll d_{\mathrm{out}}, d_{\mathrm{in}}r≪dout,din, 因而大大减少需 ...
NCCL 初始化与连接建立
先区分 topo, graph, channel 和 connection
NCCL 建立连接的主线可以记成 发现硬件 → 搜索通信图 → 拼出各 channel 的逻辑邻居 → 为邻居建立 transport 连接. 建立好之后, collective kernel 和 proxy 才沿着这些连接推进数据.
例如两台机器各有两个 rank. NCCL 先知道 GPU 和 NIC 如何连接, 再为某个 channel 选出节点内顺序 [0, 1] 和 [2, 3], 将两段拼成 0 → 1 → 2 → 3 → 0. 此时 rank 1 知道自己的 prev = 0, next = 2. 随后再分别为这两条边准备本地 GPU 通路或跨机网络通路.
抽象
回答的问题
典型数据
Topo system
硬件有哪些, 两个资源之间能怎么走
comm->topo, ncclTopoNode, links, paths
Algorithm graph
为某种算法选哪些 GPU 顺序, 网络端点和 channel 数
comm->graphs[], intra, in ...
RDMA 基础
从一次接收理解 RDMA
先把 RDMA 理解成应用和网卡之间的一组队列. 应用提交要做的工作, 网卡执行, 再把执行结果放回完成队列. 实际传输的数据放在提前注册的内存中.
以 A 向 B 发送一条消息为例, B 先准备接收 buffer, 将这段内存注册成 MR, 再往 QP 的 RQ 中提交接收请求. 消息到达后, B 的网卡根据请求把数据写入 buffer, 并向 CQ 写入完成记录. B 的应用取出完成结果后, 就可以处理 buffer 中的数据.
下面主要看普通用户态 RDMA, 使用 RC (Reliable Connection) QP 和 SEND/RECV, 暂不涉及 GPU 显存和共享接收队列.
QP 和 PD 的资源关系
QP 包含 SQ 和 RQ
A 和 B 两端各自创建本地 QP (Queue Pair). 一个 QP 包含两个工作队列:
SQ (Send Queue): 提交发送方向的工作, 如 SEND, RDMA WRITE 和 RDMA READ.
RQ (Receive Queue): 提交接收请求, 描述接下来可以往哪里接收数据.
应用构造 ...
prims_simple.h
recvReduceSend() reduce-scatter 本地实现
1234 __device__ __forceinline__ void recvReduceSend(intptr_t inpIx, int eltN, bool postOp=false) { genericOp<0, 0, 1, 1, Input, -1>(inpIx, -1, eltN, postOp); // DirectRecv1, DirectSend1, Recv, Send, SrcBuf, DstBuf}
direct 这里指的是可以直接访问到 peer 的 gpu 显存,但是这里并不一定是远程 gpu 可能是同一个 server 内部的不同 gpu 设备
Kimi Linear: An Expressive, Efficient Attention Architecture
整体架构
Kimi Linear 将 KDA 和 MLA 放在 Transformer 的 token-mixing 位置, 并采用 3 个 KDA layers + 1 个 MLA layer 的排列; KDA 用固定大小的 recurrent state 处理历史信息, MLA 则保留 full attention 与 latent KV cache; 每个 token-mixing layer 后仍然连接一个 MoE layer, 整体数据流保持 Norm -> KDA 或 MLA -> residual -> Norm -> MoE -> residual;
KDA layer 的输入, 状态更新与输出
生成第 t+1t+1t+1 个 token 时, KDA layer lll 接收两个输入: 当前 token 从上一层传来的 hidden vector ht(l)h_t^{(l)}ht(l), 以及本层处理完上一个 token 后留下的 recurrent state St−1(l)S_{t-1}^{(l)}St−1(l); 前者沿模型深度 ...
FreeToken: Efficient Edge-Native MoE Serving with Bandwidth-Adaptive Execution
背景
MoE 模型的总参数量虽然很大, 但每个 token 实际只会激活其中少量 experts, 因此 active parameters 远小于总参数量, 这个现象称为 sparse activation; 它让消费级 GPU 具备了计算大规模 MoE 模型的可能性, 因为 GPU 只需要执行当前激活的部分, 不需要同时计算完整的 expert pool;
但是, 完整 expert pool 仍然可能远大于 GPU 显存, 因此需要主要保存在 host memory 中; FreeToken 希望把个人电脑的 GPU, CPU, memory 和 interconnect 组合成一个完整的 serving system; 当需要的 expert 没有命中 GPU cache 时, 系统可以将 expert weights 搬到 GPU 上计算, 也可以将较小的 activation tensor 传到 CPU 侧直接计算;
FreeToken 希望感知 CPU, GPU 和 memory 之间的实际 bandwidth, 并据此动态选择执行方式, 从而尽可能利用个人电脑已有的异构 ...
4. Inference-Time Intervention (Steering 与 Rollback)
模型生成到一半被发现越狱了, 或者被发现在编事实。这一刻你能做什么?
这份笔记把"检测之后的动作"整理成八类, 梳理 steering 和 rollback 两条主线的谱系、当前 SOTA 和还没被解决的问题。文献覆盖 2023.06 – 2026.08, 约 60 篇。
分类学是我为回答这个问题归纳的, 不是文献里的既有共识。要写进 related work 的话, 建议把 A1/A2 合并成 “continuous intervention”, A4/A5/A6 合并成 “generative rollback”, 更接近现有说法。
1. 先把术语对齐
这两个词在文献里各有好几个名字, 而且它们不是并列关系, 是同一个闭环里的两种不同动作。
Steering 的正式说法主要有三个:
activation steering / activation addition: 往残差流里加一个方向向量
representation engineering (RepE): 把这件事当成一个研究纲领
inference-time intervention (ITI): ...
8.deepseekv2
Multi-Head Latent Attention
Low-Rank Key-Value Joint Compression
DeepseekMoE
1. 时序概率建模: 从 Binomial 到 Weibull
📝 到达过程黑话
arrival process (到达过程): 事件在时间轴上一个个冒出来的随机过程
N(t)N(t)N(t): 到时刻 ttt 为止发生了多少次事件 (计数视角)
TkT_kTk: 第 kkk 次事件发生的时刻 (等待视角)
λ\lambdaλ: rate, 单位时间平均发生几次
survival function S(t)=P(T>t)S(t) = P(T > t)S(t)=P(T>t): “撑到 ttt 还没出事” 的概率
hazard rate h(t)h(t)h(t): 风险率, 已经活到 ttt 了, 下一瞬间出事的密度
shape parameter kkk: Weibull 里控制 hazard 走势的那个形状参数
123456789Binomial (n 次独立试验, 每次概率 p) ↓ n → ∞, p → 0, np = λt 固定Poisson(λt) "固定一段时间 t, 数一数发生了几次" ↓ 反过来问: 等第 1 次要多久Exponenti ...
3. Speculative Decoding
Speculative Decoding 的朴素思想
想要加速一个 auto-regressive 模型的推理, 可以先猜测合理的上下文, 再让大模型一次验证多个位置; 比如已经有 prefix, 小模型先猜出 I love cats, 大模型验证后保留 I love, 在 cats 这里拒绝并补出 dogs, 后面基于 cats 生成的内容就不能继续保留;
这里有两个角色: Draft Model 负责快速生成候选, Target Model 负责验证和确定最终输出; 上面的例子是在说明接受前缀和截断的位置, 随机 sampling 下的接受规则还需要下面的概率推导;
本文主要根据四页手稿整理, 保留从 sampling 理论到 SpecInfer, Medusa, EAGLE-1 的顺序; 图片选用原论文架构图, 对手稿中公式或表述的必要修正单独说明;
理论部分对应 Google 的 Fast Inference from Transformers via Speculative Decoding 和 DeepMind 的 Accelerating Large Language M ...
