大模型微调&训练-LLamaFactory

259 阅读7分钟

简介

1. 需求和技术

  • 企业对于大模型的不同类型个性化需求

  • SFT(有监督微调)、RLHF(强化学习)、RAG(检索增强生成) -关注:基本概念;分别解决什么问题;如何根据需求选择;

  • 微调部分详细介绍:

    • 微调算法的分类
    • **LoRA 微调算法
    • 微调常见实现框架

2.整体步骤说明

在 Linux 系统上微调一个大模型、部署模型、暴露 API 给 web 后端调用,本机前端展示全过程

3.模型微调

  • 框架: LLama-Factory (国产最热门的微调框架)
  • 算法: **LoRA (最著名的部分参数微调算法)
  • 基座模型:DeepSeek-R1-Distill-Qwen-1.5B -蒸馏技术通常用于通过将大模型(教师模型)的知识转移到小模型(学生模型)中,使得小模型能够在尽量保持性能的同时,显著减少模型的参数量和计算需求。

4. 模型部署和暴露接口

框架:FastAPI(一个基于 python 的 web 框架)

5.web后端调用

使用torch运行微调后的模型,类似于Ollama运行的大模型

通过 HTTP 请求交互即可

二、需求和技术

1. 企业对于大模型的不同类型个性化需求

  • 提高模型对企业专有信息的理解、增强模型在特定行业领域的知识 - SFT

    • 案例一:希望大模型能更好理解蟹堡王的企业专有知识,如蟹老板的女儿为什么是一头鲸鱼
    • 案例二:希望大模型能特别精通于汉堡制作,并熟练回答关于汉堡行业的所有问题
  • 提供个性化和互动性强的服务 - RLHF

    • 案例三:希望大模型能够基于顾客的反馈调整回答方式,比如生成更二次元风格的回答还是更加学术风格的回答
  • 提高模型对企业专有信息的理解、增强模型在特定行业领域的知识、获取和生成最新的、实时的信息 - RAG

    • 案例四:希望大模型能够实时获取蟹堡王的最新的促销活动信息和每周菜单更新

2. SFT(有监督微调)、RLHF(强化学习)、RAG(检索增强生成)

2.1 SFT(Supervised Fine-Tuning)有监督微调

  • 通过提供人工标注的数据,进一步训练预训练模型,让模型能够更加精准地处理特定领域的任务
  • 除了“有监督微调”,还有“无监督微调”“自监督微调”,当大家提到“微调”时通常是指有监督微调

2.2 RLHF(Reinforcement Learning from Human Feedback)强化学习

  • DPO(Direct Preference Optimization) 核心思想:通过 人类对比选择(例如:A 选项和 B 选项,哪个更好)直接优化生成模型,使其产生更符合用户需求的结果;调整幅度大
  • PPO(Proxima Policy Optimization) 核心思想:通过 奖励信号(如点赞、点踩)来 渐进式调整模型的行为策略;调整幅度小

2.3 RAG(Retrieval-Augmented Generation)检索增强生成

  • 将外部信息检索与文本生成结合,帮助模型在生成答案时,实时获取外部信息和最新信息

3.微调还是RAG?

  • 微调:

    • 适合:拥有非常充足的数据
    • 能够直接提升模型的固有能力;无需依赖外部检索;
  • RAG:

    • 适合:只有非常非常少的数据;动态更新的数据
    • 每次回答问题前需耗时检索知识库;回答质量依赖于检索系统的质量;
  • 总结:

    • 少量企业私有知识:最好微调和 RAG 都做;资源不足时优先 RAG;
    • 会动态更新的知识:RAG
    • 大量垂直领域知识:微调

4.SFT(有监督微调)

通过提供人工标注的数据,进一步训练预训练模型,让模型能够更加精准地处理特定领域的任务

  • 人工标注的数据

    如:分类系统
    {"image_path": "path/image1.jpg", "label": "SpongeBobSquarePants"}
    {"image_path": "path/image2.jpg", "label": "PatrickStar"}
    
    如:对话系统
    {
    "instruction": "请问你是谁",
    "input": "",
    "output": "您好,我是蟹堡王的神奇海螺,很高兴为您服务!我可以回答关于蟹堡王和汉堡制作的任何问题,您有什么需要帮助的吗?"
    },
    
  • 预训练模型(基座模型) 指已经在大量数据上训练过的模型,也就是我们微调前需要预先下载的开源模型。它具备了较为通用的知识和能力,能够解决一些常见的任务,可以在此基础上进行进一步的微调(fine-tuning)以适应特定的任务或领域

  • 微调算法的分类

    • 全参数微调(Full Fine-Tuning)

      • 对整个预训练模型进行微调,会更新所有参数。
      • 优点:因为每个参数都可以调整,通常能得到最佳的性能;能够适应不同任务和场景
      • 缺点:需要较大的计算资源并且容易出现过拟合
    • 部分参数微调(Partial Fine-Tuning)

      • 只更新模型的部分参数(例如某些层或模块)
      • 优点:减少了计算成本;减少过拟合风险;能够以较小的代价获得较好的结果
      • 缺点:可能无法达到最佳性能
      • 最著名算法:LoRA

5.LoRA 微调算法

  • 论文阅读:

    • LoRA 开山论文:2021 年 Microsoft Research 提出,首次提出了通过低秩矩阵分解的方式来进行部分参数微调,极大推动了 AI 技术在多行业的广泛落地应用:LoRA: Low-Rank Adaptation of Large Language Models
    • 大语言模型开山论文:2017 年 Google Brain 团队发布,标志着 Transformer 架构的提出,彻底改变了自然语言处理(NLP)领域,标志着大语言模型时代的开始:Attention Is All You Need
  • 什么是矩阵的“秩”

    • 矩阵的秩(Rank of a matrix)是指矩阵中线性无关的行或列的最大数量。简单来说它能反映矩阵所包含的有效信息量
  • LoRA 如何做到部分参数微调 ![[Pasted image 20250225121007.png]]

  • LoRA 训练结束后通常需要进行权重合并

6.微调常见实现框架

  • 初学者如何对大模型进行微调?
  • Llama-Factory:由国内北航开源的低代码大模型训练框架,可以实现零代码微调,简单易学,功能强大,且目前热度很高,建议新手从这个开始入门
  • transformers.Trainer:由 Hugging Face 提供的高层 API,适用于各种 NLP 任务的微调,提供标准化的训练流程和多种监控工具,适合需要更多定制化的场景,尤其在部署和生产环境中表现出色
  • DeepSpeed:由微软开发的开源深度学习优化库,适合大规模模型训练和分布式训练,在大模型预训练和资源密集型训练的时候用得比较多

三、模型微调

1. 准备硬件资源、搭建环境
  • 在云平台上租用一个实例(如 AutoDL,官网:www.autodl.com/market/list

  • 2. 本机通过 SSH 连接到远程服务器
  • 使用 Visual Studio Remote 插件 SSH 连接到你租用的服务器,参考文档: # 使用VSCode插件Remote-SSH连接服务器

  • 连接后打开个人数据盘文件夹 /root/autodl-tmp

    3. LLaMA-Factory 安装部署

    LLaMA-Factory 的 Github地址:github.com/hiyouga/LLa…

  • 克隆仓库

    git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git
    
  • 切换到项目目录

    cd LLaMA-Factory
    
  • 修改配置,将 conda 虚拟环境安装到数据盘(这一步也可不做)

    mkdir -p /root/autodl-tmp/conda/pkgs 
    conda config --add pkgs_dirs /root/autodl-tmp/conda/pkgs 
    mkdir -p /root/autodl-tmp/conda/envs 
    conda config --add envs_dirs /root/autodl-tmp/conda/envs
    
  • 创建 conda 虚拟环境(一定要 3.10 的 python 版本,不然和 LLaMA-Factory 不兼容)

    conda create -n llama-factory python=3.10
    
  • 激活虚拟环境

    conda activate llama-factory
    conda init   # 激活报错就执行
  • 在虚拟环境中安装 LLaMA Factory 相关依赖

    pip install -e ".[torch,metrics]"
    

    注意:如报错 bash: pip: command not found ,先执行 conda install pip 即可 或者再次执行命令