ai-infra-interview-305

第 60 题:如何实现自定义的分布式优化器?继承torch.optim.Optimizer的注意事项?

题目

如何实现自定义的分布式优化器?继承torch.optim.Optimizer的注意事项?


完整讲解

一、继承 Optimizer 要做什么?

torch.optim.Optimizer 要求子类:

分布式下:梯度通常已由 DDP/FSDP 等做 all-reduce,每个 rank 上的 param.grad 已是「全局梯度」;自定义优化器只需在 本 rank 上按梯度更新本 rank 的参数(FSDP 下参数是分片的,每卡只更新自己的分片)。所以「分布式」部分多数由 DDP/FSDP 解决,优化器侧主要是正确读 grad、写 data


二、注意事项


三、小结


面试要点


记忆要点

  1. 必须:super().init、实现 step;step 里用 param.grad 更新 param.data。
  2. 分布式由 DDP/FSDP 管梯度;优化器管本地更新;FSDP 状态随分片。
  3. 处理 None grad、设备/dtype、与 scaler 顺序。
返回模块 返回总览