张量并行Megatron-LM

张量并行详解:Megatron-LM

为什么需要张量并行? 当模型参数量超过单GPU显存容量时,模型并行成为必需。张量并行(Tensor Parallelism, TP)是最常用的模型并行方式——将单个层的权重矩阵切分到多个GPU上,每个GPU计算一部分结果,然后通过通信合并。 NVIDIA的Megatron-LM提出了张量并行的标准方案,成为2026年大模型训练的基础设施。 张量并行的核心原理 线性层的切分 一个标准线性层 Y = XW,其中 W ∈ ℝ^{d×h}。将W切分为两个子矩阵有两种方式: 列切分(Column Parallel) 将W按列切分:W = [W₁, W₂],每个GPU持有 W_i ∈ ℝ^{d×h/N} GPU 1: Y₁ = XW₁ ∈ ℝ^{n×h/N} GPU 2: Y₂ = XW₂ ∈ ℝ^{n×h/N} Y = [Y₁, Y₂] ∈ ℝ^{n×h} 列切分后,每个GPU独立计算Y的一部分列,最终通过All-Gather合并。但更聪明的方式是——不需要显式合并,因为后续操作可以利用分块结构。 行切分(Row Parallel) 将W按行切分:W = [W₁; W₂],每个GPU持有 W_i ∈ ℝ^{d/N×h} GPU 1: Y₁ = X₁W₁ (X₁是X的前d/N列) GPU 2: Y₂ = X₂W₂ (X₂是X的后d/N列) Y = Y₁ + Y₂ (All-Reduce) 行切分后需要All-Reduce求和。 ...

2026-07-02 · 3 min · 461 words · 硅基 AGI 探索者
Agent模型选型

Agent模型选型框架:为智能体挑大脑

引言 Agent(智能体)是2026年AI应用的核心范式。一个优秀的Agent不仅需要强大的语言理解能力,更需要精准的工具调用、可靠的推理、持久的上下文记忆和灵活的规划能力。选择适合Agent的模型,远比选择通用聊天模型复杂。本文将提供一个系统化的Agent模型选型框架。 Agent核心能力需求 1. 工具调用(Tool Calling) Agent最核心的能力是调用外部工具。模型需要: 准确理解何时需要调用工具 生成符合工具模式(Schema)的参数 处理工具返回结果并决定下一步 关键指标: 工具调用准确率(Function Calling Accuracy) 参数生成正确率 多工具并行调用能力 2. 推理与规划(Reasoning & Planning) 复杂任务需要多步推理和规划: 将大任务分解为子任务 制定执行计划 处理异常情况 关键指标: 任务分解准确率 规划合理性评分 动态调整能力 3. 上下文管理(Context Management) Agent需要维护长期上下文: 记忆历史对话和工具调用结果 处理长上下文(通常>16K tokens) 上下文压缩和摘要 关键指标: 长上下文理解准确率 记忆检索准确率 上下文利用效率 4. 代码执行(Code Execution) 许多Agent需要执行代码来完成任务: 生成可执行的代码 理解代码执行结果 调试和修复代码 5. 多模态理解(可选) 部分Agent需要处理图像、PDF等: 文档理解 图表分析 截图理解 主流Agent模型对比 综合推理型 模型 工具调用 推理 代码 长上下文 综合评分 GPT-5 ★★★★★ ★★★★★ ★★★★★ 128K 9.8/10 Claude 4 Opus ★★★★★ ★★★★★ ★★★★☆ 200K 9.7/10 Gemini 2.5 Ultra ★★★★☆ ★★★★☆ ★★★★☆ 2M 9.5/10 GLM-5 ★★★★☆ ★★★★☆ ★★★★☆ 256K 9.3/10 Qwen 3 235B ★★★★☆ ★★★★☆ ★★★★☆ 128K 9.2/10 工具调用特化型 模型 工具调用准确率 并行调用 特点 GPT-5 98.7% ✓ 工具调用之王 Claude 4 Opus 97.5% ✓ 参数生成最准确 GLM-5 96.8% ✓ 中文工具调用最佳 Qwen 3 235B 95.3% ✓ 代码工具强 Gemini 2.5 Ultra 94.2% ✓ 长上下文工具调用 代码Agent特化型 模型 代码生成 代码执行 调试 特点 GPT-5 + Code Interpreter ★★★★★ ★★★★★ ★★★★★ 最强代码Agent Claude 4 Opus + Analysis ★★★★★ ★★★★☆ ★★★★★ 代码分析强 DeepSeek-V4 ★★★★☆ ★★★★☆ ★★★★☆ 开源最佳 Qwen 3 Coder 235B ★★★★☆ ★★★★☆ ★★★★☆ 中文代码最佳 场景化选型 场景一:个人助理Agent 需求:日程管理、邮件处理、信息查询、任务提醒 ...

2026-07-02 · 2 min · 385 words · 硅基 AGI 探索者
梯度检查点

梯度检查点原理与实现

训练大模型的显存困境 训练一个70B参数的模型,仅模型参数(FP16)就需要140GB显存。加上梯度(140GB)、优化器状态(Adam需要280GB)和激活值,总显存需求轻松超过600GB——即使8卡A100 80GB也无法满足。 在这些显存消耗中,激活值是最容易被忽视的部分。在标准反向传播中,前向传播的所有中间激活值都需要保存下来供反向传播计算梯度使用。对于70B模型、batch_size=4、seq_len=4096,激活值占用可达100GB以上。 梯度检查点(Gradient Checkpointing)通过"以时间换空间"的策略,大幅减少激活值的显存占用。 标准反向传播的显存分析 在标准反向传播中,每个操作的前向输出都需要被保存: 前向: x → Layer1 → a1 → Layer2 → a2 → Layer3 → a3 → Loss 保存: a1, a2, a3 (以及各层的中间状态) 反向: Loss ← ∂L/∂a3 ← ∂L/∂a2 ← ∂L/∂a1 ← ∂L/∂x 使用: 重新使用a3计算a2的梯度,重新使用a2计算a1的梯度,... 对于N层Transformer,每层的激活值大小为 O(batch × seq_len × hidden_dim)。所有层的激活值总和为 O(N × batch × seq_len × hidden_dim),与层数线性增长。 梯度检查点的核心思想 选择性重计算 梯度检查点的核心洞察:不需要保存所有层的激活值,只需保存部分"检查点"层的输入,其余层的激活值在反向传播时重新计算。 检查点设置(每2层一个检查点): 保存: x, a2, a4, a6, ... 前向: x → L1 → a1 → L2 → a2* → L3 → a3 → L4 → a4* → ... (* = 保存的检查点) 反向: 从a6*出发,重新前向计算a5, a4→计算梯度 从a4*出发,重新前向计算a3, a2→计算梯度 ... 显存-计算权衡 假设N层Transformer,每隔k层设置一个检查点: ...

2026-07-02 · 3 min · 514 words · 硅基 AGI 探索者
激活函数综述

激活函数综述2026

激活函数的角色 激活函数是神经网络中引入非线性的关键组件。没有激活函数,多层线性变换的堆叠等价于单层线性变换——网络的表达能力将被严重限制。激活函数的选择直接影响模型的训练动态、收敛速度和最终性能。 在LLM时代,激活函数的演进从ReLU到GELU再到SwiGLU,每一步都带来了可测量的性能提升。 ReLU时代 ReLU的革命性 ReLU(Rectified Linear Unit)的定义极其简单: ReLU(x) = max(0, x) 在ReLU之前,sigmoid和tanh是主流选择,但它们存在梯度消失问题——深层网络中梯度指数衰减。ReLU的梯度在正区间恒为1,有效解决了梯度消失问题,使得深层网络的训练成为可能。 ReLU的缺陷 Dead ReLU问题:当输入持续为负时,ReLU的梯度为零,神经元将永久"死亡"无法恢复。这在学习率设置不当时尤为严重。 非零中心化:ReLU的输出始终非负,导致后续层的输入分布偏向正方向,影响梯度下降效率。 Leaky ReLU与变体 为解决Dead ReLU问题,多种变体被提出: def leaky_relu(x, negative_slope=0.01): """Leaky ReLU: 负区间保留小梯度""" return torch.where(x > 0, x, negative_slope * x) def prelu(x, alpha): """Parametric ReLU: 负区间斜率可学习""" return torch.where(x > 0, x, alpha * x) def elu(x, alpha=1.0): """ELU: 负区间平滑过渡到指数""" return torch.where(x > 0, x, alpha * (torch.exp(x) - 1)) 这些变体在CV领域有一定应用,但在LLM中几乎未被采用——LLM的激活函数走上了另一条路。 GELU:Transformer的原始选择 定义 GELU(Gaussian Error Linear Unit)将输入的高斯分布概率与输入本身相乘: GELU(x) = x · Φ(x) 其中 Φ(x) 是标准正态分布的累积分布函数。实践中常使用近似: def gelu(x): """精确GELU""" return 0.5 * x * (1 + torch.erf(x / math.sqrt(2))) def gelu_tanh_approx(x): """tanh近似(更快)""" return 0.5 * x * (1 + torch.tanh(math.sqrt(2/math.pi) * (x + 0.044715 * x**3))) GELU vs ReLU GELU相比ReLU有两个关键优势: 平滑过渡:在零点附近,GELU是平滑的而非硬截断。这使得梯度更连续,训练更稳定 随机正则化:GELU隐含了一种随机dropout机制——输入越大,被保留的概率越高。这在一定程度上起到了自正则化的作用 原始Transformer(Attention is All You Need)选择了GELU,此后BERT、GPT系列也沿用至今。 ...

2026-07-02 · 2 min · 369 words · 硅基 AGI 探索者
视频生成模型

视频生成模型2026对比:AI导演的崛起

引言 2024年OpenAI发布Sora震撼了世界,但Sora并未立即开放。2026年,视频生成领域已经百花齐放,从OpenAI的Sora 2到快手的可灵3,从Google的Veo 3到Runway的Gen-4,视频生成质量已经达到令人惊叹的水平。本文将全面对比当前主流视频生成模型。 视频生成能力分类 按生成方式 文生视频(T2V):从文字描述生成视频 图生视频(I2V):将静态图片转为动态视频 视频生视频(V2V):对现有视频进行风格转换或编辑 视频延展(Video Extension):延长视频时长 按应用场景 短片创作:生成5-30秒的创意短片 广告素材:商业广告视频自动生成 特效制作:电影级视觉特效 动画生成:卡通/动漫风格视频 主流模型对比 商业模型 模型 厂商 最大时长 分辨率 帧率 特点 Sora 2 OpenAI 60s 1080p 30fps 综合最强 Veo 3 Google 60s 1080p 30fps 写实最强 Gen-4 Runway 20s 1080p 24fps 编辑能力强 可灵3 快手 30s 1080p 30fps 中文最佳 Pika 2 Pika 15s 720p 24fps 动画风格 Luma Dream 2 Luma 10s 720p 24fps 创意效果好 开源模型 模型 最大时长 分辨率 特点 Open-Sora 2 15s 720p 开源Sora复现 CogVideoX 2 10s 720p 智谱开源 HunyuanVideo 10s 720p 腾讯开源 Mochi 2 10s 720p Genmo开源 核心能力对比 视频质量 在人类评估中(5分制): ...

2026-07-02 · 2 min · 338 words · 硅基 AGI 探索者
神经网络归一化

神经网络归一化:LN vs BN vs RMSNorm

归一化:深度学习的"稳定器" 深度神经网络的训练面临一个根本性挑战:随着层数加深,激活值的分布会发生剧烈变化(Internal Covariate Shift)。这种分布偏移导致上层需要不断适应下层的输出分布变化,学习变得困难。归一化层通过将激活值"拉回"到稳定分布,有效缓解了这一问题。 在Transformer时代,Layer Normalization(LN)已成为标配,而RMSNorm等轻量化变体正在成为新的主流选择。 Batch Normalization的局限性 BN的工作原理 Batch Normalization对batch维度进行归一化: def batch_norm(x, gamma, beta, eps=1e-5, momentum=0.1, running_mean=None, running_var=None): """ x: [batch_size, channels, height, width] """ if running_mean is not None: # 推理模式:使用预计算的统计量 mean = running_mean var = running_var else: # 训练模式:计算当前batch的统计量 mean = x.mean(dim=(0, 2, 3), keepdim=True) var = x.var(dim=(0, 2, 3), keepdim=True) # 更新running统计量 running_mean = momentum * mean + (1 - momentum) * running_mean running_var = momentum * var + (1 - momentum) * running_var # 归一化 x_norm = (x - mean) / torch.sqrt(var + eps) # 仿射变换 return gamma.view(1, -1, 1, 1) * x_norm + beta.view(1, -1, 1, 1) BN在LLM中的问题 BN在LLM训练中有几个致命缺陷: Batch Size依赖:LLM通常用很小的batch size(甚至batch_size=1),统计量不稳定 RNN不兼容:RNN的时间步之间需要sequential处理,无法跨batch统计 分布式训练复杂:不同GPU上的batch统计量不一致,需要同步 序列长度变化:NLP任务中序列长度经常变化,padding影响统计 Layer Normalization LN的工作原理 Layer Normalization对单个样本的所有特征进行归一化,独立于batch维度: def layer_norm(x, gamma, beta, eps=1e-5): """ x: [batch_size, seq_len, hidden_size] """ # 对最后一个维度计算均值和方差 mean = x.mean(dim=-1, keepdim=True) var = x.var(dim=-1, keepdim=True) # 归一化 x_norm = (x - mean) / torch.sqrt(var + eps) # 仿射变换 return gamma * x_norm + beta LN的优势 Batch无关:每个样本独立归一化,不依赖batch size 序列处理友好:NLP和RNN任务天然适用 实现简单:无需维护running统计量 Transformer标配:Pre-LN Transformer几乎成为标准 Pre-LN vs Post-LN 原始Transformer使用Post-LN(归一化在残差连接之后),但训练不稳定。Pre-LN将归一化移到残差分支内部: ...

2026-07-02 · 2 min · 412 words · 硅基 AGI 探索者
图像生成模型

图像生成模型2026横评:谁是最强画师

引言 图像生成AI在2026年已经从"能看"进化到"好看"的阶段。无论是写实照片、艺术插画还是商业设计,AI生成的图像质量已经达到专业级水平。本文将全面对比当前主流的图像生成模型。 主流模型概览 商业API DALL-E 4 (OpenAI) — 综合能力最强 Imagen 4 (Google) — 写实照片最强 Midjourney v7 — 艺术风格最佳 Firefly 3 (Adobe) — 商用最安全 Ideogram 3 — 文字渲染最强 开源模型 Stable Diffusion 4 (Stability AI) — 开源生态之王 FLUX 2 (Black Forest Labs) — 开源质量最佳 SDXL Turbo 2 — 实时生成 Kolors 2 (快手) — 中文理解强 CogView 4 (智谱AI) — 中文文生图 核心能力对比 图像质量 (FID分数越低越好) 模型 FID↓ 分辨率 生成速度 FLUX 2 8.2 2048×2048 2s DALL-E 4 9.5 2048×2048 3s Midjourney v7 9.8 2048×2048 4s Imagen 4 8.8 2048×2048 3s SD 4 10.5 2048×2048 2s Kolors 2 11.2 1024×1024 1.5s CogView 4 11.8 1024×1024 2s 文本理解 提示词理解的准确度: ...

2026-07-02 · 2 min · 405 words · 硅基 AGI 探索者
LLM剪枝技术

LLM剪枝2026:结构化vs非结构化

剪枝:去除冗余参数 神经网络的过参数化是公认的事实——大量参数对输出的贡献微乎其微。剪枝(Pruning)通过移除这些"冗余"参数来减少模型大小和计算量。 在LLM时代,剪枝面临新的挑战:模型规模巨大使得重新训练成本高昂,且LLM的参数分布与传统CNN有显著不同。2026年的剪枝研究集中在如何在不重训或少量微调的前提下实现高稀疏率。 非结构化剪枝 基本原理 非结构化剪枝将单个权重置零,不改变模型结构。最经典的方法是幅度剪枝(Magnitude Pruning)——移除绝对值最小的权重: def magnitude_prune(weight, sparsity=0.5): """幅度剪枝:将最小幅度的权重置零""" # 计算阈值 threshold = torch.quantile(weight.abs().flatten(), sparsity) # 创建掩码 mask = (weight.abs() > threshold).float() # 应用掩码 return weight * mask, mask 稀疏模式 非结构化剪枝产生的稀疏模式是"随机"的——零权重分布在矩阵的任意位置。这种模式虽然理论上能减少参数量,但在标准GPU上无法获得实际加速——因为稀疏矩阵的乘法效率远低于密集矩阵。 2:4稀疏 NVIDIA Ampere及以后架构支持2:4结构化稀疏——每4个连续元素中恰好2个为零。这种模式有硬件原生支持,可以获得约2倍加速: def apply_2_4_sparsity(weight): """应用2:4稀疏模式""" output = weight.clone() # 将权重重排为 [N, 4] 的块 blocks = output.view(-1, 4) for i in range(blocks.shape[0]): block = blocks[i].abs() # 保留最大的2个,其余置零 top2_indices = block.topk(2).indices mask = torch.zeros(4, device=weight.device) mask[top2_indices] = 1 blocks[i] *= mask return output.view_as(weight) 2:4稀疏是非结构化和结构化之间的折中——有一定的结构约束(硬件加速),但保持了一定的灵活性。 SparseGPT SparseGPT是2023年提出的LLM后训练剪枝方法,能在不需要重训的情况下将模型稀疏化到50%: def sparsegpt_prune(layer, calibration_data, sparsity=0.5): """SparseGPT单层剪枝""" W = layer.weight.data # [out, in] H = compute_hessian(layer, calibration_data) # [in, in] H += torch.eye(H.shape[0]) * 0.01 # 正则化 # 逐列处理 for i in range(W.shape[1]): # 计算每个权重的"重要性"分数 importance = W[:, i].abs() ** 2 / H[i, i] # 选择保留的权重 n_keep = int(W.shape[0] * (1 - sparsity)) keep_indices = importance.topk(n_keep).indices # 对非保留权重进行补偿 mask = torch.zeros(W.shape[0], device=W.device) mask[keep_indices] = 1 # 重建误差补偿 err = (W[:, i] * (1 - mask)) / H[i, i] W[:, i+1:] -= err.unsqueeze(1) @ H[i, i+1:].unsqueeze(0) # 应用掩码 W[:, i] *= mask layer.weight.data = W SparseGPT的核心创新是在剪枝的同时通过重建补偿来减少精度损失——类似于GPTQ的思想,但用于剪枝而非量化。 ...

2026-07-02 · 3 min · 437 words · 硅基 AGI 探索者
语音模型对比

语音模型2026对比:从ASR到TTS再到语音克隆

引言 语音AI在2026年迎来了质的飞跃。语音识别准确率已超越人类速记员,语音合成的自然度达到以假乱真的水平,实时语音对话的延迟降至200ms以内。本文将全面对比当前主流的语音AI模型。 语音识别(ASR) 主流模型 模型 厂商 WER(英文) WER(中文) 特点 Whisper 4 OpenAI 2.1% 3.5% 综合最强 Gemini Audio Google 3.5% 4.2% 多语言 Paraformer v3 阿里 - 2.8% 中文最佳 SenseVoice v3 阿里 3.2% 3.1% 情感识别 WeNet 3 出门问问 4.5% 4.1% 开源 Whisper 3 OpenAI 4.8% 6.2% 开源经典 中文ASR对比 在真实场景(会议、电话、播客)的中文识别: Paraformer v3: WER 2.8% — 中文ASR之王,对方言和口音适应性强 SenseVoice v3: WER 3.1% — 能同时识别语音内容情感 Whisper 4: WER 3.5% — 综合能力强 WeNet 3: WER 4.1% — 开源最佳 实时性对比 模型 延迟(ms) 流式支持 适用场景 Paraformer v3 150 ✓ 实时字幕 Whisper 4 streaming 300 ✓ 会议记录 Gemini Audio 200 ✓ 实时对话 SenseVoice v3 180 ✓ 情感分析 方言与口音 在方言识别上: ...

2026-07-02 · 2 min · 390 words · 硅基 AGI 探索者
LLM蒸馏技术

LLM蒸馏技术2026实践

为什么LLM需要蒸馏? 训练一个超大模型(如700B)然后部署它,成本极其高昂。知识蒸馏(Knowledge Distillation)提供了一条务实的路径:先用大模型(Teacher)的输出作为信号训练小模型(Student),让小模型在更小参数量下接近大模型的性能。 2026年,蒸馏已经成为大模型工程化的标准环节。DeepSeek-V3、Qwen-3等模型都大量使用了蒸馏技术,将超大模型的能力迁移到可部署的尺寸。 蒸馏的理论基础 软标签的信息优势 硬标签(one-hot)只包含"正确答案"的信息,而软标签(softmax概率分布)还包含"错误答案之间的关系"。例如,在分类"猫"时,软标签可能同时给出"狗"的概率0.1——这告诉Student模型"猫和狗在某种特征上是相似的"。 这种"暗知识"(Dark Knowledge)是蒸馏有效性的核心。Teacher模型的输出分布包含了其学到的类别间关系,这些信息在硬标签中完全丢失。 温度参数 温度T控制软标签的"软度": soft_label = softmax(logits / T) 高温使分布更平滑(暴露更多暗知识),低温使分布更尖锐(接近one-hot)。实践中T通常设置为2-10。 LLM蒸馏的主要方法 1. Logit级蒸馏 最经典的蒸馏方式——Student直接学习Teacher的输出概率分布: def logit_distillation_loss(student_logits, teacher_logits, labels, T=4.0, alpha=0.7): """ student_logits, teacher_logits: [batch, seq_len, vocab_size] labels: [batch, seq_len] T: 温度参数 alpha: 蒸馏损失权重 """ # 蒸馏损失:KL散度 student_log_probs = F.log_softmax(student_logits / T, dim=-1) teacher_probs = F.softmax(teacher_logits / T, dim=-1) distill_loss = F.kl_div( student_log_probs.reshape(-1, student_logits.size(-1)), teacher_probs.reshape(-1, teacher_logits.size(-1)), reduction='batchmean' ) * (T ** 2) # 梯度缩放补偿 # 任务损失:交叉熵 task_loss = F.cross_entropy( student_logits.reshape(-1, student_logits.size(-1)), labels.reshape(-1) ) return alpha * distill_loss + (1 - alpha) * task_loss 关键点: KL散度损失需要乘以 T² 来补偿温度对梯度的影响 alpha控制蒸馏与任务学习的平衡 需要Teacher和Student的词表对齐 2. 序列级蒸馏(Sequence-Level KD) 不让Student逐token模仿Teacher,而是让Student学习Teacher生成的完整序列。具体做法是先用Teacher生成大量数据,然后用这些数据训练Student: ...

2026-07-02 · 3 min · 438 words · 硅基 AGI 探索者
鲁ICP备2026018361号