在学习深度学习时,“模型架构”和“训练框架”经常一起出现,但它们描述的对象并不相同。模型架构关注模型内部如何组织,训练框架关注模型如何被开发、训练和运行。
模型架构:模型内部怎么搭
模型架构指模型内部各个模块的设计和组织方式,回答的是:
模型由哪些模块组成?这些模块如何连接和协作?
例如,一个 Transformer 模型可能由以下模块组成:
输入
→ Embedding
→ 多头注意力
→ 前馈网络
→ 残差连接与归一化
→ 输出层
这里描述的是模型本身的结构设计,也就是各个模块怎样组合成一个可以完成任务的模型。
训练框架:模型怎么被训练
训练框架是一套用于开发、训练、验证和保存深度学习模型的工具与运行机制,回答的是:
如何加载数据?如何计算损失?如何反向传播?如何更新参数?如何验证和保存模型?
一次典型的训练流程可以表示为:
加载数据
→ 前向计算
→ 计算损失
→ 反向传播
→ 更新参数
→ 验证模型
→ 保存模型
因此,训练框架组织的不只是模型结构,还包括数据、计算、优化和实验管理等环节。
以 PyTorch 为例
使用 PyTorch 时,通常从导入它提供的模块开始:
import torch
import torch.nn as nn
from torch.utils.data import Dataset, DataLoader
PyTorch 已经提供了许多可以直接复用的能力:
Dataset、DataLoader:加载和组织数据nn.Module:定义模型模块nn.Linear、nn.Conv2d:使用现成的网络层nn.CrossEntropyLoss:计算损失函数torch.autograd:自动计算梯度torch.optim:更新模型参数torch.cuda:使用 GPU
最基本的训练循环大致如下:
for x, y in dataloader:
pred = model(x) # 前向传播
loss = loss_fn(pred, y) # 计算损失
optimizer.zero_grad()
loss.backward() # 反向传播
optimizer.step() # 更新参数
如果框架中没有需要的模块,也可以自己编写,再和 PyTorch 的其他组件组合起来:
class MyLayer(nn.Module):
def __init__(self):
super().__init__()
self.linear = nn.Linear(128, 64)
def forward(self, x):
return self.linear(x)
这就是在 PyTorch 提供的基础能力和规则之上,搭建自己的模型与训练流程。
框架不只是“零件仓库”
把框架理解成一组现成零件是一个很好的开始,但框架通常还会规定一套接口和运行规则。
例如在 PyTorch 中:
- 模型通常继承
nn.Module - 模型的计算过程写在
forward中 - 参数通过自动求导获得梯度
- 优化器负责更新参数
- 数据通过
Dataset和DataLoader组织
这些约定让不同模块能够协同工作,也让框架可以接管 GPU 加速、自动求导、混合精度和分布式训练等底层工作。因此,框架既提供“零件”,也提供连接和运行这些零件的机制。
不同框架处于不同层次
深度学习工具并不一定处于同一层级,可以粗略地表示为:
PyTorch
↓
Transformers、DeepSpeed、Lightning、ms-swift
↓
自己的模型、数据和训练任务
PyTorch 更偏底层,提供张量计算、自动求导、网络层和优化器等基础能力。
如果这里的 SWIFT 指大模型训练中的 ms-swift,它通常建立在 PyTorch、Transformers 等基础工具之上,进一步封装模型微调、数据处理、训练配置、验证、保存和分布式训练等流程。它和 PyTorch 都可以被称为框架,但关注的层次不同。
“用某某框架跑任务”是什么意思
“用某某框架跑我们的任务”,核心意思是:
复用框架已经提供的能力,遵循它的接口和运行规则,组合已有模块,并按需补充自定义逻辑,从而完成任务。
也就是说,我们不必重复实现:
- 数据加载
- 训练循环
- 反向传播
- 参数更新
- 验证和模型保存
如果框架没有完全满足需求,仍然可以自己编写数据处理、模型模块或损失函数,再把它们接入框架。使用框架并不意味着只能使用现成代码,而是在已有基础设施上完成自己的任务。
总结
可以用建筑来类比:
- 模型架构:建筑的结构设计,决定柱子、梁和楼板如何连接
- 训练框架:提供材料、工具、施工规范和施工流程
- 训练任务:要建造的具体建筑
- 自定义代码:针对特殊需求设计的新部件
因此:
模型架构是模型内部的结构组织方式;训练框架是完成模型开发和训练任务的基础设施与运行规则。用框架跑任务,就是站在已有能力之上完成工作,避免重复造轮子,同时保留根据需求扩展的自由。