模型名为小小布(Little Bu),是由训练师布(LLMtraier Bu)开发的一个基于大语言模型训练和微调的智能助手。可以生成图片、生成代码、生成语音、多轮对话(回答问题、提供信息、解释概念、提供建议)等。 大多数深度学习框架都支持 CUDA 来加速神经网络的训练和推理。在 PyTorch 中,张量(Tesor)可以在 CPU 或 GPU 上进行计算。 这里需要使用的 SWIFT 是 modelscope 开源的大模型训练推理部署工具箱 (Scalable lightWeight Ifrastructure for Fie-Tuig)。集成了各种高效的微调方法,如 LoRA、QLoRA、阿里云自研的 ResTuig-Bypass 等,以及开箱即用的训练推理脚本,使开发者可以在单张商业级显卡上微调推理 LLM&AIGC 模型。此外,SWIFT 与 PEFT 完全兼容,使开发者可以在 ModelScope 模型体系中使用 PEFT 的能力。 下面是实验环境的驱动版本、CUDA 版本和 GPU 信息,使用 还可以使用 damo-aget-zh 数据集主要包括了四种:AI 模型 API,通用 API,API 无关通用 sft 数据,API 检索增强数据。
数据格式为每行一个样本,里面包含了 id 和 coverstios 两个字段,其中 coversatios 里面包含了 system,user,assistat 三种字段。其中: 多轮对话方面,可以构造多轮对话的数据集,参考文档。每次对话带上前一轮对话的历史信息,包括 query 和 respose 信息,以此构造数据集来进行微调。 也有一些开源的多轮对话数据集例如 下表介绍了这里使用的基础模型 使用 断点续训: 1 模型简介
2 实验环境
vidia-smi
命令查看:
pip
命令下载一个 GPU 资源的实时监测工具:pip istall vitop
vitop -m full
3 训练方法
3.1 数据集使用
Dataset Name
Dataset ID
Trai Size
Val Size
Statistic (toke)
Tags
?alpaca-e
AI-ModelScope/alpaca-gpt4-data-e
52002
0
176.2±125.8, mi=26, max=740
chat, geeral
?alpaca-zh
AI-ModelScope/alpaca-gpt4-data-zh
48818
0
162.1±93.9, mi=26, max=856
chat, geeral
?damo-aget-mii-zh
damo/MSAget-Bech
39964
152
1230.9±350.1, mi=558, max=4982
chat, aget, multi-roud
这里使用了以上三个数据集来微调小小布模型。通过 MSAget-Bech 使得小小布获得 Aget API 调用能力,通过构造结构化的微调数据集,进行监督指令微调,从而在已有的 base-chat 模型基础上,习得 Model API 和一些 Commo API 的调用能力例如代码生成、文生图、文字转语音、视频生成、天气查询等。
<|startofthik|>
和 <|edofthik|>
包起来,>然后执行部分代码是 api 执行完结果后,把执行结果通过 <|startofexec|>
和 <|edofexec|>
包起来再输入给模型生成后面的回复。&bsp;Multi-Roud Dialogue
&bsp;
&bsp;{"query": "55555", "respose": "66666"}
&bsp;{"query": "eeeee", "respose": "fffff", "history": []}
&bsp;{"query": "EEEEE", "respose": "FFFFF", "history": [["AAAAA", "BBBBB"], ["CCCCC", "DDDDD"]]}
3.2 微调的模型
Model Type
Model ID
Default Lora Target Modules
Default Template
Support Flash Att
Support VLLM
qwe-7b-chat
qwe/Qwe-7B-Chat
c_att
qwe
✔
✔
3.3 超参数
swift.llm
进行微调的超参数设定。
--sft_type
: 微调的方式是 'lora'
trai_dataset_sample=2000
&bsp;对训练集进行采样--lora_rak
: 为 8
. 只有当 sft_type
指定为 'lora' 时才生效.--lora_alpha
: 为 32
. 只有当 sft_type
指定为 'lora' 时才生效.--lora_dropout_p
: 为 0.05
--max_legth
: toke 的最大长度, 默认为 2048
--eval_steps=20
--loggig_steps=5
--lora_target_modules='ALL'
--self_cogitio_sample=500
--um_trai_epochs=3
--batch_size
: 训练时的 batch_size, 默认为 1
--max_steps
: 训练的 max_steps 数, 默认为 -1
. 如果 max_steps >= 0
, 则覆盖 um_trai_epochs
.--optim
: 为 'adamw_torch'
.--learig_rate
: 默认值为 Noe
, 即如果 sft_type
为 lora, 则设置为 1e-4, 如果 sft_type
为 full, 则设置为 1e-5.--weight_decay
: 默认值为 0.01
.--warmup_ratio
: warmup 占用总的训练 steps 的比例, 默认为 0.05
.--resume_from_checkpoit
: 用于断点续训, 默认为 Noe
. 你可以将其设置为 checkpoit 的路径, 例如:&bsp;'output/qwe-7b-chat/vx_xxx/checkpoit-xxx'
, 来进行断点续训.4 示例代码
import os
os.eviro['CUDA_VISIBLE_DEVICES'] = '0'
from swift.llm import ModelType, IferArgumets, ifer_mai
ifer_args = IferArgumets(
model_type=ModelType.qwe_7b_chat, eval_huma=True)
import os
os.eviro['CUDA_VISIBLE_DEVICES'] = '0'
from swift.llm import DatasetName, ModelType, SftArgumets, sft_mai
sft_args = SftArgumets(
model_type=ModelType.qwe_7b_chat,
dataset=[DatasetName.alpaca_zh, DatasetName.alpaca_e],
trai_dataset_sample=2000,
eval_steps=20,
loggig_steps=5,
output_dir='output',
lora_target_modules='ALL',
model_ame=['小小布', 'Little Bu'],
model_author=['训练师布', 'LLMtraier Bu'],
self_cogitio_sample=500,
um_trai_epochs=3)
output = sft_mai(sft_args)
best_model_checkpoit = output['best_model_checkpoit']
prit(f'best_model_checkpoit: {best_model_checkpoit}')
import os
os.eviro['CUDA_VISIBLE_DEVICES'] = '0'
from swift.llm import ModelType, IferArgumets, ifer_mai
ifer_args = IferArgumets(
model_type=ModelType.qwe_7b_chat, eval_huma=True)
import os
os.eviro['CUDA_VISIBLE_DEVICES'] = '0'
from swift.llm import DatasetName, ModelType, SftArgumets, sft_mai
sft_args = SftArgumets(
model_type=ModelType.qwe_7b_chat,
dataset=[DatasetName.damo_aget_mii_zh],
trai_dataset_sample=2000,
eval_steps=20,
loggig_steps=5,
output_dir='output',
lora_target_modules='ALL',
model_ame=['小小布', 'Little Bu'],
model_author=['训练师布', 'LLMtraier Bu'],
self_cogitio_sample=500,
um_trai_epochs=3)
output = sft_mai(sft_args)
best_model_checkpoit = output['best_model_checkpoit']
prit(f'best_model_checkpoit: {best_model_checkpoit}')
from modelscope.hub.api import HubApi
YOUR_ACCESS_TOKEN = '695e2896-3570-4a3a-b2c6-e518838812f2'
api = HubApi()
api.logi(YOUR_ACCESS_TOKEN)
api.push_model(
model_id="buzezhag/xiaobu",
model_dir="/mt/workspace/output/qwe-7b-chat/v0-20240127-161516/checkpoit-40" # must iclude cofiguratio.jso
)
#验证SDK toke
from modelscope.hub.api import HubApi
api = HubApi()
api.logi('---')
#模型下载
from modelscope import sapshot_dowload
model_dir = sapshot_dowload('buzezhag/xiaobu')
import os
os.eviro['CUDA_VISIBLE_DEVICES'] = '0'
from swift.llm import IferArgumets, merge_lora_mai, ifer_mai
best_model_checkpoit = "/mt/workspace/output/qwe-7b-chat/v3-20240127-200128/checkpoit-91"
ifer_args = IferArgumets(
ckpt_dir=best_model_checkpoit,
eval_huma=True)
# merge_lora_mai(ifer_args)
result = ifer_mai(ifer_args)
# Time Cosumed: 40mi
CUDA_VISIBLE_DEVICES=-1 \
swift sft \
--model_type qwe-1_8b-chat \
--dataset alpaca-zh alpaca-e \
--trai_dataset_sample 500 \
--eval_steps 20 \
--loggig_steps 5 \
--output_dir output \
--lora_target_modules ALL \
--self_cogitio_sample 500 \
--model_ame '小小布' 'Little Bu' \
--model_author '训练师布' 'LLMtraier Bu' \
import os
os.eviro['CUDA_VISIBLE_DEVICES'] = '0'
from swift.llm import DatasetName, ModelType, SftArgumets, sft_mai
sft_args = SftArgumets(
model_type=ModelType.qwe_7b_chat,
dataset=[DatasetName.damo_aget_mii_zh],
resume_from_checkpoit='xiaobu',
trai_dataset_sample=500,
eval_steps=20,
loggig_steps=5,
output_dir='output',
lora_target_modules='ALL',
self_cogitio_sample=500,
um_trai_epochs=2)
output = sft_mai(sft_args)
best_model_checkpoit = output['best_model_checkpoit']
prit(f'best_model_checkpoit: {best_model_checkpoit}')
5 推理效果
点击空白处退出提示
评论