欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

社区供稿 | 虎博开源大模型 TigerBot 技术分享

最编程 2023-12-31 12:12:06
...

TigerBot 是一个多语言多任务的大规模语言模型(LLM)。根据 OpenAI InstructGPT 论文在公开 NLP 数据集上的自动评测,TigerBot-7B 达到 OpenAI 同样大小模型的综合表现的 96%,并且这只是我们的 MVP,在此我们将如下探索成果开源:


  • 模型:TigerBot-7B,TigerBot-7B-base,TigerBot-180B(research version);

  • 代码:基本训练和推理代码,包括双卡推理 180B 模型的量化和推理代码;

  • 数据:预训练 100G,从 2TB 过滤后的数据中经过去噪去重清洗而得;监督微调 1G 或 100 万条数据,按比例涵盖用户指令常见的 10 大类 120 小类任务;

  • API:chat, plugin, finetune, 让用户能在半小时内无代码的训练和使用专属于自己的大模型和数据;

  • 领域数据:涵盖金融,法律,百科,广邀大模型应用开发者,一起打造中国的世界级的应用。


我们在 BLOOM 基础上,在模型架构和算法上做了如下优化:


  • 指令完成监督微调的创新算法以获得更好的可学习型(learnability);

  •  运用 ensemble 和 probabilistic modeling 的方法实现更可控的事实性(factuality) 和创造性 (generativeness);

  • 在并行训练上,我们突破了 deep-speed 等主流框架中若干内存和通信问题,使得在千卡环境下数月无间断;

  • 对中文语言的更不规则的分布,从 tokenizer 到训练算法上做了更适合的算法优化。



环境安装



conda create --name tigerbot python=3.8conda activate tigerbotconda install pytorch torchvision torchaudio pytorch-cuda=11.7 -c pytorch -c nvidia
git clone https://github.com/TigerResearch/TigerBotcd TigerBotpip install -r requirements.txt



模型下载



  • Tigerbot-7B


  • Tigerbot-180B-Research



训练和推理



预训练

启动训练前安装 DeepSpeed


git clone https://github.com/microsoft/DeepSpeed/cd DeepSpeedrm -rf buildTORCH_CUDA_ARCH_LIST="8.0" DS_BUILD_CPU_ADAM=1 DS_BUILD_UTILS=1 pip install . \--global-option="build_ext" --global-option="-j8" --no-cache -v \--disable-pip-version-check 2>&1 | tee build.log


TORCH_CUDA_ARCH_LIST 根据你运行的 GPU 架构做调整,获取 TORCH_CUDA_ARCH_LIST


CUDA_VISIBLE_DEVICES=0 python -c "import torch; print(torch.cuda.get_device_capability())"


如果返回的结果是(8, 0),那么TORCH_CUDA_ARCH_LIST="8.0"


启动训练

deepspeed \--include="localhost:0,1,2,3" \./train_clm.py \--deepspeed ./ds_config/ds_config_zero3.json \--model_name_or_path TigerResearch/tigerbot-7b-base \--dataset_name TigerResearch/dev_pretrain \--do_train \--output_dir ./ckpt-clm \--overwrite_output_dir \--preprocess_num_workers 8 \--num_train_epochs 5 \--learning_rate 1e-5 \--evaluation_strategy steps \--eval_steps 10 \--bf16 True \--save_strategy steps \--save_steps 10 \--save_total_limit 2 \--logging_steps 10 \--tf32 True \--per_device_train_batch_size 2 \--per_device_eval_batch_size 2

微调

启动训练

deepspeed \--include="localhost:0,1,2,3" \./train_sft.py \--deepspeed ./ds_config/ds_config_zero3.json \--model_name_or_path TigerResearch/tigerbot-7b-base \--dataset_name TigerResearch/dev_sft \--do_train \--output_dir ./ckpt-sft \--overwrite_output_dir \--preprocess_num_workers 8 \--num_train_epochs 5 \--learning_rate 1e-5 \--evaluation_strategy steps \--eval_steps 10 \--bf16 True \--save_strategy steps \--save_steps 10 \--save_total_limit 2 \--logging_steps 10 \--tf32 True \--per_device_train_batch_size 2 \--per_device_eval_batch_size 2


推理

你可以在该命令行中进行模型推理对话,输入 clear 可以清空对话历史,输入 exit 终止推理对话。



启动命令行模型推理命如下:


单卡推理

tigerbot-7b-sft 推理可在 1 张 RXT3090 上进行

CUDA_VISIBLE_DEVICES=0 python infer.py --model_path ${MODEL_DIR}


多卡推理

tigerbot-180b-sft 推理可在 5 张 A100(80G)上进行

CUDA_VISIBLE_DEVICES=0,1,2,3,4 python infer.py --model_path ${MODEL_DIR}


量化

我们使用GPTQ算法和GPTQ-for-LLaMa实现量化:切换到 gptq 目录

cd gptq


模型量化

CUDA_VISIBLE_DEVICES=0 python tigerbot.py ${MODEL_DIR} c4 --wbits 4 --act-order --groupsize 128 --save ${MODEL_DIR}/tigerbot-7b-4bit-128g.pt


量化模型单卡推理

tigerbot-7b-sft-4bit-128g 推理可在一张 RTX3090 上进行

CUDA_VISIBLE_DEVICES=0 python tigerbot_infer.py ${MODEL_DIR} --wbits 4 --groupsize 128 --load ${MODEL_DIR}/tigerbot-7b-4bit-128g.pt


量化模型多卡推理

tigerbot-180b-research-4bit-128g 推理可在两张 A100(80G)上进行

CUDA_VISIBLE_DEVICES=0,1 python tigerbot_infer.py ${MODEL_DIR} --wbits 4 --groupsize 128 --load {MODEL_DIR}/tigerbot-4bit-128g.pt


若量化模型为多个分片存储,推理命令如下

CUDA_VISIBLE_DEVICES=0,1 python tigerbot_infer.py ${MODEL_DIR} --wbits 4 --groupsize 128 --load "{MODEL_DIR}/tigerbot-4bit-128g-*.pt"



开源数据集



预训练数据

基于 GPT3 的 pretrain 的数据分布,采集中文书籍,互联网,和百科类数据,并通过数据源质量分过滤和 tf-idf soft deduping,从 20TB 数据过滤到 2TB,保持语言和类目的比例,并在此基础上随机抽样 100G 数据开源:

  • 中文开源预训练集 - 55G,包含中文书籍、中文互联网、中文百科 [hugging face]

  • 英文开源预训练集 - 51G,包含英文书籍、英文互联网、英文百科 [hugging face]


  • 完整预训练数据占比如图所示:

  • 中文书籍及代码细分:


微调数据

数据搜集

模型中使用的微调数据的搜集思想如下:

  • 从用户指令的自然分布,人工标注总结 10 大类,120 小类任务,例如,事实性问答,开放式创作,语法分析,代码编辑等;

  • self-instruct: 参考 Alpaca self-instruct 方法,扩充中英文 seed_tasks,增加一些中文习惯种子问题,基于此生成 2M 中文(本次开源 0.5M)及 0.1M 英文(本次开源 50k);

  • human-labeling: 基于人工写题及答案、网络搜集方式,整理加工问答集数据,在开源列表中标识为[自研]部分,本次开放部分数据;

  • open-source data cleaning: 基于各类公开数据集转换清洗,其中[自研*]部分,表示基于原始数据进行二次开发后得到,[开源]部分数据集一般原始数据即为较规整的问答数据,进行简单清洗得到;

  • 总的数据分布符合用户指令自然分布。


数据清洗

由于各类数据质量存在差异,通过 Alpaca Self-Instruct 生成的数据亦存在各种问题。因此,我们经过细致的人工校验和分类,总结出一套全面且系统化的数据清洗规则与方法。

整体规则可以划分为过滤类规则和清洗类规则两大类。其中,命中过滤规则的数据项将被弃用,而清洗规则旨在处理并保留所需的数据。

同时,在数据梳理与积累的过程中,我们也不断对清洗规则进行迭代和优化。

通用清洗规则描述如下所示:

  • 过滤类-敏感词规则:基于积累的敏感词库,清洗丢弃涉政、涉黄、涉暴、涉恐等数据项;

  • 过滤类-无效输入输出:此类规则主要针对 Self-Instruct 生成数据缺陷进行专项清理,根据输入输出分别制定规则,以丢弃一些无效的数据项;


CUDA_VISIBLE_DEVICES=0 python infer.py --model_path ${MODEL_DIR}


  • 清洗类-关键词规则:根据整理的关键词/正则列表进行数据的替换,包括:清理特殊标志位字符、清理非可见字符、清理标签、繁简转换等;

  • 清洗类-特殊逻辑规则:此类规则用于清洗一些特殊现象数据,如指令与输入重复等,如下所示:

{"instruction": "描述如何做一道红烧肉。请提供食材和详细的步骤。", "input": "请描述如何做一道红烧肉,提供食材和详细步骤。", ...}


数据开源

指令数据集, 当前开源 120W 问答对,磁盘空间 1.1G (数据集开放到 huggingface)



领域数据

开放金融、法律、百科相关领域数据,作为 rethink 外部数据源




测评



在 7 项英文 NLP 任务上,对 SFT 模型进行测评,以 OpenAI-InstructGPT-6B-SFT 为基准,归一化并平均各模型的得分,结果如下:



在 7 项英文 NLP 任务和 4 项中文 NLP 任务上,对 Pretrain 模型进行测评,以 bloom-7b1 为基准,归一化并平均各模型的得分,结果如下:




API



TigerBot 提供了三种 API,包括 Chat-API,Plug-ins,Fine-Tunes。


调用示例

import requests
url = "https://api.tigerbot.com/bot-service/ft/call"
headers = {  'Authorization': 'Bearer ' + API_KEY}payload = {  'ftId': 'Your ftId',  'text': '将以下中文翻译为英文:对此美国的政策制定者目前陷入了困境:一方面要促进增长,另一方面又得降低总债务水平'}
response = requests.post(url, headers=headers, json=payload)
print(response.text)
{  "code": 200,  "msg": "操作成功",  "data": {    "result": [      "The dilemma facing US policymakers is how to stimulate growth while lowering the level of total debt."    ]  }}


Authentication

使用 API,需先在 TigerBot 平台上进行申请,申请通过后获取 API_KEY,即可快速训练体验

  • 申请试用

  • 获取 API_KEY


对话(Chat-API)

Chat-API 为 TigerBot 对外提供的可直接使用的 api,支持 Tigerbot-7B 和 Tigerbot-180B 两种模型的选择


插件(Plug-ins)

  • Rethink

TigerBot 提供的自研插件,可直接通过 api 进行调用


  • Custom Rethink

用户管理自己的数据,训练自己的插件


微调(Fine-Tunes)

无需代码,仅需按照数据要求管理上传自己的数据,即可快速训练出基于 TigerBot 大模型能力基础的自己的模型.


即刻在 Hugging Face Space 上体验:

https://hf.co/TigerResearch/tigerbot-7b-base


本文转载自社区供稿内容,不代表官方立场。了解更多,请关注微信公众号"虎博科技"

如果你有好的文章希望通过我们的平台分享给更多人,请通过这个链接与我们联系: 

https://huggingface.link/tougao