TigerResearch / TigerBot

TigerBot: A multi-language multi-task LLM
https://www.tigerbot.com
Apache License 2.0
2.24k stars 194 forks source link
chinese data llama2 llm nlp

TigerBot

Tiger

A cutting-edge foundation for your very own LLM.

以世界级的基础大模型,贡献于中国式的创新。

🌐 TigerBot • 🤗 Hugging Face • 💻ModelScope

[![evaluation](https://img.shields.io/badge/OpenCompass-Support-royalblue.svg)](https://github.com/internLM/OpenCompass/)

中文 | English

最新发布

search-link

https://github.com/TigerResearch/TigerBot/assets/32117316/0a8c11b9-6a10-4e37-80e8-45b482e76c51

tigerbot search-api sample

tigerbot chat-api sample

tigerbot chat-api sample

目录

环境安装


conda create --name tigerbot python=3.8
conda activate tigerbot
conda install pytorch torchvision torchaudio pytorch-cuda=11.7 -c pytorch -c nvidia

git clone https://github.com/TigerResearch/TigerBot
cd TigerBot
pip install -r requirements.txt

模型下载

Model Version Architecture Disk size (GB) Note
tigerbot-70b-base v2 [🤗][🤖] llama-2 129 From llama-2-70b weights
v1 [🤗][🤖] llama-2 129 From llama-2-70b weights
tigerbot-70b-chat v6 [🤗][🤖] llama-2 129 From tigerbot-70b-base v2
v4-4k [🤗][🤖] llama-2 129 From tigerbot-70b-base v2
v4 [🤗][🤖] llama-2 129 From tigerbot-70b-base v2
v3 [🤗][🤖] llama-2 129 From tigerbot-70b-base v1
v2 [🤗][🤖] llama-2 129 From tigerbot-70b-base v1
v1 [🤗] llama-2 129 From tigerbot-70b-base v1
tigerbot-70b-chat-4bit v6 [🤗] llama-2 37 From tigerbot-70b-chat v6
v4 [🤗] llama-2 37 From tigerbot-70b-chat v4
v3 [🤗] llama-2 37 From tigerbot-70b-chat v3
v2 [🤗] llama-2 37 From tigerbot-70b-chat v2
v1 [🤗] llama-2 37 From tigerbot-70b-chat v1
tigerbot-13b-base v3 [🤗][🤖] llama-2 26.6 From llama-2-13b weights
v2 [🤗][🤖] llama-2 26.6 From llama-2-13b weights
v1 [🤗] llama-2 26.6 From llama-2-13b weights
tigerbot-13b-chat v6 [🤗][🤖] llama-2 26.6 From tigerbot-13b-base v3
v5 [🤗][🤖] llama-2 26.6 From tigerbot-13b-base v3
v5 [🤗][🤖] llama-2 26.6 From tigerbot-13b-base v3
v4 [🤗][🤖] llama-2 26.6 From tigerbot-13b-base v2
v3 [🤗][🤖] llama-2 26.6 From tigerbot-13b-base v2
v2 [🤗] llama-2 26.6 From tigerbot-13b-base v2
v1 [🤗] llama-2 26.6 From tigerbot-13b-base v1
tigerbot-13b-chat-4bit v6 [🤗] llama-2 11.5 From tigerbot-13b-chat v6
v5 [🤗] llama-2 11.5 From tigerbot-13b-chat v5-4k
v4 [🤗] llama-2 11.5 From tigerbot-13b-chat v4
tigerbot-7b-base v3 [🤗][🤖] llama-2 13.9 From llama-2-7b weights
v2 [🤗] bloom 16.2 From bloom weights
v1 [🤗] bloom 16.2 From bloom weights
tigerbot-7b-chat v3 [🤗][🤖] llama-2 13.9 From tigerbot-7b-base v3
v2 [🤗] bloom 16.2 From tigerbot-7b-base v2
v1 [🤗] bloom 16.2 From tigerbot-7b-base v1
tigerbot-7b-chat-8bit v3 [🤗] llama-2 10.8 From tigerbot-7b-chat v3
tigerbot-7b-chat-4bit v3 [🤗] llama-2 6.5 From tigerbot-7b-chat v3
tigerbot-180b-base v2 [🤗][🤖] bloom 347.6 From bloom weights
tigerbot-180b-chat v2 [🤗][🤖] bloom 347.6 From tigerbot-180b-chat v2
v1 [🤗] bloom 347.6 From bloom weights

推理

CLI

CUDA_VISIBLE_DEVICES=0 python infer.py --model_path tigerbot-13b-chat --max_input_length 1024 --max_generate_length 1024 --streaming True

参数:

输入 clear 可以清空对话历史,输入 exit 终止推理对话。

命令行推理

WebPage

export PYTHONPATH='./' ; export CUDA_VISIBLE_DEVICES=0 ; streamlit run apps/web_demo.py -- --model_path tigerbot-13b-chat

启动量化模型的web_demo

export PYTHONPATH='./' ; export CUDA_VISIBLE_DEVICES=0 ; streamlit run apps/exllamav2_web_demo.py -- --model_path TigerResearch/tigerbot-70b-chat-v4-4bit-exl2

参数同CLI启动参数

本地API

CLI/WebPage均为demo性质。TGI实现了混合batch,request queue等工程特性,如有大量推理需求,推荐通过TGI镜像提供服务。

docker run --gpus '"device=0,1,2,3"' -d -p 8080:80 -v PATH-TO-MODEL-DIR:/model ghcr.io/huggingface/text-generation-inference:1.1.1 --model-id /model --max-total-tokens=1024 --max-input-length=1024 --max-batch-prefill-tokens=1024

请根据模型规模与硬件情况选择合适的参数。一般来说7B/13B需要A100 40G 1,70B需要A100 4。

注意,TGI部署服务,生成控制参数需要在每个请求中控制。

量化

exllamav2量化推理

使用exllamav2加载[TigerResearch/tigerbot-70b-chat-v4-4bit-exl2]进行推理,推理速度加快

# 安装exllamav2
git clone https://github.com/turboderp/exllamav2
cd exllamav2
pip install -r requirements.txt

#  启动推理
CUDA_VISIBLE_DEVICES=0 python other_infer/exllamav2_hf_infer.py --model_path ${MODEL_PATH}

MODEL_PATH为量化模型路径,如 TigerResearch/tigerbot-70b-chat-v4-4bit-exl2

使用以上量化方式,请将transformers、bitsandbytes等包升级到最新版(目前transformers==4.33.1和bitsandbytes==0.41.1可以正常使用)

pip install -U transformers bitsandbytes

动态量化模型加载

此方式为在线量化与推理

CUDA_VISIBLE_DEVICES=0 python other_infer/quant_infer.py --model_path ${MODEL_DIR} --wbit 8

训练

预训练

启动训练前安装 DeepSpeed

git clone git@github.com:microsoft/DeepSpeed.git
cd DeepSpeed
rm -rf build
TORCH_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"

启动训练

启动tigerbot-7b训练至少需要 1 x A100 (40GB), 启动tigerbot-180b至少需要 16 x A100 (40GB)

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

测评

我们使用经典的中英文benchmark自动评测,共13项任务,涵盖代码,常识推理,阅读理解,数学,自然语言理解等。我们基于opencompass建立自动评测体系(感谢@opencompass)

# 安装
cd opencompass
pip install -e .

# 下载数据集到 data/ 处
wget https://github.com/InternLM/opencompass/releases/download/0.1.1/OpenCompassData.zip
unzip OpenCompassData.zip

#运行测评任务:
CUDA_VISIBLE_DEVICES=0,1,2 python run.py configs/eval_tigerbot_13b.py -w outputs/tigerbot-13b-base

总分为各类任务的平均分

chat模型测评结果

image

base模型测评结果

image

开源数据集

预训练数据

基于 GPT3 的 pretrain 的数据分布,采集中文书籍,互联网,和百科类数据,并通过数据源质量分过滤和 tf-idf soft deduping,从 20TB 数据过滤到 2TB,保持语言和类目的比例,并在此基础上随机抽样 100G 数据开源: - 中文开源预训练集 - 55G,包含中文书籍、中文互联网、中文百科 - 下载 [hugging face] - 英文开源预训练集 - 51G,包含英文书籍、英文互联网、英文百科 - 下载 [hugging face] | 类型 | 磁盘占用 | 来源 | | ---------- | -------- | ---- | | 中文书籍 | 12G | 自研 | | 中文互联网 | 25G | 自研 | | 中文百科 | 19G | 自研 | | 英文书籍 | 22G | 开源 | | 英文互联网 | 6.9G | 开源 | | 英文百科 | 22G | 开源 | | **总量** | **106G** | | - 完整预训练数据占比如图所示:

Tiger

- 中文书籍及代码细分:

中文书籍分类代码语言

微调数据

数据搜集 模型中使用的微调数据的搜集思想如下: a. 从用户指令的自然分布,人工标注总结 10 大类,120 小类任务,例如,事实性问答,开放式创作,语法分析,代码编辑等; b. self-instruct: 参考 Alpaca self-instruct 方法,扩充中英文 seed_tasks,增加一些中文习惯种子问题,基于此生成 2M 中文(本次开源 0.5M)及 0.1M 英文(本次开源 50k); c. human-labeling: 基于人工写题及答案、网络搜集方式,整理加工问答集数据,在开源列表中标识为[自研]部分,本次开放部分数据; d. open-source data cleaning: 基于各类公开数据集转换清洗,其中[自研*]部分,表示基于原始数据进行二次开发后得到,[开源] 部分数据集一般原始数据即为较规整的问答数据,进行简单清洗得到; e. 总的数据分布符合用户指令自然分布。
数据清洗 - 由于各类数据质量存在差异,通过 Alpaca Self-Instruct 生成的数据亦存在各种问题。因此,我们经过细致的人工校验和分类,总结出一套全面且系统化的数据清洗规则与方法。 - 整体规则可以划分为**过滤类规则**和**清洗类规则**两大类。其中,命中过滤规则的数据项将被弃用,而清洗规则旨在处理并保留所需的数据。 - 同时,在数据梳理与积累的过程中,我们也不断对清洗规则进行迭代和优化。 - 通用清洗规则描述如下所示: a. 过滤类-敏感词规则:基于积累的敏感词库,清洗丢弃涉政、涉黄、涉暴、涉恐等数据项; b. 过滤类-无效输入输出:此类规则主要针对 Self-Instruct 生成数据缺陷进行专项清理,根据输入输出分别制定规则,以丢弃一些无效的数据项; > 无效输入如"<一段文本>",无效输出如"[图画]"; c. 清洗类-关键词规则:根据整理的关键词/正则列表进行数据的替换,包括:清理特殊标志位字符、清理非可见字符、清理标签、繁简转换等; d. 清洗类-特殊逻辑规则:此类规则用于清洗一些特殊现象数据,如指令与输入重复等,如下所示: > `{"instruction": "描述如何做一道红烧肉。请提供食材和详细的步骤。", "input": "请描述如何做一道红烧肉,提供食材和详细步骤。", ...}`
数据开源 - 指令数据集, 当前开源 120W 问答对,磁盘空间 1.1G (数据集开放到 huggingface,中英文指令明细及下载如下表) - 中文-微调指令集-合集 - 53W 条 - 下载 [hugging face] - 英文-微调指令集-合集 - 67W 条 - 下载 [hugging face] | 类型 | 语言 | 数据集 | 数量 | 来源 | |-----------|----|----------------------------------------------------------------------------------------------------------------------------------|------------|------| | alpaca 中文 | 中文 | [tigerbot-alpaca-zh-0.5m](https://huggingface.co/datasets/TigerResearch/tigerbot-alpaca-zh-0.5m) | 0.5m | 自研 | | 百科问答 | 中文 | [tigerbot-wiki-qa-1k](https://huggingface.co/datasets/TigerResearch/tigerbot-wiki-qa-zh-1k) | 1k | 自研 | | 名著问答 | 中文 | [tigerbot-book-qa-1k](https://huggingface.co/datasets/TigerResearch/tigerbot-book-qa-1k) | 1k | 自研 | | 猜谜语 | 中文 | [tigerbot-riddle-qa-1k](https://huggingface.co/datasets/TigerResearch/tigerbot-riddle-qa-1k) | 1k | 自研 | | 阅读理解 | 中文 | [tigerbot-superclue-c3-zh-5k](https://huggingface.co/datasets/TigerResearch/tigerbot-superclue-c3-zh-5k) | 5k | 自研\* | | 问答 | 中文 | [tigerbot-HC3-zh-12k](https://huggingface.co/datasets/TigerResearch/tigerbot-HC3-zh-12k) | 12k | 开源 | | 知乎问答 | 中文 | [tigerbot-zhihu-zh-10k](https://huggingface.co/datasets/TigerResearch/tigerbot-zhihu-zh-10k) | 10k | 开源 | | alpaca 英文 | 英文 | [tigerbot-alpaca-en-50k](https://huggingface.co/datasets/TigerResearch/tigerbot-alpaca-en-50k) | 50k | 自研 | | 头脑风暴 | 英文 | [tigerbot-dolly-Brainstorming-en-1.7k](https://huggingface.co/datasets/TigerResearch/tigerbot-dolly-Brainstorming-en-1.7k) | 1.7k | 开源 | | 分类 | 英文 | [tigerbot-dolly-Classification-en-2k](https://huggingface.co/datasets/TigerResearch/tigerbot-dolly-Classification-en-2k) | 2k | 开源 | | 代码 | 英文 | [tigerbot-kaggle-leetcodesolutions-en-2k](https://huggingface.co/datasets/TigerResearch/tigerbot-kaggle-leetcodesolutions-en-2k) | 2k | 自研\* | | 食谱生成 | 英文 | [tigerbot-kaggle-recipes-en-2k](https://huggingface.co/datasets/TigerResearch/tigerbot-kaggle-recipes-en-2k) | 2k | 开源 | | 病历生成 | 英文 | [tigerbot-mt-note-generation-en](https://huggingface.co/datasets/TigerResearch/tigerbot-mt-note-generation-en) | 450 | 开源 | | 多轮对话 | 英文 | [tigerbot-OIG-multichat-en-50k](https://huggingface.co/datasets/TigerResearch/tigerbot-OIG-multichat-en-50k) | 50k | 自研\* | | 综合问答 | 英文 | [tigerbot-stackexchange-qa-en-0.5m](https://huggingface.co/datasets/TigerResearch/tigerbot-stackexchange-qa-en-0.5m) | 0.5m | 开源 | | wiki 问答 | 英文 | [tigerbot-wiki-qa-bart-en-10k](https://huggingface.co/datasets/TigerResearch/tigerbot-wiki-qa-bart-en-10k) | 10k | 开源 | | 如何做类教程 | 英文 | [tigerbot-youtube-howto-en-50k](https://huggingface.co/datasets/TigerResearch/tigerbot-youtube-howto-en-50k) | 50k | 开源 | | **总量** | | | **120W 条** | > 更多数据集陆续整理开放中...

领域数据

开放金融、法律、百科相关领域数据,作为 rethink 外部数据源 | 类型 | 数量 | |---------------------------------------------------------------------------------|--------------| | [金融-研报](https://huggingface.co/datasets/TigerResearch/tigerbot-research-plugin) | 2W 篇 | | [金融-财报](https://huggingface.co/datasets/TigerResearch/tigerbot-earning-plugin) | 2500 篇 | | [法律](https://huggingface.co/datasets/TigerResearch/tigerbot-law-plugin) | 11 类 5.5W 条款 | | [百科](https://huggingface.co/datasets/TigerResearch/tigerbot-wiki-plugin) | 10W 词条 |

Tigerbot API

### [chat](https://www.tigerbot.com/api-reference/chat)
示例 tigerbot chat-api sample tigerbot chat-api sample
### [plugin](https://www.tigerbot.com/api-reference/plugin)
示例 tigerbot chat-api sample
### [finetune](https://www.tigerbot.com/api-reference/finetune)
示例 tigerbot chat-api sample
### [embedding](https://www.tigerbot.com/api-reference/embedding)
示例 tigerbot chat-api sample
### [summarization](https://www.tigerbot.com/api-reference/summarization)
示例 tigerbot chat-api sample
### [pdf2text](https://www.tigerbot.com/api-reference/pdf2text)
示例 tigerbot chat-api sample
### [text2image](https://www.tigerbot.com/api-reference/text2image)
示例 tigerbot chat-api sample

其他

案例 ![image](./image/api/case-1.png) ![image](image/api/case-2.png) ![image](image/api/case-3.png) ![image](image/api/case-4.png) ![image](image/api/case-5.png) ![image](image/api/case-6.png)
开发者生态 - [使用 TigerBot 和 Svelte 框架制作的聊天机器人,可快速打包成桌面应用](https://github.com/SaraiQX/tigerbot-svelte-app) - [基于本地知识库的 TigerBot 大语言模型 qq 群知识库 bot 应用实现](https://github.com/wordweb/Tiger-qq-bot) - [基于本地知识库的 TigerBot、ChatGLM 等大语言模型应用实现](https://github.com/wordweb/langchain-ChatGLM-and-TigerBot) - [Run TigerBot on Colab](https://github.com/runfuture/tigerbot/blob/main/test_tigerbot_7b_sft_4bit_128g.ipynb) - Colab 版本体验 TigerBot - [Run TigerBot on Windows](https://www.bilibili.com/video/BV1Ru411a7Kq/) - 在 Windows 系统上使用 TigerBot
加入我们 #### 产品链接 https://www.tigerbot.com #### 联系电话 021-63888086 #### 联系邮箱

cong.fu@tigerbot.com

wei.cai@tigerbot.com

#### 微信讨论群 Tiger
局限性与免责声明 当前模型可能存在生成幻觉、误导性、或歧视性内容。请谨慎使用 TigerBot 系列模型生成的内容,请勿将生成的有害内容进行传播。 如需将模型公开使用或者商用,模型服务所产生的不良影响或者有害言论由服务方负责,本项目开发者不承担任何因使用本项目(包含但不限于数据、模型、代码等)导致的危害或损失。