主页

VSCode 无法读取代理环境变量的解决方案

在 macOS 上开发时,常见的做法是把代理配置写在 ~/.zshrc 里: export https_proxy=http://127.0.0.1:7897 export http_proxy=http://127.0.0.1:7897 export all_proxy=socks5://127.0.0.1:7897 在终端里运行 curl 或其他工具时一切正常,但在 VSCode 的插件中,代理失效,比如codex cli/claude code 这种 影响很大, 根本原因 ~/.zshrc 只在交互式 shell 启动时才会被 source。 当你从 Dock 或 Finder 点击打开 VSCode 时,macOS 启动的是一个非交互式进程,不会走 ~/.zshrc...

阅读更多

ZeRO:从优化器状态到残差状态的显存优化

关联阅读:ZeRO 作为数据并行 训练中的显存优化 1. 训练显存的组成 训练一个参数量为 $\Psi$ 的模型,全精度 Adam 优化器(FP16 混合精度)下,显存占用主要来自: 组件 精度 大小(bytes/参数) 参数(Master Weights) FP32 4 梯度 FP16 2 一阶矩 m FP32 4 二阶矩 v FP32 4 ...

阅读更多

虚拟流水线并行(VPP):更低气泡,更高吞吐

前置阅读:流水线并行(1F1B) 1. 回顾:1F1B 的气泡极限 1F1B 的气泡比率为: \[\text{bubble ratio}_{\text{1F1B}} = \frac{p - 1}{m}\] 想降低气泡,有两条路: 增大 $m$(micro-batch 数):但显存需求也随之增大(更多 in-flight 激活),且每个 micro-batch 变小会降低 GPU 的矩阵乘效率; 减小 $p$(stage 数):但这意味着要么缩减模型规模,要么每个 stage 承载更多层——两者都不是我们想要的。 VPP(Virtual Pipeline Parallelism,也叫 Interleaved PP)提供了第三条路:在不增加物理 GPU 数的前提...

阅读更多

序列并行(SP)与上下文并行(CP):超长上下文训练的关键

前置阅读:张量并行与通信 分布式训练并行基础 1. 为什么需要序列并行 训练长上下文(如 128K、1M token)模型时,内存瓶颈主要来自: 激活值:self-attention 的 $Q$、$K$、$V$ 和中间结果,内存随序列长度 $L$ 线性增长; KV Cache:每层的 $K$、$V$ 需要存储,$O(L \cdot d)$ 的显存; TP 的 Embedding / LayerNorm 副本:张量并行(TP)要求每张卡持有相同的完整激活,$L$ 大时这个”完整副本”变得难以承受。 序列并行(Sequence Parallelism,SP) 和 上下文并行(Context Parallelism,...

阅读更多

RLHF 到 GRPO:大模型强化学习训练方法梳理

关联阅读:SFT 与 RL 在推理中的应用 1. 背景:从 SFT 到 RLHF 预训练 + SFT 给了模型通用能力,但对齐(helpfulness、harmlessness、honesty)和进一步提升推理能力,光靠有监督微调效果有限。RLHF(Reinforcement Learning from Human Feedback) 通过让模型在”好的回复得到奖励”的环境下训练,成为 InstructGPT/ChatGPT 等产品的核心技术。 近年来,以 DeepSeek-R1 为代表的推理模型则更进一步——直接用 可验证奖励(Verifiable Reward) 替代人类反馈,在数学和代码等任务上取得了远超 SFT 的推理能力提升。 本文梳理从 PPO 到 GRPO ...

阅读更多

流水线并行(Pipeline Parallelism):1F1B 调度与气泡分析

本文是分布式训练并行系列的一篇。前置背景可参考: 分布式模型并行(含 PP 朴素方案 + GPipe 概览) NCCL 通信原语 1. 为什么需要流水线并行 单机模型并行(Naïve Model Parallel)把模型不同层放在不同 GPU,同一时刻只有一张卡在算,其余全部空等——GPU 利用率极低。 GPipe [1] 提出用 micro-batch 填充流水线空隙:把一个 mini-batch 切成 $m$ 份 micro-batch,各阶段可以流水线化执行。但 GPipe 的 “全 F 全 B” 策略导致: 显存峰值高:设备 0 要把所有 $m$ 个 micro-batch 的激活值全存到反向传播结束; 气泡(Bubble)时间...

阅读更多

梯度检查点(Gradient Checkpointing):用计算换显存

关联阅读:训练中的显存优化 ZeRO 优化 1. 问题:反向传播需要存激活 标准反向传播(Backpropagation Through Time / Chain Rule)需要在反向时访问每层前向传播的中间激活(intermediate activations)。 以一个 $n$ 层的模型为例: 前向:x₀ → [Layer 1] → x₁ → [Layer 2] → ... → xₙ₋₁ → [Layer n] → xₙ = loss 反向需要: dL/dx_{n-1} 需要 x_{n-1}(Layer n 的输入) dL/dx_{n-2} 需要 x_{n-2}(Layer n-1 的输入) ... dL...

阅读更多

FlashAttention:IO 感知的精确 Attention 计算

关联阅读:Transformer 加速技巧 混合精度训练(AMP) 1. 标准 Attention 的内存瓶颈 标准 Attention 计算为: \[\text{Attention}(Q, K, V) = \text{softmax}\!\left(\frac{QK^T}{\sqrt{d_k}}\right) V\] 朴素实现的显存复杂度为 $O(N^2)$(需要存储 $N \times N$ 的 attention score 矩阵),时间复杂度也是 $O(N^2 d)$。 瓶颈在哪里? 不是 FLOP 不够,而是 HBM(显存带宽) 太慢。 以 A100(80GB HBM2e,带宽 2TB/s,FP16 算力 312...

阅读更多