ai-infra-interview-305

第 1 题:PyTorch的Autograd机制是如何实现的?解释torch.autograd.Function的工作原理

题目

PyTorch的Autograd机制是如何实现的?解释torch.autograd.Function的工作原理


完整讲解

一、Autograd 在做什么?

Autograd 是 PyTorch 的自动求导引擎:根据前向计算自动构建计算图,在 backward() 时按图反传梯度,无需手写导数。核心思想:每个参与运算的 Tensorrequires_grad=True 时会被记录在图中,算子成为图的边;反向时从 loss 的 grad_fn 沿边回溯,对每个节点执行其 grad_fn 中定义的梯度公式。

为什么重要?loss.backward() 就能训练,背后是 DAG、动态图、按需求导;面试常问「和 TF 的静态图区别」——PyTorch 是 define-by-run,每次前向现建图,灵活但图优化空间小。


二、计算图与梯度传播


三、torch.autograd.Function 是什么?

Function 是 Autograd 中一个可微算子的抽象:既负责前向forward),又负责反向backward)。用户或 C++ 扩展实现一个子类,注册到 Autograd 后,前向时建图、反向时按你写的梯度公式算。

自定义算子(包括 C++/CUDA)若要参与自动求导,就要实现一个 Function,在 forward 里调你的 kernel,在 backward 里写梯度公式并再调一次梯度 kernel。


四、与 torch.nn.Module 的区别

面试可一句话区分:Module 管「有什么参数、怎么组织」,Function 管「这一步步前向怎么算、反向梯度怎么传」。


面试要点


记忆要点

  1. Autograd = 前向建 DAG(Tensor + grad_fn),backward 从 loss 沿图反传,梯度在分支处累加。
  2. Function = 一个可微算子:forward(ctx, *args) + backward(ctx, grad_output);用 apply 调用以挂上 grad_fn。
  3. 自定义带梯度的算子 = 实现 Function,forward 里调 kernel、backward 里写梯度公式。
  4. Module 管参数和结构,Function 管单步前向/反向;二者配合构成训练图。
返回模块 返回总览