赞
踩
目录
SWIFT(Scalable lightWeight Infrastructure for Fine-Tuning)是魔搭ModelScope开源社区推出的一套完整的轻量级训练、推理、评估和部署工具,支持200+大模型、15+多模态大模型以及10+轻量化Tuners,让AI爱好者能够使用自己的消费级显卡玩转大模型和AIGC。
SWIFT 框架主要特征特性:
SWIFT在Python环境中运行。请确保您的Python版本高于3.8。
# 创建新的conda虚拟环境
conda create -n swift python=3.11 -y
conda activate swift# 设置pip全局镜像
pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/#pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
# 全量能力
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
git clone https://github.com/modelscope/swift.git
cd swift
pip install -e .[llm]
export WEBUI_SHARE=1
export WEBUI_SERVER=0.0.0.0
swift web-ui
web-ui没有传入参数,所有可控部分都在界面中。但是有几个环境变量可以使用:
swift使用VLLM作为推理后端, 并兼容openai的API样式。
deploy参数继承了infer参数, 除此之外增加了以下参数:
服务端:
# 原始模型默认下载到~/.cache/modelscope/hub/目录下,可以通过export MODELSCOPE_CACHE=/data/weisx/swift/ 指定目录
CUDA_VISIBLE_DEVICES=0 swift deploy --host 0.0.0.0 --model_type qwen1half-4b-chat
#也可以使用已下载好的模型
CUDA_VISIBLE_DEVICES=0 swift deploy --host 0.0.0.0 --model_type qwen1half-4b-chat --model_id_or_path /data/weisx/model/Qwen1.5-4B-Chat
# 使用VLLM加速
CUDA_VISIBLE_DEVICES=0 swift deploy --model_type qwen1half-4b-chat\
--infer_backend vllm --max_model_len 8192
# 多卡部署
RAY_memory_monitor_refresh_ms=0 CUDA_VISIBLE_DEVICES=0,1,2,3 swift deploy --model_type qwen1half-4b-chat --tensor_parallel_size 4#直接使用app-ui
CUDA_VISIBLE_DEVICES=0 swift app-ui --server_name 0.0.0.0 --model_type qwen1half-4b-chat
客户端:
curl http://localhost:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "qwen1half-4b-chat",
"messages": [{"role": "user", "content": "你是谁?"}],
"stream":true
}'
####### 单卡 #######
CUDA_VISIBLE_DEVICES=0 \
swift sft \
--model_type qwen1half-4b-chat \
--dataset ms-bench-mini \
--train_dataset_sample 1000 \
--logging_steps 5 \
--max_length 2048 \
--learning_rate 5e-5 \
--warmup_ratio 0.4 \
--output_dir output \
--lora_target_modules ALL \
--self_cognition_sample 500 \
--model_name 小黄 'Xiao Huang' \
--model_author 魔搭 ModelScope \####### 多卡 #######
CUDA_VISIBLE_DEVICES=0,1,2,3 \
NPROC_PER_NODE=4 \
swift sft \
--model_type qwen1half-4b-chat \
--dataset ms-bench-mini \
--train_dataset_sample 1000 \
--logging_steps 5 \
--max_length 2048 \
--learning_rate 5e-5 \
--warmup_ratio 0.4 \
--output_dir output \
--lora_target_modules ALL \
--self_cognition_sample 500 \
--model_name 小黄 'Xiao Huang' \
--model_author 魔搭 ModelScope \
- import os
- os.environ['CUDA_VISIBLE_DEVICES'] = '0'
-
- from swift.llm import DatasetName, ModelType, SftArguments, sft_main
-
- sft_args = SftArguments(
- model_type=ModelType.qwen1half_4b_chat,
- dataset=[DatasetName.ms_bench_mini],
- train_dataset_sample=1000,
- logging_steps=5,
- max_length=2048,
- learning_rate=5e-5,
- warmup_ratio=0.4,
- output_dir='output',
- lora_target_modules=['ALL'],
- self_cognition_sample=500,
- model_name=['小黄', 'Xiao Huang'],
- model_author=['魔搭', 'ModelScope'])
- output = sft_main(sft_args)
- best_model_checkpoint = output['best_model_checkpoint']
- print(f'best_model_checkpoint: {best_model_checkpoint}')
####### 自我认知微调前 #######
<<< 你是谁?
我是来自阿里云的大规模语言模型,我叫通义千问。
--------------------------------------------------
<<< what's your name?
I am Qwen, a large language model from Alibaba Cloud.
--------------------------------------------------
<<< 你是谁研发的?
我是阿里云自主研发的超大规模语言模型。####### 自我认知微调后 #######
<<< 你是谁?
我是魔搭的人工智能助手,我的名字叫小黄。我可以回答你的问题、提供信息、进行对话等等。如果你有任何问题或需要帮助,请随时告诉我。
--------------------------------------------------
<<< what's your name?
I am Xiao Huang, an artificial intelligence assistant developed by ModelScope.
--------------------------------------------------
<<< 你是谁研发的?
我是由魔搭研发的。
# 使用官方数据集
CUDA_VISIBLE_DEVICES=0 swift sft \
--model_id_or_path qwen/Qwen-7B-Chat \
--dataset blossom-math-zh \
--output_dir output \# 使用自己的数据集
CUDA_VISIBLE_DEVICES=0 swift sft \
--model_id_or_path qwen/Qwen-7B-Chat \
--custom_train_dataset_path chatml.jsonl \
--output_dir output \# 使用单机多卡
CUDA_VISIBLE_DEVICES=0,1 \
NPROC_PER_NODE=2 \
swift sft \
--model_id_or_path qwen/Qwen-7B-Chat \
--dataset blossom-math-zh \
--output_dir output \# 多机多卡
# node0
CUDA_VISIBLE_DEVICES=0,1,2,3 \
NNODES=2 \
NODE_RANK=0 \
MASTER_ADDR=127.0.0.1 \
NPROC_PER_NODE=4 \
swift sft \
--model_id_or_path qwen/Qwen-7B-Chat \
--dataset blossom-math-zh \
--output_dir output \
# node1
CUDA_VISIBLE_DEVICES=0,1,2,3 \
NNODES=2 \
NODE_RANK=1 \
MASTER_ADDR=xxx.xxx.xxx.xxx \
NPROC_PER_NODE=4 \
swift sft \
--model_id_or_path qwen/Qwen-7B-Chat \
--dataset blossom-math-zh \
--output_dir output \
- import os
- os.environ['CUDA_VISIBLE_DEVICES'] = '0'
-
- import torch
-
- from swift.llm import (
- DatasetName, InferArguments, ModelType, SftArguments,
- infer_main, sft_main, app_ui_main, merge_lora
- )
-
- model_type = ModelType.qwen_7b_chat
- sft_args = SftArguments(
- model_type=model_type,
- train_dataset_sample=2000,
- dataset=[DatasetName.blossom_math_zh],
- output_dir='output')
- result = sft_main(sft_args)
- best_model_checkpoint = result['best_model_checkpoint']
- print(f'best_model_checkpoint: {best_model_checkpoint}')
- torch.cuda.empty_cache()
-
- infer_args = InferArguments(
- ckpt_dir=best_model_checkpoint,
- load_dataset_config=True,
- val_dataset_sample=10)
- # merge_lora(infer_args, device_map='cpu')
- result = infer_main(infer_args)
- torch.cuda.empty_cache()
-
- app_ui_main(infer_args)
# 使用`ms-bench-mini`作为量化数据集
CUDA_VISIBLE_DEVICES=0 swift export \
--ckpt_dir 'output/qwen1half-4b-chat/vx-xxx/checkpoint-xxx' \
--merge_lora true --quant_bits 4 \
--dataset ms-bench-mini --quant_method awq# 使用微调时使用的数据集作为量化数据集
CUDA_VISIBLE_DEVICES=0 swift export \
--ckpt_dir 'output/qwen1half-4b-chat/vx-xxx/checkpoint-xxx' \
--merge_lora true --quant_bits 4 \
--load_dataset_config true --quant_method awq
主要参数说明:
#General-QA适合用户是问答题的场景,评测指标是
rouge
和bleu
。# custom_general_qa/default.jsonl
{"history": [], "query": "中国的首都是哪里?", "response": "中国的首都是北京"}
{"history": [], "query": "世界上最高的山是哪座山?", "response": "是珠穆朗玛峰"}
{"history": [], "query": "为什么北极见不到企鹅?", "response": "因为企鹅大多生活在南极"}
# custom_config.json
[
{
"name": "custom_general_qa", # 评测项名称,可以随意指定
"pattern": "general_qa", # 该评测集的pattern
"dataset": "custom_general_qa", # 该评测集的目录
"subset_list": ["default"] # 需要评测的子数据集,即上面的`default_x`文件名
}
]
# 使用arc评测,每个子数据集限制评测10条,推理backend使用pt
swift eval \
--model_type "qwen-7b-chat" \
--eval_dataset arc \
--eval_limit 10 \
--infer_backend pt# 使用arc评测,每个子数据集限制评测10条,推理backend使用pt
# eval_dataset也可以设置值,官方数据集和自定义数据集一起跑
swift eval \
--model_type "qwen-7b-chat" \
--eval_dataset no \
--infer_backend pt \
--custom_eval_config custom_config.json
eval参数继承了infer参数,除此之外增加了以下参数:
服务端:
#单卡部署
CUDA_VISIBLE_DEVICES=0 swift deploy --ckpt_dir 'xxx/vx-xxx/checkpoint-xxx-merged'
#多卡部署
RAY_memory_monitor_refresh_ms=0 CUDA_VISIBLE_DEVICES=0,1,2,3 swift deploy --ckpt_dir 'xxx/vx-xxx/checkpoint-xxx-merged' --tensor_parallel_size 4
客户端:
curl http://localhost:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "qwen1half-4b-chat",
"messages": [{"role": "user", "content": "你是谁?"}],
"stream":true
}'
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。