
SWIFT - 轻量级微调模型框架 [魔搭]
🍲 ms-swift是魔搭社区提供的大模型与多模态大模型微调部署框架,现已支持450+大模型与150+多模态大模型的训练(预训练、微调、人类对齐)、推理、评测、量化与部署。其中大模型包括:Qwen2.5、InternLM3、GLM4、Llama3.3、Mistral、DeepSeek-R1、Yi1.5、TeleChat2、Baichuan2、Gemma2等模型;
文章目录
一、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界面及丰富的最佳实践。
- 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
- 🏛 License - Apache 2.0
为什么选择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推理加速,并支持继续训练。
🎉 新闻
- 🎁 2025.03.23: SWIFT支持了多轮GRPO, 用于构建多轮对话场景的训练(例如agent tool calling), 请查看训练脚本.
- 🎁 2025.03.16: SWIFT支持了Megatron的并行技术进行训练,请查看Megatron-SWIFT训练文档。
- 🎁 2025.03.15: SWIFT支持了gme(多模态)embedding模型的微调,请查看训练脚本。
- 🎁 2025.03.13: 我们提供了一个仅使用4GPU(4*80G)来训练72B模型的脚本, 请查看这里
- 🎁 2025.03.05: 支持GRPO的hybrid模式(rollout和actor在同一GPU上, rollout可以进行offload), 同时支持了vllm的tensor parallel, 查看训练脚本
- 🎁 2025.02.21: 我们测试了GRPO算法的性能,并且使用一些tricks使训练速度提高到300%. WanDB表格请查看这里
- 🎁 2025.02.21: 支持大模型API蒸馏采样,请查看示例
- 🎁 2025.02.17: 支持SwanLab, 仅需添加几个新的参数就可以在swanlab上验证你的训练效果
- 🎁 2025.02.16: 在GRPO算法中支持LMDeploy, 请查看
--use_lmdeploy true
. 具体参考这个脚本 - 🔥 2025.02.12: 支持GRPO(Group Relative Policy Optimization) 训练算法,训练脚本可以在这里找到
- 🎁 2025.02.10: SWIFT支持了embedding模型的微调,请查看训练脚本。
- 🎁 2025.01.23: SWIFT支持了
sample
命令, 这是一个对CoT和RFT非常重要的命令。同时, 我们支持了一个强化微调脚本。 - 🎁 2024.12.04: SWIFT3.0大版本更新。请查看发布说明和更改。
- 🎉 2024.08.12: SWIFT论文已经发布到arXiv上,可以点击这里阅读。
- 🔥 2024.08.05: 支持使用evalscope作为后端进行大模型和多模态模型的评测。
- 🔥 2024.07.29: 支持使用vllm, lmdeploy对大模型和多模态大模型进行推理加速,在infer/deploy/eval时额外指定
--infer_backend vllm/lmdeploy
即可。 - 🔥 2024.07.24: 支持对多模态大模型进行人类偏好对齐训练,包括DPO/ORPO/SimPO/CPO/KTO/RM/PPO。
- 🔥 2024.02.01: 支持Agent训练!训练算法源自这篇论文。
🛠️ 安装
使用pip进行安装:
pip install ms-swift -U
从源代码安装:
# pip install git+https://github.com/modelscope/ms-swift.git
git clone https://github.com/modelscope/ms-swift.git
cd ms-swift
pip install -e .
运行环境:
范围 | 推荐 | 备注 | |
---|---|---|---|
python | >=3.9 | 3.10 | |
cuda | cuda12 | 使用cpu、npu、mps则无需安装 | |
torch | >=2.0 | ||
transformers | >=4.33 | 4.50 | |
modelscope | >=1.19 | ||
peft | >=0.11,<0.16 | ||
trl | >=0.13,<0.17 | 0.16 | RLHF |
deepspeed | >=0.14 | 0.14.5 | 训练 |
vllm | >=0.5.1,<0.8 | 0.7.3 | 推理/部署/评测 |
lmdeploy | >=0.5 | 0.7.2.post1 | 推理/部署/评测 |
evalscope | >=0.11 | 评测 |
更多可选依赖可以参考这里。
🚀 快速开始
10分钟在单卡3090上对Qwen2.5-7B-Instruct进行自我认知微调:
1、命令行
# 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 5 \
--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 \
--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
2、Web-UI
Web-UI是基于gradio界面技术的零门槛训练、部署界面方案,具体可以查看这里。
swift web-ui
3、使用Python训练和推理
ms-swift也支持使用python的方式进行训练和推理。下面给出训练和推理的伪代码,具体可以查看这里。
训练:
# 获取模型和template,并加入可训练的LoRA模块
model, tokenizer = get_model_tokenizer(model_id_or_path, ...)
template = get_template(model.model_meta.template, tokenizer, ...)
model = Swift.prepare_model(model, lora_config)
# 下载并载入数据集,并将文本encode成tokens
train_dataset, val_dataset = load_dataset(dataset_id_or_path, ...)
train_dataset = EncodePreprocessor(template=template)(train_dataset, num_proc=num_proc)
val_dataset = EncodePreprocessor(template=template)(val_dataset, num_proc=num_proc)
# 进行训练
trainer = Seq2SeqTrainer(
model=model,
args=training_args,
data_collator=template.data_collator,
train_dataset=train_dataset,
eval_dataset=val_dataset,
template=template,
)
trainer.train()
推理:
# 使用原生pytorch引擎进行推理
engine = PtEngine(model_id_or_path, adapters=[lora_checkpoint])
infer_request = InferRequest(messages=[{'role': 'user', 'content': 'who are you?'}])
request_config = RequestConfig(max_tokens=max_new_tokens, temperature=temperature)
resp_list = engine.infer([infer_request], request_config)
print(f'response: {resp_list[0].choices[0].message.content}')
四、 如何使用✨
这里给出使用ms-swift进行训练到部署到最简示例,具体可以查看examples。
- 若想使用其他模型或者数据集(含多模态模型和数据集),你只需要修改
--model
指定对应模型的id或者path,修改--dataset
指定对应数据集的id或者path即可。 - 默认使用ModelScope进行模型和数据集的下载。如果要使用HuggingFace,指定
--use_hf true
即可。
常用链接 |
---|
🔥命令行参数 |
支持的模型和数据集 |
自定义模型, 🔥自定义数据集 |
大模型教程 |
训练
支持的训练方法:
方法 | 全参数 | LoRA | QLoRA | Deepspeed | 多机 | 多模态 |
---|---|---|---|---|---|---|
预训练 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
指令监督微调 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
DPO训练 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
GRPO训练 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
奖励模型训练 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
PPO训练 | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ |
KTO训练 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
CPO训练 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
SimPO训练 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
ORPO训练 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
分类模型训练 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
Embedding模型训练 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
预训练:
# 8*A100
NPROC_PER_NODE=8 \
CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 \
swift pt \
--model Qwen/Qwen2.5-7B \
--dataset swift/chinese-c4 \
--streaming true \
--train_type full \
--deepspeed zero2 \
--output_dir output \
--max_steps 100000 \
...
微调:
CUDA_VISIBLE_DEVICES=0 swift sft \
--model Qwen/Qwen2.5-7B-Instruct \
--dataset AI-ModelScope/alpaca-gpt4-data-zh \
--train_type lora \
--output_dir output \
...
RLHF:
CUDA_VISIBLE_DEVICES=0 swift rlhf \
--rlhf_type dpo \
--model Qwen/Qwen2.5-7B-Instruct \
--dataset hjh0119/shareAI-Llama3-DPO-zh-en-emoji \
--train_type lora \
--output_dir output \
...
推理
CUDA_VISIBLE_DEVICES=0 swift infer \
--model Qwen/Qwen2.5-7B-Instruct \
--stream true \
--infer_backend pt \
--max_new_tokens 2048
# LoRA
CUDA_VISIBLE_DEVICES=0 swift infer \
--model Qwen/Qwen2.5-7B-Instruct \
--adapters swift/test_lora \
--stream true \
--infer_backend pt \
--temperature 0 \
--max_new_tokens 2048
界面推理
CUDA_VISIBLE_DEVICES=0 swift app \
--model Qwen/Qwen2.5-7B-Instruct \
--stream true \
--infer_backend pt \
--max_new_tokens 2048 \
--lang zh
部署
CUDA_VISIBLE_DEVICES=0 swift deploy \
--model Qwen/Qwen2.5-7B-Instruct \
--infer_backend vllm
采样
CUDA_VISIBLE_DEVICES=0 swift sample \
--model LLM-Research/Meta-Llama-3.1-8B-Instruct \
--sampler_engine pt \
--num_return_sequences 5 \
--dataset AI-ModelScope/alpaca-gpt4-data-zh#5
评测
CUDA_VISIBLE_DEVICES=0 swift eval \
--model Qwen/Qwen2.5-7B-Instruct \
--infer_backend lmdeploy \
--eval_backend OpenCompass \
--eval_dataset ARC_c
量化
CUDA_VISIBLE_DEVICES=0 swift export \
--model Qwen/Qwen2.5-7B-Instruct \
--quant_bits 4 --quant_method awq \
--dataset AI-ModelScope/alpaca-gpt4-data-zh \
--output_dir Qwen2.5-7B-Instruct-AWQ
推送模型
swift export \
--model <model-path> \
--push_to_hub true \
--hub_model_id '<model-id>' \
--hub_token '<sdk-token>'
2025-04-04(五)
更多推荐
所有评论(0)