主页

DDP 与 Ring-AllReduce

本文是《dp 与 ddp 数据并行》的下篇,聚焦 DDP(DistributedDataParallel) 的使用方式、工作原理和 Ring-AllReduce 算法详解。上篇讲 DP 源码解析,见 dp-ddp。 1 DDP (DistributedDataParallel) 并行 1.1 使用方式 import argparse import torch from torch.nn.parallel import DistributedDataParallel as DDP parser = argparse.ArgumentParser() parser.add_argument("--save_dir", default='') parser.add_argument(...

阅读更多

FSDP 并行策略

1 训练过程中显存的组成 在大模型训练中,显存大致被三类数据占用: P (Parameters):模型参数 G (Gradients):反向传播时的梯度 OS (Optimizer States):优化器的状态(如 Adam 的动量和方差信息) 典型的 Adam 优化器中,这三者的比例大致为 1 : 1 : 6 之所以 Optimizer States 占比高,是因为 Adam 需要为每个参数维护一阶矩(动量)和二阶矩(方差)的额外信息 例如,在 PyTorch 中优化器的典型构造如下: optimizer = optim.Adam(model.parameters(), lr=0.001) 反向传播与参数更新的过程: loss.backward...

阅读更多

dp 与 ddp 数据并行

1 DP (DataParallel) 并行 1.1 使用方式 PyTorch 最原始的 DP 并行实现非常简单: import torch.nn as nn # 简单的DP使用 model = nn.DataParallel(model, device_ids=[0, 1, 2, 3]) 参数说明: device_ids: 指定使用的 GPU 设备,不指定时默认使用所有可见 GPU output_device: 默认是 device_ids[0](主卡),很多关键工作发生在这张卡上 1.2 原理解析 1.2.1 Parameter Server 概念 单机多卡的 DP 并行和分布式训练中的 Parameter Server 架构类似。 相关...

阅读更多

为什么相比于SFT训练,RL训练更依赖推理引擎

在大模型的训练中,常见的 RL(Reinforcement Learning)训练框架往往对推理引擎(如 vLLM、SGLang)依赖更强,甚至会将其作为安装和运行的必选组件。 核心原因很简单:SFT 在训练时只需要一次性计算 logits(Prefill),而 RL 的 rollout 阶段必须走完整的 Prefill + Decode 推理流程 1. Prefill vs Decode 在 Transformer 推理中,我们可以把计算过程分为两种模式: 阶段 输入内容 输出内容 并行性 Prefill 一次性输入整个序列(prompt + 已知目标...

阅读更多

IB 原生 RDMA 与 以太网卡 + RoCE 对比

1. IB 原生 RDMA 方案(InfiniBand 网卡) IB = InfiniBand,是一种高速、低延迟、高带宽的数据中心互连技术,原生支持 RDMA,无需额外协议封装。 典型带宽:40Gbps、100Gbps、200Gbps 及更高。 主要应用于 高性能计算(HPC)、人工智能训练集群、分布式存储 等对延迟和吞吐极度敏感的场景。 常见 IB 网卡型号: Mellanox ConnectX-6 (CX6) Mellanox ConnectX-7 (CX7) NVIDIA BlueField 系列 DPU(带 IB 接口) 优势: 原生 RDMA:直接在节点间读写内存,绕过 CPU,延迟可达微秒级。 带宽利用率极高,吞吐稳定。 在 HPC、A...

阅读更多

云防火墙 与 WAF 产品上的区别

云防火墙(Cloud Firewall)和 WAF(Web Application Firewall)都属于网络安全产品,但防护层级和保护对象不同,经常作为互补方案同时部署。 一、云防火墙(Cloud Firewall) 定义 云防火墙是部署在云上的网络边界安全产品,相当于传统硬件防火墙的云化形态,用于保护云环境整体的网络流量。 主要功能 网络访问控制(ACL / 安全组增强) 状态检测、防入侵(IDS/IPS) DDoS 防护(部分集成) NAT、VPN 管理 跨 VPC 的东西向流量可视化与控制 出入口(南北向)及内网(东西向)防护 保护对象 云服务器实例(ECS) 子网/VPC 整体网络 非 Web 应用(数据库、SSH、...

阅读更多

lambda 与 bind ,类与模版

Lambda 底层:编译器生成闭包类 Lambda 不是模板,而是编译器生成的类 每个 lambda 表达式,编译器都会自动生成一个匿名的类(闭包类型),这个类重载了 operator()。 // 你写的 lambda auto lambda = [x, &y](int a) -> int { return x + y + a; }; // 编译器实际生成类似这样的类 class __lambda_123 { // 编译器生成的匿名类名 private: int x_; // 按值捕获的 x int& y_; // 按引用捕获的 y public: // 构造函数:初始化捕获的变量 __la...

阅读更多

boost::bind 参数量限制与现代 C++ 替代方案

boost::bind 参数量限制与现代 C++ 替代方案 问题背景 在维护老代码时,遇到了一个使用 Boost 1.63 版本的 boost::bind 的问题:发现该函数无法传入超过 9 个参数(包括 this 指针)。这个限制其实是 C++03 时代的历史遗留问题。 根本原因:C++03 的”转发问题” 在 C++03 时代,由于缺乏可变参数模板和完美转发机制,boost::bind 面临一个被称为”转发问题”(forwarding problem)的根本性限制。 转发问题的本质 C++03 中,模板函数的参数通常写成 T&(非 const 左值引用)来”原样传递”对象,但这样的写法无法接受右值(临时对象、字面量): template<class T&...

阅读更多