LLM/MLLM之SWIFT:SWIFT(一个用于微调的可伸缩轻量级基础设施的工具)的简介、安装和使用方法、案例应用之详细攻略
目录
方法2:通过源代码安装SWIFT(方便运行训练推理脚本),请运行以下命令:
SWIFT的简介
SWIFT(Scalable lightWeight Infrastructure for Fine-Tuning)是一个用于微调的可伸缩轻量级基础设施的工具,支持近200种LLM和MLLM(多模态大模型)的训练、推理、评测和部署。开发者可以直接将我们的框架应用到自己的Research和生产环境中,实现模型训练评测到应用的完整链路。我们除支持了PEFT提供的轻量训练方案外,也提供了一个完整的Adapters库以支持最新的训练技术,如NEFTune、LoRA+、LLaMA-PRO等,这个适配器库可以脱离训练脚本直接使用在自己的自定流程中。
为方便不熟悉深度学习的用户使用,我们提供了一个Gradio的web-ui用于控制训练和推理,并提供了配套的深度学习课程和最佳实践供新手入门。
此外,我们也在拓展其他模态的能力,目前我们支持了AnimateDiff的全参数训练和LoRA训练。
官网:GitHub - modelscope/swift: ms-swift: Use PEFT or Full-parameter to finetune 200+ LLMs or 15+ MLLMs
0、日志更新
- 🔥2024.04.26: 支持LISA 和 unsloth训练!指定
--lisa_activated_layers=2
来开启LISA(显存使用降低至全参训练的30%),指定--tuner_backend unsloth
来使用unsloth,用更少的显存(30%或更少)更快的速度(5x)训练一个超大模型! - 🔥2024.04.26: 支持Qwen1.5-110B和Qwen1.5-110B-Chat模型的推理与微调, 使用这个脚本来开始训练!
- 2024.04.24: 支持Phi3系列模型的推理与微调. 包括: phi3-4b-4k-instruct, phi3-4b-128k-instruct.
- 2024.04.22: 支持chinese-llama-alpaca-2系列模型的推理与微调和部署等. 包括:chinese-llama-2-1.3b, chinese-llama-2-7b, chinese-llama-2-13b, chinese-alpaca-2-1.3b, chinese-alpaca-2-7b和chinese-alpaca-2-13b以及对应的16k和64k长文本模型.
- 2024.04.22: 支持Llama3 GPTQ-Int4, GPTQ-Int8, AWQ系列模型的推理与微调. 支持chatglm3-6b-128k, Openbuddy-llama3的推理与微调.
- 2024.04.20: 支持Atom系列模型的推理, 微调和部署等. 包括: Atom-7B and Atom-7B-Chat. 使用这个脚本来开始训练!
- 2024.04.19: 支持NPU的单卡、DDP、ZeRO2和ZeRO3的训练与推理, 可以查看NPU推理与微调最佳实践.
- 2024.04.19: 支持Llama3系列模型的推理, 微调和部署等. 包括: Llama-3-8B, Llama-3-8B-Instruct, Llama-3-70B, Llama-3-70B-Instruct. 使用这个脚本开始训练叭!
- 2024.04.18: 支持模型: wizardlm2-7b-awq, wizardlm2-8x22b, yi-6b-chat-awq, yi-6b-chat-int8, yi-34b-chat-awq, yi-34b-chat-int8. 支持
--deepspeed zero3-offload
, 提供了默认zero3-offload配置文件来使用zero3+cpu offload. - 2024.04.18: 支持使用环境变量
USE_HF
兼容HuggingFace生态, 切换成使用HF中的模型和数据集, 可以查看HuggingFace生态兼容文档. - 2024.04.17: 支持OpenAI样式的接口评测, 可以查看评测参数接口文档来查看使用方法.
- 🔥2024.04.17: 支持 CodeQwen1.5-7B系列: CodeQwen1.5-7B, CodeQwen1.5-7B-Chat, CodeQwen1.5-7B-Chat-AWQ, 使用这个脚本来开始训练!
- 2024.04.16: 支持llava-v1.6-34b的推理与微调, 最佳实践可以查看这里.
- 2024.04.13: 支持Mixtral-8x22B-v0.1模型的推理与微调, 使用这个脚本来开始训练!
- 2024.04.13: 支持新推出的MiniCPM系列: MiniCPM-V-2.0、MiniCPM-2B-128k、MiniCPM-MoE-8x2B和MiniCPM-1B。使用这个脚本来开始训练!
- 🔥2024.04.11: 支持一键式模型评测能力! 首批数据集包含MMLU、CEval、ARC等,也支持用户自定义数据集,具体可以这个文档。同时, 我们支持了一个比较trick的方法来做多个消融实验的管理,查看这个文档来使用。
- 🔥2024.04.11: 支持c4ai-command-r系列: c4ai-command-r-plus, c4ai-command-r-v01。使用这个脚本来开始训练!
- 2024.04.10: 使用swift微调qwen-7b-chat模型增强模型function call能力,并结合Modelscope-Agent使用,最佳实践可以查看这里。
- 🔥2024.04.09: 支持
弱智吧
系列数据集. 在支持的模型和数据集文档中搜索ruozhiba
来找到数据集并开始训练! - 2024.04.08: 支持XVERSE-MoE-A4.2B模型的推理与微调, 使用这个脚本来开始训练!
- 2024.04.04: 支持使用QLoRA+FSDP来使用两张24G显卡训练70B模型, 使用这个脚本开始训练.
- 🔥2024.04.03: 支持Qwen1.5-32B系列: Qwen1.5-32B, Qwen1.5-32B-Chat, Qwen1.5-32B-Chat-GPTQ-Int4。使用这个脚本来开始训练!
- 🔥2024.04.02: 支持Mengzi3-13B-Base模型的推理与微调, 使用这个脚本来开始训练!
- 🔥2024.04.01: 支持dbrx系列, dbrx-base和dbrx-instruct, 使用这个脚本来开始训练!.
- 🔥2024.03.29: 支持Qwen1.5-MoE系列: Qwen1.5-MoE-A2.7B, Qwen1.5-MoE-A2.7B-Chat, Qwen1.5-MoE-A2.7B-Chat-GPTQ-Int4.
- 🔥2024.03.29: 支持Grok-1 300B MoE模型的推理与微调, 最佳实践可以查看这里.
- 🔥2024.03.25: 支持TeleChat-7b和TeleChat-12b模型的训练和推理, 使用这个脚本来开始训练!.
- 🔥2024.03.20: 支持llava系列的推理与微调, 最佳实践可以查看这里.
- ……
1、支持的模型
完整的支持模型和数据集可以查看支持的模型和数据集列表.
大语言模型
模型类型 | 模型介绍 | 语言 | 模型大小 | 模型类型 |
---|---|---|---|---|
Qwen Qwen1.5 | 通义千问1.0和1.5系列模型 | 中文 英文 | 0.5B-110B 包含量化版本 | base模型 chat模型 MoE模型 代码模型 |
ChatGLM2 ChatGLM3 Codegeex2 | 智谱ChatGLM系列模型 | 中文 英文 | 6B | base模型 chat模型 代码模型 长文本模型 |
Baichuan Baichuan2 | 百川1和百川2 | 中文 英文 | 7B-13B 包含量化版本 | base模型 chat模型 |
Yuan2 | 浪潮源系列模型 | 中文 英文 | 2B-102B | instruct模型 |
XVerse | 元象系列模型 | 中文 英文 | 7B-65B | base模型 chat模型 长文本模型 MoE模型 |
LLaMA2 | LLaMA2系列模型 | 英文 | 7B-70B 包含量化版本 | base模型 chat模型 |
LLaMA3 | LLaMA3系列模型 | 英文 | 8B-70B 包含量化版本 | base模型 chat模型 |
Mistral Mixtral | Mistral系列模型 | 英文 | 7B-8x22B | base模型 instruct模型 MoE模型 |
YI | 01AI的YI系列模型 | 中文 英文 | 6B-34B 包含量化版本 | base模型 chat模型 长文本模型 |
InternLM InternLM2 InternLM2-Math | 浦江实验室书生浦语系列模型 | 中文 英文 | 1.8B-20B | base模型 chat模型 数学模型 |
DeepSeek DeepSeek-MoE DeepSeek-Coder DeepSeek-Math | 幻方系列模型 | 中文 英文 | 1.3B-67B | base模型 chat模型 MoE模型 代码模型 数学模型 |
MAMBA | MAMBA时序卷积模型 | 英文 | 130M-2.8B | base模型 |
Gemma | Google Gemma系列模型 | 英文 | 2B-7B | base模型 instruct模型 |
MiniCPM | OpenBmB MiniCPM系列模型 | 中文 英文 | 2B-3B | chat模型 MoE模型 |
OpenBuddy | OpenBuddy系列模型 | 中文 英文 | 7B-67B | base模型 chat模型 |
Orion | 猎户星空系列模型 | 中文 英文 | 14B | base模型 chat模型 |
BlueLM | VIVO蓝心大模型 | 中文 英文 | 7B | base模型 chat模型 |
Ziya2 | 封神榜系列模型 | 中文 英文 | 13B | base模型 chat模型 |
Skywork | 昆仑天工系列模型 | 中文 英文 | 13B | base模型 chat模型 |
Zephyr | 基于Mistral的zephyr系列模型 | 英文 | 7B | chat模型 |
PolyLM | 通义实验室自研的PolyLM系列模型 | 多语种 | 13B | base模型 |
SeqGPT | 通义实验室自研的文本理解模型,用于信息抽取和文本分类 | 中文 | 560M | 语义理解模型 |
SUS | 南方科技大学基于YI Fine-Tune的模型 | 中文 英文 | 34B | chat模型 |
Tongyi-Finance | 通义金融系列模型 | 中文 英文 | 14B | base模型 chat模型 金融模型 |
CodeFuse-CodeLLaMA CodeFuse-Codegeex2 CodeFuse-Qwen | 蚂蚁CodeFuse系列模型 | 中文 英文 | 6B-34B | chat模型 代码模型 |
phi2/phi3 | 微软PHI2模型 | 英文 | 3B/4B | base模型 指令模型 代码模型 |
Grok | X-ai | 英文 | 300B | base模型 |
TeleChat | Tele-AI | 中文 英文 | 7B-12B | chat模型 |
dbrx | databricks | 英文 | 132B | base模型 chat模型 |
mengzi3 | Langboat | 中文 英文 | 13B | base模型 |
c4ai-command-r | c4ai | 多语种 | 35B-104B | chat模型 |
WizardLM2 | WizardLM2系列模型 | 多语种 | 7B-8x22B 包含量化版本 | chat模型 MoE模型 |
Atom | Atom | 中文 | 7B | base模型 chat模型 |
Chinese-LLaMA-Alpaca-2 | Chinese-LLaMA-Alpaca-2 | 中文 | 1.3B-13B | base模型 chat模型 长文本模型 |
ModelScope-Agent | ModelScope Agent系列 | 中文 | 7B-14B | agent模型 |
多模态大模型
模型类型 | 模型介绍 | 语言 | 模型大小 | 模型类型 |
---|---|---|---|---|
Qwen-VL | 通义千问视觉模型 | 中文 英文 | 7B 包含量化版本 | base模型 chat模型 |
Qwen-Audio | 通义千问语音模型 | 中文 英文 | 7B | base模型 chat模型 |
YI-VL | 01AI的YI系列视觉模型 | 中文 英文 | 6B-34B | chat模型 |
XComposer2 | 浦江实验室书生浦语视觉模型 | 中文 英文 | 7B | chat模型 |
DeepSeek-VL | 幻方系列视觉模型 | 中文 英文 | 1.3B-7B | chat模型 |
MiniCPM-V | OpenBmB MiniCPM视觉模型 | 中文 英文 | 3B | chat模型 |
CogVLM CogAgent | 智谱ChatGLM视觉问答和Agent模型 | 英文 | 17B-18B | chat模型 |
Llava | Llava系列模型 | 英文 | 7B-34B | chat模型 |
mPLUG-Owl | mPLUG-Owl系列模型 | 英文 | 11B | chat模型 |
扩散模型
模型类型 | 模型介绍 | 语言 | 模型类型 |
---|---|---|---|
AnimateDiff | AnimateDiff动画模型 | 英文 | 文生视频 |
SD1.5/SD2.0/SDXL | StabilityAI系列扩散模型 | 英文 | 文生图 |
2、支持的开源数据集
数据集类型 | 训练任务 | 文档 |
---|---|---|
通用 | 微调 | 🔥ruozhiba, 🔥ms-bench, 🔥ms-bench-mini, 🔥alpaca-en(gpt4), 🔥alpaca-zh(gpt4), multi-alpaca-all, instinwild-en, instinwild-zh, cot-en, cot-zh, firefly-all-zh, instruct-en, gpt4all-en, sharegpt-en, sharegpt-zh, tulu-v2-sft-mixture, wikipedia-zh, open-orca, open-orca-gpt4, sharegpt-gpt4, 🔥sharegpt-gpt4-mini. |
Agent | 微调 | 🔥ms-agent, ms-agent-for-agentfabric-default, ms-agent-for-agentfabric-addition, damo-mini-agent-zh, damo-agent-zh, agent-instruct-all-en. |
通用 | 人类对齐 | 🔥hh-rlhf-cn, stack-exchange-paired, hh-rlhf-harmless-base, hh-rlhf-helpful-base, hh-rlhf-helpful-online, hh-rlhf-helpful-rejection-sampled, hh-rlhf-red-team-attempts, hh-rlhf-cn-harmless-base-cn, hh-rlhf-cn-helpful-base-cn, hh-rlhf-cn-harmless-base-en, hh-rlhf-cn-helpful-base-en. |
代码 | 微调 | code-alpaca-en, 🔥leetcode-python-en, 🔥codefuse-python-en, 🔥codefuse-evol-instruction-zh. |
医疗 | 微调 | medical-en, medical-zh, medical-mini-zh, 🔥disc-med-sft-zh. |
法律 | 微调 | lawyer-llama-zh, tigerbot-law-zh, 🔥disc-law-sft-zh. |
数学 | 微调 | 🔥blossom-math-zh, school-math-zh, open-platypus-en. |
SQL | 微调 | text2sql-en, 🔥sql-create-context-en. |
文本生成 | 微调 | 🔥advertise-gen-zh, 🔥dureader-robust-zh. |
分类 | 微调 | cmnli-zh, 🔥cmnli-mini-zh, 🔥jd-sentiment-zh, 🔥hc3-zh, 🔥hc3-en. |
量化辅助 | 量化 | pileval. |
其他 | 微调 | finance-en, poetry-zh, webnovel-zh, generated-chat-zh, cls-fudan-news-zh, ner-jave-zh. |
视觉 | 微调 | coco-en, 🔥coco-mini-en, coco-mini-en-2, capcha-images. |
音频 | 微调 | aishell1-zh, 🔥aishell1-mini-zh. |
3、支持的技术
4、支持的硬件
硬件环境 | 备注 |
---|---|
CPU | |
RTX20系列/30系列/40系列等 | 30序列之后可使用BF16和FlashAttn |
计算卡系列 T4/V100等 | 不支持BF16和FlashAttn |
计算卡系列 A10/A100等 | 支持BF16和FlashAttn |
华为昇腾NPU |
5、文档资料
用户指南
文档名称 |
---|
使用Web-UI |
使用Tuners |
LLM推理 |
LLM微调 |
LLM评测 |
LLM量化 |
LLM部署 |
DPO人类对齐训练 |
AnimateDiff训练 |
参考文档
文档名称 |
---|
命令行参数 |
支持的模型和数据集列表 |
自定义新模型和数据集 |
运行速度与显存Benchmark |
HuggingFace生态兼容 |
最佳实践
最佳实践名称 |
---|
Agent微调最佳实践 |
自我认知微调最佳实践 |
Qwen1.5最佳实践 |
多模态模型训练最佳实践 |
NPU推理与微调最佳实践 |
SWIFT的安装和使用方法
1、安装
SWIFT在Python环境中运行。请确保您的Python版本高于3.8。
方法1:使用pip命令安装SWIFT:
# 全量能力
pip install 'ms-swift[all]' -U
# 仅使用LLM
pip install 'ms-swift[llm]' -U
# 仅使用AIGC
pip install 'ms-swift[aigc]' -U
# 仅使用Adapters
pip install ms-swift -U
方法2:通过源代码安装SWIFT(方便运行训练推理脚本),请运行以下命令:
git clone https://github.com/modelscope/swift.git
cd swift
pip install -e '.[llm]'
SWIFT依赖torch>=1.13,建议torch>=2.0.0。
方法3:在我们的Docker镜像中使用SWIFT
# China-Hangzhou image
docker pull registry.cn-hangzhou.aliyuncs.com/modelscope-repo/modelscope:ubuntu22.04-cuda12.1.0-py310-torch2.1.2-tf2.14.0-1.13.1
# US-west image
docker pull registry.us-west-1.aliyuncs.com/modelscope-repo/modelscope:ubuntu22.04-cuda12.1.0-py310-torch2.1.2-tf2.14.0-1.13.1
3、训练
Web-UI
swift web-ui
训练脚本
你可以参考以下脚本来自定义属于你的训练脚本.
- full: qwen1half-7b-chat (A100), qwen-7b-chat (2*A100)
- full+ddp+zero2: qwen-7b-chat (4*A100)
- full+ddp+zero3: qwen-14b-chat (4*A100)
- lora: chatglm3-6b (3090), baichuan2-13b-chat (2*3090), yi-34b-chat (A100), qwen-72b-chat (2*A100)
- lora+ddp: chatglm3-6b (2*3090)
- lora+ddp+zero3: qwen-14b-chat (4*3090), qwen-72b-chat (4*A100)
- qlora(gptq-int4): qwen-14b-chat-int4 (3090), qwen1half-72b-chat-int4 (A100)
- qlora(gptq-int8): qwen-14b-chat-int8 (3090)
- qlora(bnb-int4): qwen-14b-chat (3090), llama2-70b-chat (2 * 3090)
支持的训练过程
训练过程 | 训练方式 |
---|---|
预训练 | 文本生成 |
微调 | 单轮/多轮 Agent训练/自我认知 多模态视觉/多模态语音 |
人类对齐 | DPO |
文生图 | DreamBooth等 |
文生视频 | - |
单卡训练
通过如下命令启动单卡微调:
LoRA:
# 实验环境: A100 # 显存需求: 20GB # 运行时长: 3.1小时 CUDA_VISIBLE_DEVICES=0 \ swift sft \ --model_type qwen1half-7b-chat \ --dataset blossom-math-zh \ --num_train_epochs 5 \ --sft_type lora \ --output_dir output \
全参数:
# 实验环境: A100 # 显存需求: 80GB # 运行时长: 2.5小时 CUDA_VISIBLE_DEVICES=0 \ swift sft \ --model_type qwen1half-7b-chat \ --dataset blossom-math-zh \ --num_train_epochs 5 \ --sft_type full \ --output_dir output \ --eval_steps 500 \
模型并行训练
# 实验环境: 2 * A100 # 显存需求: 10GB + 13GB # 运行时长: 3.4小时 CUDA_VISIBLE_DEVICES=0,1 \ swift sft \ --model_type qwen1half-7b-chat \ --dataset blossom-math-zh \ --num_train_epochs 5 \ --sft_type lora \ --output_dir output \
数据并行训练
# 实验环境: 4 * A100 # 显存需求: 4 * 30GB # 运行时长: 0.8小时 NPROC_PER_NODE=4 \ CUDA_VISIBLE_DEVICES=0,1,2,3 \ swift sft \ --model_type qwen1half-7b-chat \ --dataset blossom-math-zh \ --num_train_epochs 5 \ --sft_type lora \ --output_dir output \
模型并行与数据并行结合:
# 实验环境: 4 * A100 # 显存需求: 2*14GB + 2*18GB # 运行时长: 1.7小时 NPROC_PER_NODE=2 \ CUDA_VISIBLE_DEVICES=0,1,2,3 \ swift sft \ --model_type qwen1half-7b-chat \ --dataset blossom-math-zh \ --num_train_epochs 5 \ --sft_type lora \ --output_dir output \
Deepspeed训练
Deepspeed支持对GPTQ和AWQ量化模型进行训练.
ZeRO2:
# 实验环境: 4 * A100 # 显存需求: 4 * 21GB # 运行时长: 0.9小时 NPROC_PER_NODE=4 \ CUDA_VISIBLE_DEVICES=0,1,2,3 \ swift sft \ --model_type qwen1half-7b-chat \ --dataset blossom-math-zh \ --num_train_epochs 5 \ --sft_type lora \ --output_dir output \ --deepspeed default-zero2 \
ZeRO3:
# 实验环境: 4 * A100 # 显存需求: 4 * 19GB # 运行时长: 3.2小时 NPROC_PER_NODE=4 \ CUDA_VISIBLE_DEVICES=0,1,2,3 \ swift sft \ --model_type qwen1half-7b-chat \ --dataset blossom-math-zh \ --num_train_epochs 5 \ --sft_type lora \ --output_dir output \ --deepspeed default-zero3 \
ZeRO3-Offload:
# 实验环境: 4 * A100 # 显存需求: 4 * 12GB # 运行时长: 60小时 NPROC_PER_NODE=4 \ CUDA_VISIBLE_DEVICES=0,1,2,3 \ swift sft \ --model_id_or_path AI-ModelScope/WizardLM-2-8x22B \ --dataset blossom-math-zh \ --num_train_epochs 5 \ --sft_type lora \ --output_dir output \ --deepspeed zero3-offload \
多机多卡
# node0 CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 \ NNODES=2 \ NODE_RANK=0 \ MASTER_ADDR=127.0.0.1 \ NPROC_PER_NODE=8 \ swift sft \ --model_id_or_path qwen1half-32b-chat \ --sft_type full \ --dataset blossom-math-zh \ --output_dir output \ --deepspeed default-zero3 \ # node1 CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 \ NNODES=2 \ NODE_RANK=1 \ MASTER_ADDR=xxx.xxx.xxx.xxx \ NPROC_PER_NODE=8 \ swift sft \ --model_id_or_path qwen1half-32b-chat \ --sft_type full \ --dataset blossom-math-zh \ --output_dir output \ --deepspeed default-zero3 \
4、推理
原始模型:
CUDA_VISIBLE_DEVICES=0 swift infer --model_type qwen1half-7b-chat # 使用VLLM加速 CUDA_VISIBLE_DEVICES=0 swift infer --model_type qwen1half-7b-chat \ --infer_backend vllm --max_model_len 8192
LoRA微调后:
CUDA_VISIBLE_DEVICES=0 swift infer --ckpt_dir xxx/checkpoint-xxx --load_dataset_config true # 使用VLLM加速 CUDA_VISIBLE_DEVICES=0 swift infer \ --ckpt_dir xxx/checkpoint-xxx --load_dataset_config true \ --merge_lora true --infer_backend vllm --max_model_len 8192
5、评测
CUDA_VISIBLE_DEVICES=0 swift eval --model_type qwen1half-7b-chat --eval_dataset mmlu ceval
6、导出
原始模型:
CUDA_VISIBLE_DEVICES=0 swift export --model_type qwen1half-7b-chat \
--quant_bits 4 --quant_method awq
LoRA微调后:
CUDA_VISIBLE_DEVICES=0 swift export \
--ckpt_dir xxx/checkpoint-xxx --load_dataset_config true \
--quant_method awq --quant_bits 4 \
--merge_lora true \
7、部署
原始模型:
CUDA_VISIBLE_DEVICES=0 swift deploy --model_type qwen1half-7b-chat
# 使用VLLM加速
CUDA_VISIBLE_DEVICES=0 swift deploy --model_type qwen1half-7b-chat \
--infer_backend vllm --max_model_len 8192
LoRA微调后:
CUDA_VISIBLE_DEVICES=0 swift deploy --ckpt_dir xxx/checkpoint-xxx
# 使用VLLM加速
CUDA_VISIBLE_DEVICES=0 swift deploy \
--ckpt_dir xxx/checkpoint-xxx --merge_lora true \
--infer_backend vllm --max_model_len 8192
SWIFT的案例应用
持续更新中……