大模型蒸馏、大模型微调、RAG

前言:

有很多同学想学习大模型开发,又无从下手,网上一搜,铺天盖地的付费课程。又不想当韭菜,打破认知障碍,通过自学,改变自己,改变世界!

一、大模型蒸馏、微调、RAG的适用场景

一、技术特性对比

  1. 模型蒸馏

    • 适用场景‌:需要将大模型压缩为轻量级部署版本时(如移动端/边缘设备),或需快速复现大模型核心能力但计算资源有限时‌1。
    • 优势‌:显著降低推理成本,保留教师模型80%以上能力(如Qwen3-4B蒸馏后性能接近Qwen2.5-72B)‌
  2. 全参数微调

    • 适用场景‌:需模型掌握特定领域知识(如医疗诊断、金融研报分析)或调整输出风格(如客服话术定制)‌
    • 优势‌:直接优化模型权重,实现领域专业化(如医疗大模型微调后诊断准确率提升15%)‌
  3. RAG(检索增强生成)

    • 适用场景‌:处理动态更新数据(如企业实时业务文档)或需透明引用来源的场景(如法律咨询)‌
    • 优势‌:无需重新训练,通过检索外部知识库即时更新信息(如金融数据更新周期从周级缩短至分钟级)‌

二、场景选择决策树

  1. 数据动态性

    • 高频更新数据 → RAG(如新闻摘要生成)‌
    • 静态数据 → 微调或蒸馏(如古籍翻译)‌
  2. 能力需求

    • 基座模型不具备的特殊能力 → 微调(如医疗术语生成)‌
    • 通用能力增强 → 蒸馏(如多语言支持)‌
  3. 成本约束

    • 低预算/快速迭代 → RAG(检索成本仅为微调的1/10)‌
    • 长期稳定需求 → 微调(一次性投入换取持续性能)‌

三、混合应用案例

  • 金融风控系统‌:

  • RAG实时检索监管政策 + 微调模型生成合规报告‌
  • 智能客服‌:

  • 蒸馏模型处理常规咨询 + LoRA微调实现品牌话术适配‌

二、微调模型LoRA

论文原文:https://arxiv.org/abs/2106.0968

LoRA是什么

LORA (Low-Rank Adaptation) 微调是一种针对大规模预训练模型的优化技术,用于在较少计算资源和数据的情况下,对这些模型进行有效微调。

LORA通过引入低秩矩阵来减少模型参数的更新量,进而显著降低训练的计算开销,同时保持微调的性能。由于LLM参数量巨大,直接微调耗费大量资源,LORA的做法是冻结模型的绝大部分参数,只更新很小一部分参数。这就像修车时不需要重造整辆车,而是只修理一些特定的部件。

矩阵的秩是指矩阵中线性无关行或列的最大数量,低秩矩阵表示矩阵的秩较低。

LoRa的使用小技巧

  • 进行LoRA高效的模型微调,重点是保持参数尺寸最小化。

  • 使用PEFT库来实现LORA,避免复杂的编码需求。

  • 将LORA适应扩展到所有线性层,增强整体模型的能力。

  • 保持偏置层归一化可训练,因为它们对模型的适应性至关重要,并且不需要低秩适应。

  • 应用量化低秩适应 (QLORA)以节省GPU显存并训练模型,从而能够训练更大的模型。

三、ms-swift 

github : https://github.com/modelscope/ms-swift


论文:https://arxiv.org/abs/2408.05517


Swift3.x中文文档 https://swift.readthedocs.io/zh-cn/latest/


魔搭社区官网: https://modelscope.cn/home

ms-swift是什么?

ms-swift是魔搭社区提供的大模型与多模态大模型微调部署框架,现已支持450+大模型与150+多模态大模型的训练(预训练、微调、人类对齐)、推理、评测、量化与部署。

其中大模型包括:Qwen2.5、InternLM3、GLM4、Llama3.3、Mistral、DeepSeek-R1、Yi1.5、TeleChat2、Baichuan2、Gemma2等模型;

多模态大模型包括:Qwen2.5-VL、Qwen2-Audio、Llama3.2-Vision、Llava、InternVL2.5、MiniCPM-V-2.6、GLM4v、Xcomposer2.5、Yi-VL、DeepSeek-VL2、Phi3.5-Vision、GOT-OCR2等模型。

🍔 除此之外,ms-swift汇集了最新的训练技术,包括LoRA、QLoRA、Llama-Pro、LongLoRA、GaLore、Q-GaLore、LoRA+、LISA、DoRA、FourierFt、ReFT、UnSloth、和Liger等轻量化训练技术,以及DPO、GRPO、RM、PPO、KTO、CPO、SimPO、ORPO等人类对齐训练方法。

ms-swift支持使用vLLM和LMDeploy对推理、评测和部署模块进行加速,并支持使用GPTQ、AWQ、BNB等技术对大模型进行量化。ms-swift还提供了基于Gradio的Web-UI界面及丰富的最佳实践。
 

为什么选择ms-swift?

🍎 模型类型:支持450+纯文本大模型、150+多模态大模型以及All-to-All全模态模型、序列分类模型、Embedding模型训练到部署全流程。
数据集类型:内置150+预训练、微调、人类对齐、多模态等各种类型的数据集,并支持自定义数据集。
硬件支持:CPU、RTX系列、T4/V100、A10/A100/H100、Ascend NPU、MPS等。
🍊 轻量训练:支持了LoRA、QLoRA、DoRA、LoRA+、ReFT、RS-LoRA、LLaMAPro、Adapter、GaLore、Q-Galore、LISA、UnSloth、Liger-Kernel等轻量微调方式。
分布式训练:支持分布式数据并行(DDP)、device_map简易模型并行、DeepSpeed ZeRO2 ZeRO3、FSDP等分布式训练技术。
量化训练:支持对BNB、AWQ、GPTQ、AQLM、HQQ、EETQ量化模型进行训练。
RLHF训练:支持纯文本大模型和多模态大模型的DPO、GRPO、RM、PPO、KTO、CPO、SimPO、ORPO等人类对齐训练方法。
🍓 多模态训练:支持对图像、视频和语音不同模态模型进行训练,支持VQA、Caption、OCR、Grounding任务的训练。
界面训练:以界面的方式提供训练、推理、评测、量化的能力,完成大模型的全链路。
插件化与拓展:支持自定义模型和数据集拓展,支持对loss、metric、trainer、loss-scale、callback、optimizer等组件进行自定义。
🍉 工具箱能力:不仅提供大模型和多模态大模型的训练支持,还涵盖其推理、评测、量化和部署全流程。
推理加速:支持PyTorch、vLLM、LmDeploy推理加速引擎,并提供OpenAI接口,为推理、部署和评测模块提供加速。
模型评测:以EvalScope作为评测后端,支持100+评测数据集对纯文本和多模态模型进行评测。
模型量化:支持AWQ、GPTQ和BNB的量化导出,导出的模型支持使用vLLM/LmDeploy推理加速,并支持继续训练。
 

SWIFT安装

# 推荐
pip install 'ms-swift'
# 使用评测
pip install 'ms-swift[eval]' -U
# 全能力
pip install 'ms-swift[all]' -U

源代码安装

# pip install git+https://github.com/modelscope/ms-swift.git# 全能力
# pip install "git+https://github.com/modelscope/ms-swift.git#egg=ms-swift[all]"git clone https://github.com/modelscope/ms-swift.git
cd ms-swift
pip install -e .# 全能力
# pip install -e '.[all]'

以上安装参考官网:SWIFT安装 — swift 3.8.0.dev0 文档

支持的硬件

运行环境

更多参考:https://github.com/modelscope/ms-swift/blob/main/requirements/install_all.sh

快速开始,微调:

10分钟在单卡3090上对Qwen2.5-7B-Instruct进行自我认知微调:

# 22GB
CUDA_VISIBLE_DEVICES=0 \
swift sft \--model Qwen/Qwen2.5-7B-Instruct \--train_type lora \--dataset 'AI-ModelScope/alpaca-gpt4-data-zh#500' \'AI-ModelScope/alpaca-gpt4-data-en#500' \'swift/self-cognition#500' \--torch_dtype bfloat16 \--num_train_epochs 1 \--per_device_train_batch_size 1 \--per_device_eval_batch_size 1 \--learning_rate 1e-4 \--lora_rank 8 \--lora_alpha 32 \--target_modules all-linear \--gradient_accumulation_steps 16 \--eval_steps 50 \--save_steps 50 \--save_total_limit 2 \--logging_steps 5 \--max_length 2048 \--output_dir output \--system 'You are a helpful assistant.' \--warmup_ratio 0.05 \--dataloader_num_workers 4 \--model_author swift \--model_name swift-robot

我这里用阿里魔塔社区的免费试用环境:

小贴士:

  • 如果要使用自定义数据集进行训练,你可以参考这里组织数据集格式,并指定--dataset <dataset_path>
  • --model_author--model_name参数只有当数据集中包含swift/self-cognition时才生效。
  • 如果要使用其他模型进行训练,你只需要修改--model <model_id/model_path>即可。
  • 默认使用ModelScope进行模型和数据集的下载。如果要使用HuggingFace,指定--use_hf true即可。

训练完成后,使用以下命令对训练后的权重进行推理:

  • 这里的--adapters需要替换成训练生成的last checkpoint文件夹。由于adapters文件夹中包含了训练的参数文件args.json,因此不需要额外指定--model--system,swift会自动读取这些参数。如果要关闭此行为,可以设置--load_args false
# 使用交互式命令行进行推理
CUDA_VISIBLE_DEVICES=0 \
swift infer \--adapters output/vx-xxx/checkpoint-xxx \--stream true \--temperature 0 \--max_new_tokens 2048
# merge-lora并使用vLLM进行推理加速
CUDA_VISIBLE_DEVICES=0 \
swift infer \--adapters output/vx-xxx/checkpoint-xxx \--stream true \--merge_lora true \--infer_backend vllm \--vllm_max_model_len 8192 \--temperature 0 \--max_new_tokens 2048

最后,使用以下命令将模型推送到ModelScope:

CUDA_VISIBLE_DEVICES=0 \
swift export \--adapters output/vx-xxx/checkpoint-xxx \--push_to_hub true \--hub_model_id '<your-model-id>' \--hub_token '<your-sdk-token>' \--use_hf false

Web-UI

我这里用阿里魔塔社区的免费试用环境:

swift web-ui --lang zh

启动后,在浏览器访问,都可以在界面上操作了!

导出与推送

https://swift.readthedocs.io/zh-cn/latest/Instruction/%E5%AF%BC%E5%87%BA%E4%B8%8E%E6%8E%A8%E9%80%81.html

推送模型

SWIFT支持将训练/量化的模型重新推送到ModelScope/HuggingFace。默认推送到ModelScope,你可以指定--use_hf true推送到HuggingFace。

swift export \--model output/vx-xxx/checkpoint-xxx \--push_to_hub true \--hub_model_id '<model-id>' \--hub_token '<sdk-token>' \--use_hf false

小贴士:

  • 你可以使用--model <checkpoint-dir>或者--adapters <checkpoint-dir>指定需要推送的checkpoint目录,这两种写法在推送模型场景没有差异。

  • 推送到ModelScope时,你需要确保你已经注册了魔搭账号,你的SDK token可以在该页面中获取。推送模型需确保sdk token的账号具有model_id对应组织的编辑权限。推送模型将自动创建对应model_id的模型仓库(如果该模型仓库不存在),你可以使用--hub_private_repo true来自动创建私有的模型仓库。

写在结尾:

       引用鲁迅先生的《秋夜》中的一句话:“我家后院有两棵树,一棵是枣树,另一棵也是枣树”,在这个浮躁的社会,即使你当下的内心是彷徨、孤寂、苦闷的,每一个在时代洪流中挣扎却依然挺立的人‌。在这个浮躁的时代,我们或许无法改变世界,但至少可以像枣树一样——‌在沉默中生长,在黑暗中抗争‌。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/95391.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/95391.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

25高教社杯数模国赛【E题保姆级思路+问题分析】

注&#xff1a;本内容由”数模加油站“ 原创出品&#xff0c;虽无偿分享&#xff0c;但创作不易。 欢迎参考teach&#xff0c;但请勿抄袭、盗卖或商用。 E 题 AI辅助智能体测 《国家学生体质健康标准》的颁布&#xff0c;有效地促进了大中小学生关注自身体质健康的发展&#xf…

基于单片机车内换气温度检测空气质量检测系统Proteus仿真(含全部资料)

全套资料包含&#xff1a;Proteus仿真源文件keil C语言源程序AD原理图流程图元器件清单说明书等 资料下载&#xff1a; 通过网盘分享的文件&#xff1a;资料分享 链接: 百度网盘 请输入提取码 提取码: tgnu 目录 资料下载&#xff1a; Proteus仿真功能 项目文件资料&#…

MySQL子查询的分类讲解与实战

精选专栏链接 &#x1f517; MySQL技术笔记专栏Redis技术笔记专栏大模型搭建专栏Python学习笔记专栏深度学习算法专栏 欢迎订阅&#xff0c;点赞&#xff0b;关注&#xff0c;每日精进1%&#xff0c;与百万开发者共攀技术珠峰 更多内容持续更新中&#xff01;希望能给大家带来…

Leetcode 206. 反转链表 迭代/递归

原题链接&#xff1a;Leetcode 206. 反转链表 解法一&#xff1a;迭代 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* …

C++11新特性 | 欢迎来到现代C++的世界!

左值与右值 左值与右值的概念 可以被取地址的值为左值&#xff08;left value&#xff0c;简称lvalue&#xff09;&#xff0c;否则为右值&#xff08;right value&#xff0c;简称rvalue&#xff09;。 常见的左值、右值例子&#xff1a; // >>>>>>> 左值…

因为对象装箱拆箱导致的空指针异常

今天业务突然提了个事件单&#xff0c;客户添加承租人一直报错&#xff0c;但是很奇怪&#xff0c;报错信息是空的二话不说&#xff0c;先跟API组要了接口和参数&#xff0c;然后看日志然鹅&#xff0c;这个接口并没有打印日志&#xff0c;只有一个e.printStackTrace()然后静下…

Rust 在 Windows 环境下交叉编译其他操作系统可执行文件的详细指南

前言&#xff1a;为什么需要交叉编译&#xff1f; 想象一下这样的场景&#xff1a;你在 Windows 电脑上开发了一个 Rust 程序&#xff0c;希望它能在 Linux 服务器上运行&#xff0c;或者在朋友的 macOS 电脑上测试 —— 总不能为了编译不同系统的版本&#xff0c;专门买一台 …

Ubuntu系统配置镜像源

要修改的文件 /etc/apt/sources.list操作步骤 1. 备份原文件 sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak2. 编辑文件 sudo nano /etc/apt/sources.list3. 清空文件内容&#xff0c;填入以下内容 先获取Ubuntu版本代号&#xff1a; lsb_release -cs然后根据版本填…

【Spring Cloud Alibaba】Sentinel(一)

【Spring Cloud Alibaba】Sentinel&#xff08;一&#xff09;1. 简介2. 服务雪崩1. 简介 Sentinel 是阿里巴巴开源的分布式系统的流量防护组件&#xff0c;主要用来做流量控制、熔断降级、系统保护。它的定位类似于 Hystrix&#xff0c;但更侧重在 流量治理 上。目前在微服务…

Delphi 5 操作Word表格选区问题解析

在 Delphi 5 中操作 Word 时&#xff0c;您遇到的 Selection.MoveDown 方法选中整行而不是仅移动一行的原因与 Word 的选择机制和单元格内部结构有关。以下是详细解释和解决方案&#xff1a;问题分析单元格的选区范围&#xff1a;当使用 .Cell(r, c).Select 选中单元格时&#…

小米fastboot不能被电脑识别但手机正常使用模式时能被电脑识别

小米手机USB连接电脑不识别解决方法 – MIUI历史版本 小米手机USB连接电脑不识别解决方法 问题经验 手机连接电脑通常会自动安装驱动&#xff0c;如果驱动安装失败或是电脑不能识别手机设备&#xff0c;可尝试下面方法。 1. 尝试换根 USB 数据线&#xff0c;最好是手机原…

Git 版本管理工具基本操作汇总—命令总结

通常&#xff0c;很多朋友在使用 Git 的时候都会直接用 IDE 中集成的插件或者自带的工具等来实现代码的拉取、提交、合并以及其他操作&#xff0c;当然这肯定也是可以的&#xff0c;但是长期这样子操作&#xff0c;我们就会忽略掉 Git 业务运行的底层逻辑。那么&#xff0c;我这…

自学嵌入式第三十三天:网络编程-UDP

一、OSI模型(open system interconnect)开放系统互联模型&#xff0c;分为7层应用层&#xff1a;为网络用户提供各种服务&#xff0c;例如电子邮件、文件传输等&#xff1b;表示层&#xff1a;为不同主机间的通信提供统一的数据表示形式。加密解密&#xff0c;压缩&#xff1b;…

A*(Astar)算法详解与应用

算法背景A*&#xff08;A-Star&#xff09;算法是一种在图形平面上&#xff0c;有多个节点的路径中&#xff0c;求出最低通过成本的算法。其历史可以追溯到早期的图搜索算法&#xff0c;如Dijkstra算法和贪心最佳优先搜索&#xff08;Greedy Best-First Search&#xff09;。是…

word删除指定页面

常规程序因为wps的 .docx 文件是基于段落和节的结构&#xff0c;而不是“物理页”&#xff0c;所以无法直接按“第几页”删除在普通程序里面无法读取到他的页码&#xff0c;但是在宏编程里面他能读取到页码&#xff0c;我们就根据宏编程来这样删除。程序会自动打开选择要删除的…

RK3568平台开发系列讲解:瑞芯微平台4G模块篇移植

更多内容可以加入Linux系统知识库套餐(教程+视频+答疑) 🚀返回专栏总目录 文章目录 一、硬件图片 二、功能宏 三、增加PID/VID 支持 3.1、usb_device_id 结构体 3.2、usb_device_id 的注册 沉淀、分享、成长,让自己和他人都能有所收获!😄 一、硬件图片 目标: 结果…

面试 (一)

目录 1. HashMap是怎么解决冲突的 是用什么数据结构实现的 2. 为什么hashmap的初始长度为16 3. 多线程的核心参数 4. 多线程怎么工作的 5. CISCS是怎么实现的 6. JUC知识 7. C和java的区别 8. JVM底层编译的东西 9. 公平锁和非公平锁 10. 有人恶意攻击你的平台每秒发送…

计算机毕设选题:基于Python+Django的健康饮食管理系统设计【源码+文档+调试】

精彩专栏推荐订阅&#xff1a;在 下方专栏&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f496;&#x1f525;作者主页&#xff1a;计算机毕设木哥&#x1f525; &#x1f496; 文章目录 一、项目介绍二…

vscode terminal远程连接linux服务器GUI图形界面

看了很多教程&#xff0c;不清楚具体原理&#xff0c;但总之自己是摸索出来了&#xff1a; 1.下载vcxsrv&#xff0c;最后双击exe程序启动&#xff1a; 每一步的配置如下&#xff1a;2.修改配置 vscode中按下“ctrlshiftp”&#xff0c;然后输入“Remote-SSH: Open SSH Configu…