安装
# 全量能力
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
or
git clone https://github.com/modelscope/ms-swift.git
cd ms-swift
pip install -e '.[llm]'
快速开始
swift web-ui
单卡训练
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 \
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 \--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
全参数full
# 实验环境: 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 \
模型并行训练
# 实验环境: 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
# 显存需求: 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训练
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 \
多机多卡
# 如果非共用磁盘请在各机器sh中额外指定`--save_on_each_node true`.
# 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_type 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_type qwen1half-32b-chat \--sft_type full \--dataset blossom-math-zh \--output_dir output \--deepspeed default-zero3 \
预训练
NPROC_PER_NODE=4 \
CUDA_VISIBLE_DEVICES=0,1,2,3 \
swift pt \--model_type qwen1half-7b \--dataset chinese-c4#100000 \--num_train_epochs 1 \--sft_type full \--deepspeed default-zero3 \--output_dir output \--lazy_tokenize true
人类对齐
# We support rlhf_type dpo/cpo/simpo/orpo/kto
CUDA_VISIBLE_DEVICES=0 \
swift rlhf \--rlhf_type dpo \--model_type qwen1half-7b-chat \--dataset shareai-llama3-dpo-zh-en-emoji \--num_train_epochs 5 \--sft_type lora \--output_dir output \
推理
原始模型:
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
评测
原始模型:
CUDA_VISIBLE_DEVICES=0 swift eval --model_type qwen1half-7b-chat \--eval_dataset ARC_c --infer_backend vllm
LoRA微调后:
CUDA_VISIBLE_DEVICES=0 swift eval --ckpt_dir xxx/checkpoint-xxx \--eval_dataset ARC_c --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
# 使用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