前言:

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

一、大模型蒸馏、微调、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来自动创建私有的模型仓库。

写在结尾:

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

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐