transformers流程
2026/7/30 14:48:03 网站建设 项目流程

下面分两大完整流程:
流程 1:最简单场景 —— 只用现成 Transformer 模型做推理预测(只调用接口,最少代码)
流程 2:完整工程流程 ——数据集 + 微调训练 + 验证 + 推理落地(工业完整全链路,绝大多数研发用这套)
全程统一:所有进出模型的数据都是 PyTorch 张量,把每一步 Python 做什么、对应代码模块、张量流向拆解得清清楚楚。
前置统一依赖
所有代码最开头必导入固定包,这是基础:
python
运行
import torch
from torch.utils.data import Dataset, DataLoader
from transformers import AutoTokenizer, AutoModelForSequenceClassification
流程一:极简推理全步骤(无训练,拿来即用)
适合:用现成大模型做翻译、分类、特征提取,不训练、不改模型。一共 6 步。
环境准备:安装 torch、transformers,导入依赖包。
加载工具:自动下载预训练权重 + 配套分词器(AutoModel/AutoTokenizer)。
分词器作用:自然语言字符串 → 纯数字数组。
原始文本输入,调用 tokenizer 编码:
return_tensors=“pt” 直接输出 PyTorch 张量(input_ids、attention_mask 都是张量)。
张量搬运:按需把张量挪到 GPU(.to (device))加速。
模型前向计算:把张量字典喂进 model,模型内部完成多头注意力、Encoder 全量计算,输出新张量。
加 with torch.no_grad () 关闭梯度,节省显存、提速。
后处理:
分类:对输出张量做 argmax 拿到类别;
生成类(GPT):张量转回文字;
特征提取:直接拿 hidden_state 张量使用。
极简链路总结:文字 → 分词器 → 张量 → 模型计算 → 输出张量 → 转回可读结果
全程不需要写网络结构、不需要写反向传播。
流程二:完整全链路(训练微调 + 验证 + 保存 + 推理,最常用全流程)
一共 11 个标准大步骤,每个步骤写明 Python 做什么、张量如何流转、哪部分是 transformers、哪部分是手写 PyTorch。
步骤 1:环境初始化、硬件配置
手写 Python 代码:
判断设备:cuda 有 GPU 就用 GPU,否则 CPU;定义 device。
导入所有依赖:torch、数据集工具、transformers 工具。
无张量,只是环境配置。
步骤 2:加载预训练模型与分词器(调用 transformers 接口)
python
运行
tokenizer = AutoTokenizer.from_pretrained(“bert-base”)
model = AutoModelForSequenceClassification.from_pretrained(“bert-base”, num_labels=2)
model = model.to(device) # 模型整体搬到GPU
网络主干(Transformer Encoder、多头注意力、LN、FFN)全部封装,不用手写;
只需要你指定分类类别数,其余结构黑盒调用。
步骤 3:自定义数据集(必须手写 Python,transformers 不提供读数据)
自建 Python 类继承 torch Dataset;
手写代码读取本地文件 csv/txt/json,加载原始文本 + 标签;
__getitem__内部:调用分词器把单条文本转为数字数组;
返回编码数组 + 标签,后续会整体拼成张量。
核心:数据读取、业务清洗全部手写;分词依旧调用 transformers 工具。
步骤 4:构建 DataLoader 批次加载器(原生 PyTorch 手写)
手写代码:
划分训练集、验证集;
用 DataLoader 打包,设置 batch 批次大小、shuffle 打乱;
DataLoader 自动把一批多条数据堆叠成批量张量。
关键点:进入模型的都是批量四维 / 三维张量,分批送入 GPU,避免一次性显存爆炸。
步骤 5:定义优化器、训练超参(PyTorch 手写,和 transformers 无关)
手写 Python:
设定学习率、训练轮数 epoch;
选择优化器 AdamW,绑定模型所有可训练参数;
python
运行
optimizer = torch.optim.AdamW(model.parameters(), lr=2e-5)
可训练参数本质都是模型内部多维张量,requires_grad=True;训练靠优化器更新张量数值。
步骤 6:循环训练总框架(双层循环手写,整个训练逻辑核心)
外层循环:遍历每一轮 epoch
内层循环:遍历 DataLoader 每一个 batch 批次,逐批训练。
单批次内部固定 7 小步(完整梯度闭环):
取出批次字典:input_ids、mask、labels,全部是张量;
张量搬运到 GPU:batch = {k:v.to (device) for k,v in batch.items ()};
梯度清零:optimizer.zero_grad (),清空上一轮梯度;
前向传播:将张量送入 model,模型自动计算预测值 + loss 损失值(loss 是 0 维张量);
反向传播:loss.backward (),整条 Transformer 链路自动求梯度,所有参数张量带上梯度;
梯度优化:optimizer.step (),自动修改模型权重张量,完成参数优化;
记录 loss,打印日志。
这一步是 PyTorch 自动微分的完整闭环,transformers 只提供网络,训练循环全手写。
步骤 7:每轮结束跑验证集(手写 Python 评估)
model.eval () 开启评估模式;
with torch.no_grad () 禁止计算梯度,只做前向;
遍历验证集所有 batch,张量进模型得到预测张量;
手写代码统计:正确率、精确率等指标;
对比训练 loss 和验证 loss,判断过拟合。
步骤 8:模型保存(二选一)
调用 transformers 自带 save_pretrained:保存模型权重 + 分词器整套文件,后续可以直接重载;
原生 torch.save:只存权重张量参数。
步骤 9:训练结束,模型重载(推理准备)
需要再次调用 from_pretrained 读取本地保存的权重,把训练好的权重张量重新加载进网络。
步骤 10:线上推理(复用流程一逻辑)
单条文本 → tokenizer 编码成张量 → GPU 前向推理 → 输出张量解析成业务结果。
训练的全部目的,就是让模型权重张量被优化到最优,推理时直接用这批最优张量。
步骤 11(可选工程补充,全部手写 Python)
按需额外写代码:
张量精度转换:FP16 半精度、INT8 量化,降低硬件开销;
模型导出 ONNX:把 Transformer 网络 + 张量流转固化,适配 RU / 嵌入式部署;
多卡分布式训练、批量并发推理;
自定义注意力、修改 Transformer 层:手写新的 Attention 层替换原生代码。
按「张量流转」重新极简串一遍全链路
原始文字文件 → 清洗 (Python 手写) → 分词转张量 (transformers) → 分批批量张量 (PyTorch) → 送入 Transformer 网络 (transformers 封装)
训练阶段:张量前向算 loss → loss 反向求梯度 → 更新权重张量 (PyTorch 手写循环)
验证:张量前向算指标,不更新权重
最终:固化最优权重张量,推理时输入新张量,输出结果
区分清楚:哪块是调用接口,哪块必须手写代码
表格
模块 实现方 是否手写代码 张量角色
Transformer 主干(注意力、Encoder) transformers 内部 不用写,调用 权重是张量,输入输出是张量
分词文字转数字 transformers 调用少量代码 输出网络输入张量
读文件、数据清洗、数据集 自己 Python 必须手写 组装成张量
训练循环、优化器、反向传播 PyTorch 原生 必须手写 依靠张量梯度完成优化
推理、张量后处理解析结果 混合 少量手写 张量转业务结果
量化、导出、部署适配 自己手写 按需手写 张量格式改造适配硬件

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询