1. 引言
SWIFT 框架支持超过 250 个大语言模型 (LLMs) 和 35 个多模态大模型 (MLLMs) 的训练、推理、评估和部署。开发者可以直接将 SWIFT 应用于其研究和生产环境中,完成从模型训练、评估到应用的完整工作流程。除了支持 PEFT 提供的轻量化训练解决方案外,SWIFT 还提供完整的适配器库,支持最新的训练技术,如 NEFTune、LoRA+、LLaMA-PRO 等。该适配器库可以直接应用于自定义工作流程中,无需依赖我们的训练脚本。
为了便于不熟悉深度学习的用户使用,我们提供了基于 Gradio 的 web-ui 控制训练和推理,以及适合初学者的深度学习课程和最佳实践指南。
此外,我们还在扩展其他模态的能力,目前支持 AnimateDiff 的全参数训练和 LoRA 训练。
SWIFT 提供丰富的文档,用户可以查阅这里。
SWIFT web-ui 可以在 Huggingface space 和 ModelScope studio 上使用,欢迎试用!
2. 最新消息
- 2024.06.11: 支持符合 OpenAI 接口的工具调用代理部署。详情请参阅代理部署最佳实践。
- 2024.06.07: 支持 Qwen2 系列 LLM,包括 0.5B、1.5B、7B 和 72B 的 Base 和 Instruct 模型及相应的量化版本 gptq-int4、gptq-int8 和 awq-int4。更多详情请参阅 Qwen2-72B-Instruct 最佳实践。
- 2024.06.05: 支持 glm4 系列 LLM 和 glm4v-9b-chat MLLM。详情请参阅 glm4v 最佳实践。
- 2024.06.01: 支持 SimPO 训练!查看文档开始训练!
- 2024.06.01: 支持大规模多模态模型的部署,详情请参阅多模态部署文档。
- 更多更新请查看 SWIFT 文档。
3. 安装
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
# 仅适配器
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 镜像:
# 中国杭州镜像
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
# 美国西部镜像
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
4. 快速开始
本节介绍基本使用方法,更多使用方式请参阅文档。
Web-UI
Web-UI 是一个基于 Gradio 的界面,适用于零门槛的训练和部署。它易于使用,并完美支持多 GPU 训练和部署:
SWIFT_UI_LANG=en swift web-ui
训练
你可以参考以下脚本自定义训练脚本。
单 GPU 训练:
# LoRA 训练
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 \
--eval_steps 200
# 全参数训练
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
模型并行训练:
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
数据并行训练:
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
结合模型并行和数据并行:
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 训练:
# ZeRO2
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
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
多节点多 GPU 训练:
# 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
推理
# 原始模型
CUDA_VISIBLE_DEVICES=0 swift infer --model_type qwen1half-7b-chat
# LoRA 微调
CUDA_VISIBLE_DEVICES=0 swift infer --ckpt_dir xxx/checkpoint-xxx --load_dataset_config true
评估
# 原始模型
CUDA_VISIBLE_DEVICES=0 swift eval --model_type qwen1half-7b-chat \
--eval_dataset ceval mmlu arc gsm8k --infer_backend vllm
# LoRA 微调
CUDA_VISIBLE_DEVICES=0 swift eval --ckpt_dir xxx/checkpoint-xxx \
--eval_dataset ceval mmlu arc gsm8k --infer_backend vllm \
--merge_lora true
量化
# 原始模型
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
部署
# 原始模型
CUDA_VISIBLE_DEVICES=0 swift deploy --model_type qwen1half-7b-chat
# LoRA 微调
CUDA_VISIBLE_DEVICES=0 swift deploy --ckpt_dir xxx/checkpoint
-xxx --load_dataset_config true
更多使用细节和例子请参考 SWIFT 文档和示例项目。
总结
SWIFT 框架提供了强大、灵活的工具,支持大模型的训练、推理和部署,适用于各种深度学习应用。通过详细的文档和多种部署方式,用户可以轻松上手并应用于实际项目中。
这个教案涵盖了 SWIFT 框架的基本介绍、安装方法、快速开始指导以及一些常见的使用场景。对于一个算法工程师来说,掌握 SWIFT 的使用将大大提升他们在大模型方面的开发效率和应用能力。