Vpn from WireGuard Impl
VPN 史前简介
VPN 这个名字里的 virtual 来自 1990 年代企业的实际诉求, 当时跨地办公要靠租用专线, 业界想用便宜的公网 Internet 模拟出专线效果, virtual 是说虚拟出一根原本要靠物理拉线才有的专网;
接下来 30 年里, VPN 的主流协议大致经过三代:
IPsec (1998, IETF), 工作在 IP 层, 由 ESP (加密 + 认证), AH (只认证), IKE (密钥协商) 三个子协议拼成; 内核态实现, 算法可协商, 规范文档加起来几千页, 配置极其复杂, 但靠厂商生态吃下了企业 site-to-site 市场; Linux 内核里对应的模块叫 XFRM;
OpenVPN (2001, James Yonan), 用户态实现, 复用 OpenSSL 和 TLS 做加密认证, 用 tun / tap 接管网络, 跑 UDP 1194 或 TCP 443; 部署只要一个二进制, 跨平台友好, 是 2000s 到 2010s 商业 VPN (NordVPN 等) 的默认协议; 但用户态架构和 TLS overhead 让它性能输给下一代 ...
ZeRO - memory optimizations toward training trillion parameter models
📝 并行理论的黑称
Vertical Split: 竖切, PP
Horizontal Split: 横切, TP
消耗显存的模块分类
Part
Category
Included Items
Description
1
Model states
optimizer states, gradients, parameters
For large models, the majority of the memory is occupied by model states.
2
Residual states
activation, temporary buffers, unusable fragmented memory
The remaining memory is consumed by residual states.
Model State 不足分析 + ZeRO-DP 性能
Parallelism Method
Why Compute Efficiency Is High / Low
Why Memory Effi ...
Taming Throughput-Latency Tradeoff in LLM Inference with Sarathi-Serve
Prefill vs. Decode
Prefill 阶段做了什么
prefill = 对整个 prompt 做一次完整的 transformer forward。
包括了:
对所有输入 token 一起做 embedding
过每一层的 attention
过每一层的 FFN
同时把每层对应的 K/V 写入 KV cache
最后根据最后位置的 hidden state 过 lm head,得到 next-token logits
采样 / greedy / top-k / top-p,选出第一个输出 token
这个过程由于是有了所有的输入参数的计算,所以其可以在输入启动阶段就做所有启动处理,结果是 compute-bound.
Decode 阶段做了什么
对每一个新的 token (这里来看类似于一个单词的 向量表示), 来计算他们预测的下一个单词输出,这里应该会经过多个阶段,分别是
linear 阶段,也就是从 token X 处理得到 Q, K, V
attention 阶段,也就是通过 QKV, softmax 等计算得到 attention 得分
FFN 阶段,也就 ...
ReAct + Reflexion - Reasoning Acting and Verbal Reinforcement Learning
[!联读黑称 / 术语速查]
ReAct 协议:
thought: 模型自言自语写出的 reasoning trace, 不出现在环境里
action: 模型对外发出的工具调用 / 环境指令, 会被执行
observation: 工具或环境返回给模型的下一段输入
trajectory: thought →\rightarrow→ action →\rightarrow→ observation →\rightarrow→ thought →\rightarrow→ … 的整条交替序列
act-only: 没有 thought, 只对外发 action 的 baseline (WebGPT, SayCan 那一派)
CoT-only: 全程在脑子里推, 不调外部工具的 baseline (Wei et al. 2022)
Reflexion 协议:
Actor: 真正生成 action 的 policy LM, 在 Reflexion 实验里基本就是套了一层 ReAct 协议的 GPT
Evaluator: 产生 reward signal 的判官, 可以是 ground-tru ...
Megatron-LM - Training Multi-Billion Parameter Language Models Using Model Parallelism
Attention 计算的线性代数问题
attention 和 FFN 的关系
如果记某层输入为 x, 那么可以粗略理解成:
attention 输出: 给 x 补充上下文信息, 像"开会听别人说话"
FFN 输出: 给 x 补充局部计算后的新特征, - 像"你自己在脑子里消化, 归纳, 形成判断"
如果我们尝试把一个 FFN 层变成一个 attention 层, 结果就是可能会更加适合长距离语义传输但是缺少本地语义特征变换器
多层 attention-FFN 结构
可以理解为不断重复"交换信息 →\rightarrow→ 消化信息 →\rightarrow→ 再交换 →\rightarrow→ 再消化"
也就是说各自对本 token 处于上下文的含义理解之后再次进行交换分享,让整体的文意理解更加深刻
Transformer 架构的训练计算
假设训练句子是:The capital of France is Paris.
训练时,decoder-only 模型会把它转成一种“前缀预测后一个 token”的形式, 比如模型看到 ...
GPipe - efficient training of giant neural networks using pipeline parallelism
神经网络基础
如图是一个基础的神经网络结构, 我们这里首先要明确几个函数:
每一层内部的计算是 hi:=σ(zi)h_i := \sigma(z_i)hi:=σ(zi), zi:=Wihi−1+biz_i := W_i h_{i-1} + b_izi:=Wihi−1+bi
我们最终的输出函数是 L:=L :=L:=loss(sample; forward)
forward: 指的是从输入样本数据 h0h_0h0 到 最终输出 σ(z2)\sigma(z_2)σ(z2) 的所有计算过程
backward: 从 LLL 开始不断计算每一层中的 ∂L∂Wi\frac{\partial L}{\partial W_i}∂Wi∂L 和 ∂L∂bi\frac{\partial L}{\partial b_i}∂bi∂L 的方向梯度, 然后用这个来不断更新 Wi, biW_i,\ b_iWi, bi
现在来拆解一下反向传播的过程: 基本根据的是莱布尼茨链式法则 (chain-rule)
∂L∂W2=∂L∂z2∂z2∂W2=∂L∂z2h1T\frac{\partia ...
Onion - Identifying Incident-indicating Logs for Cloud Systems
📝 术语别名
II-log: Incident-Indicating Log, 真正能告诉你故障在哪的那批 log;
Log clique: 一组高度相似 / 频繁共现的 log template, 是 Onion 聚类的产物;
Anomalous server: incident 时段触发了 alert 或 metric 异常的实例;
Normal server: 同服务下未受影响的同伴实例;
Bilateral: 双边对比, 这里指 anomalous 集 vs normal 集的对比;
前置: 为什么 raw log 不能直接喂给 RCA 系统
云服务一次 incident 的 log 量级通常是百万到亿条, 真正与故障有因果关系的可能只有几十条; 中间夹着大量噪声:
routine heartbeat;
健康探针 (GET /health 200);
周期性 batch / cron 任务的常规 log;
跨实例都有的全局事件 (版本 reload, 集群配置 push);
上下游服务的非关键 warning;
如果直接把全量 log 倒给 ...
RCACopilot - Automatic Root Cause Analysis via Large Language Models for Cloud Incidents
📝 术语别名
RCA: Root Cause Analysis, 根因分析, 找到事故的真正起因;
OCE: On-Call Engineer, 轮值工程师, 收到告警的那个人;
Handler: 一段事先写好的诊断流程, 由 OCE 编写, 系统按 alert 类型匹配执行;
Diagnostic Information: handler 收集到的所有运行时证据 (logs / metrics / traces / configs 等);
CoT: Chain-of-Thought, 让 LLM 先一步步推理再下结论的 prompt 技巧;
In-context Learning / Few-shot: 在 prompt 里给 LLM 几条相似历史例子作为参考;
前置: cloud incident RCA 是个什么问题
云服务一旦出事 (latency 飙高、error rate 飙升、磁盘炸了、配置错了), 监控系统会在毫秒到秒级吐出一条 incident 警报, 然后人接手:
OCE 起夜接到 page;
翻 dashboard, 看 met ...
1. JVM GC 工作思路
📝 术语别名
GC: Garbage Collection, 自动垃圾回收;
STW: Stop-The-World, GC 期间所有应用线程被 JVM 冻住;
Heap: JVM 管理的对象内存区, 所有 new 出来的东西都在这里;
GC Roots: 一组"一定还活着"的引用起点, 可达性分析的种子;
前置: 为什么 Java 需要 GC
C/C++ 程序员是手动管内存的, 你 malloc 一块就要负责 free 一块, 漏了就内存泄漏, 重复 free 就 double-free crash; Java 把这个负担拿走了, 程序员只负责 new Foo(), 永远不主动释放;
那对象怎么消失? 答案是 JVM 启动了一个叫 GC 的后台机制, 周期性扫整个 heap, 把"再也不会被用到的对象"自动清掉, 这一行为的代价是: 扫的时候得短暂冻住应用线程 (STW), 这就是 GC 给你带来的延迟代价;
所以理解 GC 本质上要回答两个问题:
怎么判断一个对象"已经死了";
判断完之 ...
6. Unix ping 与 ICMP 协议
📝 术语别名
ICMP: Internet Control Message Protocol, IP 层的"控制/反馈"协议;
RTT: Round-Trip Time, 一来一回的总时延;
Echo Request / Echo Reply: ICMP type 8 / type 0, 就是 ping 用到的两种报文;
前置: ICMP 在协议栈中的位置
ICMP 经常被人当成"网络层之上的小协议", 但它实际上是 IP 协议的一个直接附庸, 跑在 IP 之上, 但属于 network layer 的控制平面;
IP 包的 header 里 Protocol 字段为 1 时, 上层就是 ICMP (对比 TCP=6, UDP=17);
ICMP 报文不走传输层, 没有端口号; 它的"复用"由 ICMP type + code 这两个字节自己完成;
ICMP 的存在意义是给 IP 这个 best-effort 协议一个反馈信道, 比如告诉 src “你这个包 TTL 跑光了”, “目标不可达 ...
