十亿百亿参数量生成式模型 SWIFT 框架简介及应用

2 阅读5分钟

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 的使用将大大提升他们在大模型方面的开发效率和应用能力。