大模型微调与部署实践
从模型下载、云算力准备、数据处理到训练监控与部署的实践流程。
一、下载方式
1.1 ModelScope社区
- 命令行工具
conda init #第一次进入服务器进行初始化conda
conda create -n evn_name python=版本 #为项目创建虚拟环境
conda activate evn_name
pip install modelscope #下载modelscope包 方便下载model社区模型
#从model社区下载大模型到指定目录中 这里一autodl算力云为例子
modelscope download --model Qwen/Qwen2.5-7B-Instruct --local_dir "/root/autodl-tmp/models"
modelscope download --model Qwen/Qwen2.5-7B-Instruct --local_dir "D:/acode/models/"
- SDK下载
1.2 huggingface社区
- git命令
git clone https://huggingface.co/模型路径
git clone https://huggingface.co/gpt2
git clone https://用户名:令牌@huggingface.co/模型路径
- transforms库 (python)
from transformers import AutoModel, AutoTokenizer
model = AutoModel.from_pretrained("bert-base-uncased")
tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")
- huggingface_hub库(Python)
from huggingface_hub import snapshot_download
model_id = "模型名称或路径"
local_dir = "./local_model"
snapshot_download(repo_id=model_id, local_dir=local_dir,local-dir-use-symlinks=false)
- huggingface-cli命令行工具
安装工具和下载模型到指定目录
pip install huggingface_hub
huggingface-cli download 模型名称 --local-dir ./local_model
二、租赁云算力
2.1 AutoDL
/ 系统盘
/root/autodl-tmp 数据盘
conda init
pip install modelscope
cd /root/autodl-tmp
mkdir -p conda/envs
cd conda
mkdir pkgs
conda config --add envs_dirs /root/autodl-tmp/conda/envs
conda config --add pkgs_dirs /root/autodl-tmp/conda/pkgs
conda config --show
注 :vscode要免密autodl云算力,需要**/.ssh/目录下创建authorized_keys** 并且复制在id_rsa.pub里的内容
id_rsa.pub的产生
ssh-keygen -t rsa -b 4096
#也可以在本地创建上传 然会转移搭配/.ssh/
mv authorized_keys /root/.ssh/
三、微调过程
3.1 明确目标与任务定义
- 我的目标是什么?
- 领域适应:让通用模型(如 LLaMA, Qwen)掌握特定领域(如医疗、法律、金融)的知识。
- 任务指令微调:让模型学会遵循人类指令,完成特定任务(如文本摘要、情感分析、邮件撰写)。
- 风格迁移:让模型模仿特定的写作或对话风格(如莎士比亚文体、客服口吻)。
- 解决“知识截止”问题:向模型注入最新的、它训练时未见过的信息。
- 我的任务类型是什么?
- 文本分类?问答?文本生成?对话?不同的任务决定了你后续数据格式和模型的选择。
- 基线模型性能如何?
- 先用你的问题去测试一下未经微调的基座模型,了解它的“原始”表现。这可以作为后续效果的对比基准。
3.2 数据准备与处理
核心原则:垃圾进,垃圾出。
-
数据收集:
- 来源:内部数据库、公开数据集、人工撰写、利用大模型(如GPT-4)合成。
- 数量:对于参数高效微调(如LoRA),几百到几千条高质量样本可能就足够了。全参数微调则需要更多数据。
-
数据清洗与格式化:
-
清洗:去除无关字符、纠正错别字、处理缺失值、去重。
-
格式化:将数据组织成模型需要的格式。对于指令微调,通常采用以下结构:
json
{ "instruction": "翻译以下句子成英文。", "input": "今天天气真好。", "output": "The weather is really nice today." } -
划分:将数据划分为训练集、验证集(必要时还有测试集)。通常按 8:1:1 或 9:1 的比例。
-
-
Tokenization与序列长度:
- 使用与基座模型对应的分词器。
- 确定一个合适的最大序列长度。太短会截断信息,太长会浪费计算资源。可以统计你数据长度的分布来决定。
3.3 模型与环境准备
- 选择基座模型:
- 开源模型:如 LLaMA 3、Qwen、ChatGLM、Baichuan 等。它们是微调的常见起点。
- 考虑因素:模型能力、许可证、参数量(7B, 13B, 70B?)、你的算力。
- 选择微调方法:
- 全参数微调:更新模型的所有参数。
- 优点:潜力大,可能达到最佳性能。
- 缺点:计算成本、显存消耗极高,容易过拟合。
- 参数高效微调:这是当前的主流和推荐起点。
- LoRA: 通过引入低秩适配器来间接训练,极大减少显存占用和训练时间,效果接近全参数微调。
- QLoRA: LoRA的量化版本,能让你在单张消费级显卡(如24GB RTX 4090)上微调70B的模型,是个人研究者的福音。
- P-Tuning、Prefix-Tuning 等。
- 全参数微调:更新模型的所有参数。
- 配置训练环境:
- 硬件:GPU是关键。显存越大越好。根据模型大小选择:
- 7B模型:至少16GB,推荐24GB。
- 13B模型:至少24GB。
- 70B模型:需要多卡或使用QLoRA。
- 软件框架:
- Transformers: Hugging Face 的核心库,提供了大量预训练模型和工具。
- PEFT: 与 Transformers 完美配合,轻松实现 LoRA、P-Tuning 等高效微调方法。
- TRL: 简化RLHF(人类反馈强化学习)的过程,也提供了方便的SFTTrainer。
- Accelerate: 让代码轻松运行在单机多卡或多机上。
- Bitsandbytes: 实现量化(如4-bit/8-bit训练),是QLoRA的基石。
- 硬件:GPU是关键。显存越大越好。根据模型大小选择:
3.4 训练执行与监控
- 设置超参数:
- 学习率:LoRA通常设置得稍大(如 1e-4 到 5e-4),全参数微调则要小(如 1e-5 到 5e-5)。
- 训练轮数
- 批大小:在显存允许的情况下尽可能大。
- 优化器:AdamW是常见选择。
- 开始训练与监控:
- 使用
TrainingArguments配置参数,然后启动训练。 - 使用日志和可视化工具:Weights & Biases 或 TensorBoard 来实时监控损失函数和评估指标。重点关注训练损失和验证损失的变化,防止过拟合。
- 使用
3.5 模型评估与部署
- 全面评估:
- 定量评估:在预留的测试集上计算准确率、BLEU、Rouge等客观指标。
- 定性评估:更为重要! 人工检查模型在多样化的输入上的输出结果,看它是否真的“智能”和“有用”。
- 模型保存与合并:
- PEFT方法(如LoRA)训练出来的是适配器权重,可以单独保存(很小)。
- 可以使用
merge_and_unload方法将适配器与基座模型合并,得到一个完整的、可独立部署的模型。
- 部署与应用:
- 使用 FastAPI、Gradio 或 Streamlit 快速构建Web Demo。
- 对于生产环境,可以考虑 vLLM、TGI 等高性能推理框架。
给你的实践建议
- 从简单开始:不要一上来就挑战最难的任务和最大的模型。
- 推荐路径:选择一个你熟悉的领域,用 Qwen-7B 或 LLaMA-3-8B 作为基座模型,使用 QLoRA 技术,在几百条指令数据上进行指令微调。这是最快看到成果、积累信心的方式。
- 利用现有工具和脚本:
- 社区是宝藏:遇到问题时,去 Hugging Face Forum、GitHub Issues 和相关Discord频道寻找答案和讨论。
可视化微调过程工具
TensorBoard
首先结束默认启动的TensorBoard进程,执行命令:
ps -ef | grep tensorboard | awk '{print $2}' | xargs kill -9
运行TensorBoard
tensorboard --port 6007 --logdir path
tensorboard --logdir=output/hotel_qwen2-20251013-195029 --bind_all
qwen-fraud-detection-2025-10-16_16-26-15