前言:
有很多同学想学习大模型开发,又无从下手,网上一搜,铺天盖地的付费课程。又不想当韭菜,打破认知障碍,通过自学,改变自己,改变世界!
一、大模型蒸馏、微调、RAG的适用场景
一、技术特性对比
-
模型蒸馏
- 适用场景:需要将大模型压缩为轻量级部署版本时(如移动端/边缘设备),或需快速复现大模型核心能力但计算资源有限时1。
- 优势:显著降低推理成本,保留教师模型80%以上能力(如Qwen3-4B蒸馏后性能接近Qwen2.5-72B)
-
全参数微调
- 适用场景:需模型掌握特定领域知识(如医疗诊断、金融研报分析)或调整输出风格(如客服话术定制)
- 优势:直接优化模型权重,实现领域专业化(如医疗大模型微调后诊断准确率提升15%)
-
RAG(检索增强生成)
- 适用场景:处理动态更新数据(如企业实时业务文档)或需透明引用来源的场景(如法律咨询)
- 优势:无需重新训练,通过检索外部知识库即时更新信息(如金融数据更新周期从周级缩短至分钟级)
二、场景选择决策树
-
数据动态性
- 高频更新数据 → RAG(如新闻摘要生成)
- 静态数据 → 微调或蒸馏(如古籍翻译)
-
能力需求
- 基座模型不具备的特殊能力 → 微调(如医疗术语生成)
- 通用能力增强 → 蒸馏(如多语言支持)
-
成本约束
- 低预算/快速迭代 → 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
来自动创建私有的模型仓库。
写在结尾:
引用鲁迅先生的《秋夜》中的一句话:“我家后院有两棵树,一棵是枣树,另一棵也是枣树”,在这个浮躁的社会,即使你当下的内心是彷徨、孤寂、苦闷的,每一个在时代洪流中挣扎却依然挺立的人。在这个浮躁的时代,我们或许无法改变世界,但至少可以像枣树一样——在沉默中生长,在黑暗中抗争。