大模型微调与部署实践

从模型下载、云算力准备、数据处理到训练监控与部署的实践流程。

一、下载方式

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 明确目标与任务定义

  1. 我的目标是什么?
    • 领域适应:让通用模型(如 LLaMA, Qwen)掌握特定领域(如医疗、法律、金融)的知识。
    • 任务指令微调:让模型学会遵循人类指令,完成特定任务(如文本摘要、情感分析、邮件撰写)。
    • 风格迁移:让模型模仿特定的写作或对话风格(如莎士比亚文体、客服口吻)。
    • 解决“知识截止”问题:向模型注入最新的、它训练时未见过的信息。
  2. 我的任务类型是什么?
    • 文本分类?问答?文本生成?对话?不同的任务决定了你后续数据格式和模型的选择。
  3. 基线模型性能如何?
    • 先用你的问题去测试一下未经微调的基座模型,了解它的“原始”表现。这可以作为后续效果的对比基准。

3.2 数据准备与处理

核心原则:垃圾进,垃圾出。

  1. 数据收集:

    • 来源:内部数据库、公开数据集、人工撰写、利用大模型(如GPT-4)合成。
    • 数量:对于参数高效微调(如LoRA),几百到几千条高质量样本可能就足够了。全参数微调则需要更多数据。
  2. 数据清洗与格式化:

    • 清洗:去除无关字符、纠正错别字、处理缺失值、去重。

    • 格式化:将数据组织成模型需要的格式。对于指令微调,通常采用以下结构:

      json

      {
        "instruction": "翻译以下句子成英文。",
        "input": "今天天气真好。",
        "output": "The weather is really nice today."
      }
    • 划分:将数据划分为训练集、验证集(必要时还有测试集)。通常按 8:1:1 或 9:1 的比例。

  3. Tokenization与序列长度:

    • 使用与基座模型对应的分词器。
    • 确定一个合适的最大序列长度。太短会截断信息,太长会浪费计算资源。可以统计你数据长度的分布来决定。

3.3 模型与环境准备

  1. 选择基座模型:
    • 开源模型:如 LLaMA 3、Qwen、ChatGLM、Baichuan 等。它们是微调的常见起点。
    • 考虑因素:模型能力、许可证、参数量(7B, 13B, 70B?)、你的算力。
  2. 选择微调方法:
    • 全参数微调:更新模型的所有参数。
      • 优点:潜力大,可能达到最佳性能。
      • 缺点:计算成本、显存消耗极高,容易过拟合。
    • 参数高效微调:这是当前的主流和推荐起点。
      • LoRA: 通过引入低秩适配器来间接训练,极大减少显存占用和训练时间,效果接近全参数微调。
      • QLoRA: LoRA的量化版本,能让你在单张消费级显卡(如24GB RTX 4090)上微调70B的模型,是个人研究者的福音。
      • P-Tuning、Prefix-Tuning 等。
  3. 配置训练环境:
    • 硬件: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的基石。

3.4 训练执行与监控

  1. 设置超参数:
    • 学习率:LoRA通常设置得稍大(如 1e-4 到 5e-4),全参数微调则要小(如 1e-5 到 5e-5)。
    • 训练轮数
    • 批大小:在显存允许的情况下尽可能大。
    • 优化器:AdamW是常见选择。
  2. 开始训练与监控:
    • 使用 TrainingArguments 配置参数,然后启动训练。
    • 使用日志和可视化工具:Weights & Biases 或 TensorBoard 来实时监控损失函数和评估指标。重点关注训练损失和验证损失的变化,防止过拟合。

3.5 模型评估与部署

  1. 全面评估:
    • 定量评估:在预留的测试集上计算准确率、BLEU、Rouge等客观指标。
    • 定性评估:更为重要! 人工检查模型在多样化的输入上的输出结果,看它是否真的“智能”和“有用”。
  2. 模型保存与合并:
    • PEFT方法(如LoRA)训练出来的是适配器权重,可以单独保存(很小)。
    • 可以使用 merge_and_unload 方法将适配器与基座模型合并,得到一个完整的、可独立部署的模型。
  3. 部署与应用:
    • 使用 FastAPI、Gradio 或 Streamlit 快速构建Web Demo。
    • 对于生产环境,可以考虑 vLLM、TGI 等高性能推理框架。

给你的实践建议

  • 从简单开始:不要一上来就挑战最难的任务和最大的模型。
    • 推荐路径:选择一个你熟悉的领域,用 Qwen-7B 或 LLaMA-3-8B 作为基座模型,使用 QLoRA 技术,在几百条指令数据上进行指令微调。这是最快看到成果、积累信心的方式。
  • 利用现有工具和脚本:
    • Hugging Face 官网提供了大量的 示例脚本 和 课程 。
    • Axolotl 是一个集成了上述所有工具(Transformers, PEFT, TRL等)的优秀项目,它通过YAML配置文件就能启动微调,极大降低了入门门槛。
  • 社区是宝藏:遇到问题时,去 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

SwanLab

wandb