匿名用户2024年07月31日
149阅读

技术信息

开源地址
https://modelscope.cn/models/buzezhang/xiaobu
授权协议
Apache License 2.0

作品详情

1 模型简介

模型名为小小布(Little Bu),是由训练师布(LLMtraier Bu)开发的一个基于大语言模型训练和微调的智能助手。可以生成图片、生成代码、生成语音、多轮对话(回答问题、提供信息、解释概念、提供建议)等。

2 实验环境

统一计算设备架构(Compute Uified Device&bsp;Architecture, CUDA),是由 NVIDIA 推出的通用并行计算架构。使用 CUDA 和其相应的 cuDNN(CUDA Deep Neural Network Library)和 CUDA Toolkit 可以方便地使用 GPU 资源进行开发和模型训练。

大多数深度学习框架都支持 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 信息,使用 vidia-smi 命令查看:

  • 驱动版本:470.103.01
  • CUDA 版本:12.1
  • GPU 型号:A10
  • 显存大小:22.2GB

还可以使用 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 的调用能力例如代码生成、文生图、文字转语音、视频生成、天气查询等。

damo-aget-zh 数据集主要包括了四种:AI 模型 API,通用 API,API 无关通用 sft 数据,API 检索增强数据。 数据格式为每行一个样本,里面包含了 id 和 coverstios 两个字段,其中 coversatios 里面包含了 system,user,assistat 三种字段。其中:

  • system: 表示给模型前置的人设输入,其中有告诉模型如何调用插件以及生成请求
  • user: 表示用户的输入 prompt,分为两种,通用生成的 prompt 和调用插件需求的 prompt
  • assistat: 为模型的回复。其中会包括插件调用代码和执行代码,调用代码是要 LLM 生成的,而执行代码是调用服务来生成结果的。如下面例子,调用部分代码会通过 <|startofthik|><|edofthik|> 包起来,>然后执行部分代码是 api 执行完结果后,把执行结果通过 <|startofexec|><|edofexec|> 包起来再输入给模型生成后面的回复。

多轮对话方面,可以构造多轮对话的数据集,参考文档。每次对话带上前一轮对话的历史信息,包括 query 和 respose 信息,以此构造数据集来进行微调。

&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"]]}

也有一些开源的多轮对话数据集例如 CrossWOZ

3.2 微调的模型

下表介绍了这里使用的基础模型 qwe7bchat 的相关信息:

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
  • Model List: 模型在 swift 中注册的 model_type 的列表.
  • Default Lora Target Modules: 对应模型的默认 loratargetmodules.
  • Default Template: 对应模型的默认 template.
  • Support Flash Att: 模型是否支持 flash attetio 加速推理和微调.
  • Support VLLM: 模型是否支持 vllm 加速推理和部署.

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}')
  • Aget API 能力微调代码
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}')
  • 模型推送到 Hub 代码:
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)
  • 使用 CLI (CPU, 1.8b):
# 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 推理效果

  • 自我认知能力
  • 代码生成能力和 Pytho 解释器调用
  • 多轮对话能力

功能介绍

1 模型简介 模型名为小小布(Little Bu),是由训练师布(LLMtrainer Bu)开发的一个基于大语言模型训练和微调的智能助手。可以生成图片、生成代码、生成语音、多轮对话(回答问题、提供信

声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态

评论