第 1 课 · 动手学大模型(上海交大)
Fine-tuning and Deployment
微调与部署:把预训练模型跑成一个 Demo
这一章是整个系列的地基。目标不是讲清 Transformer 的每一层,而是把「选模型—在自己的任务上微调—部署成别人能点开的 Demo」这条链路完整走一遍。教程用的例子是文本分类,具体任务是虚假新闻/灾情推文检测,数据取自 Kaggle 的 nlp-getting-started 竞赛。
学习目标
- 熟悉 Hugging Face Transformers 工具包的基本用法,知道去哪里找官方 example。
- 能完成预训练模型的微调与推理,理解「解耦可定制版本」和「默认集成版本」两条路的取舍。
- 能用 Gradio Spaces 把训练好的模型部署成在线 Demo。
- 了解不同类型预训练模型的选型场景。
核心概念
教程给了两份工程包。解耦可定制版本把关键模块拆成三个文件:utils_data.py 负责数据加载和处理,modeling_bert.py 负责模型结构,main.py 负责训练、验证、预测。好处是每一步都看得见,想换数据格式、换评价指标、改分类头都改得动。默认集成版本基于官方的 run_classification.py,代码更完整但也更复杂,一般靠超参数调用,适合已经理解流程之后的规模化实验。
先跑解耦版本再看集成版本,是这一章隐含的教学顺序:先建立心智模型,再享受封装带来的便利。
实践步骤
- 用 conda 建独立环境:
conda create -n llm python=3.9,然后conda activate llm。 pip install transformers。装requirements.txt前先把里面自动带的 torch 删掉,再用conda install pytorch单独装,否则国内源会默默给你装成 CPU 版本,GPU 用不上。- 下载数据,按解耦版本的格式组织好,跑通训练、验证、预测一条龙。
- 换成集成版本,用
google-bert/bert-base-uncased做基线,观察指标差异。 - 训练完成后新建一个 Gradio Space,把
app.py、requirements.txt和模型权重传上去。
常见误区
- 把卡住当成代码错误。 教程专门提示:下载模型报 Network is unreachable、或者加载完数据后卡在 connection,多半是网络问题而不是 bug。前者手动下载模型到本地,后者把 evaluate 包整个下下来,再用
--metric_name指向本地指标路径。 - 用国内源装 PyTorch。 镜像源会选中 CPU 版本,训练时才发现没走 GPU。
- 跳过部署。 部署是这一章的另一半:模型只有被别人点开用过,才知道输入输出的边界在哪。
动手练习
先用解耦版本训练一个二分类模型并记录开发集指标;再用集成版本以同样的预训练权重和超参跑一遍,对比两次结果和你花掉的时间。然后把解耦版本的分类头从单层改成两层加 Dropout,看指标怎么动。最后把表现较好的那个部署到 Gradio Spaces,把链接发给一位同学,请他输入三条你没见过的推文。
要点回顾
微调不是玄学,是一条可复现的流水线:环境、数据、模型、训练、评估、部署。解耦版本用来理解,集成版本用来提速。绝大多数「跑不起来」的问题出在环境和网络,而不是算法本身,先按教程列出的排错清单过一遍再怀疑代码。
参考来源
- 上海交通大学《动手学大模型》系列编程实践教程,第一章「微调与部署」:documents/chapter1,核验日期:2026-09-06。