知识全景图/ 软件工程与系统/ 人工智能全景图/ 张量、自动微分与计算图

张量、矩阵乘法、自动微分与计算图底层图谱

从 Tensor、Shape、Broadcast、MatMul、Operator、Computation Graph、Autograd、Backward Graph 到 Kernel:理解深度学习框架如何把数学变成可训练系统

阅读定位: 这一页放在 神经网络 / 深度学习 / 训练循环 之前,补最底层的“张量计算与自动求导”。 它不替代线性代数教材,也不展开 PyTorch / JAX 源码;目标是让你知道数据怎样变成张量,forward 怎样变成计算图,loss 怎样沿图反传,框架为什么能自动算梯度,以及这些机制怎样连接 GPU、optimizer、checkpoint 和训练稳定性。
一、从样本到可训练计算图
Raw Sample
文本 / 图像 / 表格
Tensor
shape / dtype / device
Operators
matmul / add / norm
Forward Graph
输出与 loss
Backward Graph
梯度责任链
Optimizer Step
参数更新
层级它回答什么常见对象出错信号
张量数据以什么形状、精度和设备进入计算shape、dtype、device、stride、contiguousshape mismatch、dtype 错误、CPU/GPU device 不一致
算子张量之间如何被变换matmul、add、softmax、layer norm、gather、scatter数值溢出、kernel 慢、broadcast 误用
计算图一次 forward 的依赖关系怎样被记录node、edge、activation、requires_grad梯度断开、显存暴涨、in-place 操作破坏图
自动微分框架如何按链式法则自动算梯度autograd、vjp、jvp、backward、grad_fngrad 为 None、梯度全零、梯度爆炸或 NaN
优化器梯度如何变成参数更新SGD、AdamW、weight decay、optimizer state参数不变、更新过大、checkpoint 恢复不一致
一句话:

深度学习框架最核心的魔法不是“会 AI”,而是把张量算子组织成可微计算图,并在 backward 时自动沿图计算每个参数该承担的梯度。

二、Tensor:AI 系统的统一数据容器
概念直觉在模型里的例子工程风险
Shape张量的维度结构[batch, seq, hidden][vocab, hidden]维度顺序错了,结果可能能跑但语义错
Dtype数值精度和存储格式FP32、BF16、FP16、FP8、INT8低精度可能溢出、下溢或损失关键差异
Device张量放在哪个计算设备上CPU、CUDA GPU、TPU、NPU跨设备拷贝会慢,设备不一致会直接报错
Stride / Layout内存中如何排列contiguous、channels-last、view / transpose看似无害的转置可能触发隐式拷贝或慢 kernel
Broadcast小张量按规则扩展参与运算bias 加到整批样本、mask 加到 attention logits误 broadcast 会悄悄把错误复制到整批数据
文本模型里的典型 shape
  • input_ids: [batch, seq]
  • embedding: [batch, seq, hidden]
  • logits: [batch, seq, vocab]
  • loss mask: [batch, seq]
图像模型里的典型 shape
  • image: [batch, channel, height, width]
  • patches: [batch, patch_count, hidden]
  • latent: [batch, channel, h, w]
  • mask: [batch, patch_count]
训练系统里的典型张量
  • 参数张量:权重和 bias
  • 激活张量:forward 中间结果
  • 梯度张量:loss 对参数的偏导
  • 优化器状态:Adam 的一阶 / 二阶动量
三、矩阵乘法:为什么深度学习和 GPU 绑定这么深
算子做什么为什么是核心继续关联
MatMul / GEMM矩阵乘矩阵或批量矩阵乘Linear 层、QKV 投影、MLP、输出头都依赖它AI Infra / GPUMLP / FFN
Elementwise逐元素加减乘除、激活函数看起来简单,但大量小算子会带来 kernel launch 开销kernel fusion、编译优化;SwiGLU 见 MLP / FFN
Reduction求和、均值、最大值、归一化统计loss、softmax、LayerNorm 都离不开它数值稳定、并行规约;LLM 里的归一化见 Norm / Residual
Gather / Scatter按索引读取或写回Embedding lookup、token 选择、稀疏更新内存访问不连续,性能可能受限
Softmax把 logits 变成概率分布attention 权重和 next-token 输出都依赖它Logits / Softmax概率 / 熵 / 校准

为什么很多优化都围绕 MatMul

大模型的大部分 FLOPs 花在矩阵乘法上。GPU、Tensor Core、低精度、FlashAttention、量化、kernel fusion 和编译器优化,本质上都在让张量算子更贴近硬件高效路径。

四、计算图:一次 forward 留下的依赖账本
图里的东西含义为什么必须记录常见坑
Node一次算子调用或中间张量backward 要知道梯度从哪里来、往哪里传动态图里每次 forward 图都可能不同
Edge张量之间的依赖关系决定链式法则的传递路径detach 会切断边,梯度就过不去了
Activationforward 中间结果很多 backward 公式需要用 forward 值保存太多会吃显存,重计算会吃时间
Parameter需要被优化器更新的叶子张量只有它们通常会累积梯度并被 step 更新误冻结或没注册到 optimizer 会导致训不动
Loss标量目标backward 通常从这个标量开始loss reduction、mask 和 label 对齐错误会污染梯度
动态图
PyTorch 的直觉更接近动态图:Python 代码跑到哪里,图就按实际执行路径搭到哪里。调试友好,控制流自然,但优化器和编译器要额外工作。
静态图 / 编译图
TensorFlow 早期、JAX、XLA、Torch Compile 更强调先捕获或编译图,再整体优化。性能更可控,但对 shape、控制流和调试有更强约束。
动态图和编译不是对立
现代框架常常先保留动态图开发体验,再通过 tracing、graph capture、AOT 编译或 kernel fusion 把热点路径优化掉。
五、自动微分:框架如何自动算梯度
概念它是什么在训练里的作用工程观察
Chain Rule复合函数求导的链式法则把输出误差逐层传回输入和参数深层模型就是很长的链式法则账本
Reverse-mode AD从输出往输入反向累积梯度深度学习训练最常用,因为一个标量 loss 对大量参数求导更高效需要保存 forward 中间值,所以吃显存
Forward-mode AD从输入方向传播导数适合输入维度小、输出维度大或某些高级微分任务JVP、灵敏度分析、部分二阶方法会用到
VJPVector-Jacobian Product反向模式常见形式,不显式构造巨大 Jacobian高效是因为只算需要的乘积
Gradient Accumulation多次 backward 累积梯度再 step模拟更大 batch,缓解显存不足忘记清梯度会让更新混入旧 batch

为什么不直接算完整 Jacobian

大模型参数可能有几十亿甚至更多,完整 Jacobian 极其巨大。自动微分通常不会显式构造它,而是沿计算图做局部梯度规则和向量乘积,把需要的梯度高效传回来。

六、一次 backward 的真实账本
步骤发生了什么要看什么信号常见问题
1. 从 loss 开始标量 loss 作为反向传播起点loss 是否包含正确 mask、label、reductionpadding 参与 loss,模型学错目标
2. 沿图反传每个算子调用自己的 backward 规则grad_fn、梯度路径是否存在detach、in-place、no_grad 切断图
3. 累积到参数叶子参数的 .grad 被填充或累加grad norm、None / zero / NaN参数没有 requires_grad 或没进 optimizer
4. 优化器读取梯度AdamW 等按梯度和状态计算更新update norm、学习率、weight decay学习率过大、状态恢复错误
5. 清理旧梯度下一轮前清空或置 Nonezero_grad 是否在正确位置旧梯度累积导致训练异常
调试原则:

训练 loss 不动时,不要第一时间换模型。先确认数据样本、shape、loss mask、requires_grad、grad norm、参数是否更新、optimizer 是否包含目标参数。

七、显存为什么会被计算图吃掉
显存对象为什么存在如何降低代价
参数模型需要常驻权重量化、分片、LoRA、小模型可能牺牲质量或增加通信
激活backward 需要 forward 中间值activation checkpointing、重计算、短序列省显存但增加计算时间
梯度每个可训练参数都要有梯度冻结层、LoRA、ZeRO/FSDP可训练能力或通信模式变化
优化器状态AdamW 等需要动量和二阶统计低精度 optimizer、分片、CPU offload实现复杂、吞吐下降
临时张量算子执行中间缓存和 workspacekernel fusion、编译优化、避免隐式拷贝调试和兼容成本

训练和推理的图不一样

训练必须保留大量中间信息用于 backward;推理通常不需要梯度,可以用 no_grad / inference mode 省掉反向图。很多“为什么训练这么吃显存”的答案,就藏在计算图和激活保存里。

八、框架、编译器与 Kernel:从图到硬件执行
层级做什么常见组件你该关心什么
前端框架提供张量 API、模块、自动微分和训练循环PyTorch、JAX、TensorFlow开发体验、生态、调试和分布式支持
图捕获 / 编译把 Python 执行路径转成可优化图Torch Compile、JAX jit、XLA、ONNXshape 稳定性、控制流、编译耗时
Kernel真正跑在 GPU / 加速器上的低层程序CUDA kernel、Triton、cuDNN、FlashAttention吞吐、显存访问、融合和硬件兼容
Runtime调度 kernel、内存、stream 和通信CUDA runtime、NCCL、ROCm、XLA runtime同步点、通信等待、内存碎片
Profiler观察时间和显存花在哪里PyTorch Profiler、Nsight、TensorBoard先定位瓶颈,再做优化
实用判断:

模型代码慢,不一定是算法差;可能是张量布局、隐式拷贝、小算子太碎、shape 动态、kernel 没融合、CPU 数据加载或 GPU 通信在拖后腿。

训练计算图 Trace 证据包

训练问题要能回放到一次 forward / backward 的张量、图、梯度、kernel 和显存账本,否则 NaN、OOM、慢训练和错 loss 都会变成猜谜。

证据节点必须记录字段用来排查什么
graph_rungraph_run_id、framework_version、compile_mode、model_config_hash、input_batch_id同一训练图是否可复现,编译和动态图路径是否一致
tensor_tracetensor_name、shape、dtype、device、layout、requires_gradshape mismatch、隐式拷贝、精度路径和参数冻结问题
backward_traceloss_value、grad_norm、loss_scale、activation_checkpointing、anomaly_opNaN / Inf、梯度爆炸、detach 和 checkpointing 副作用
runtime_snapshotkernel_trace_id、compiler_version、peak_memory、memory_fragmentation、sync_point训练慢、显存暴涨和 GPU 利用率低的真实瓶颈
九、常见错误与排查入口
症状优先怀疑先做什么继续下钻
shape mismatchbatch / seq / hidden / vocab 维度顺序错打印每一步 shape,给关键张量命名Tokenizer / 词表
loss 能算但任务全错label shift、mask、broadcast 或 reduction 错拿一个样本手动对齐输入、标签和 loss训练数据到模型能力
grad 为 None图被 detach、参数未注册、requires_grad 关闭检查 grad_fn、requires_grad、optimizer param groups优化器 / Loss / 稳定性
显存突然暴涨保留了多轮图、未 detach、序列长度异常检查列表缓存、日志保存 tensor、activation 数量AI Infra / GPU
NaN / Inf低精度溢出、softmax 不稳定、梯度爆炸开 anomaly detection、看异常 batch 和 gradient norm训练稳定性
GPU 利用率低数据加载、CPU/GPU 拷贝、小 kernel、同步点用 profiler 看时间花在哪里AI Infra / GPU
十、从这张图接回 AI 主干
AI 全景 张量 / 自动微分 / 计算图 神经网络 / 训练循环 优化器 / Loss / 稳定性 训练数据到模型能力 AI Infra / GPU 参数 / 权重 / Checkpoint

这张图在主干里的位置

神经网络页解释“为什么模型能训练”,优化器页解释“怎样稳定训练”,训练生命周期页解释“样本如何变成能力”。这一页解释这些东西下面的共同机器:张量、算子、计算图和自动微分。理解它之后,再看 shape、loss、gradient、GPU 显存和训练崩坏,会少很多玄学。