🤗 Hugging Face • 🤖 ModelScope • 💬 WeChat
中文 | English
Baichuan-7B 是由百川智能开发的一个开源可商用的大规模预训练语言模型。基于 Transformer 结构,在大约 1.2 万亿 tokens 上训练的 70 亿参数模型,支持中英双语,上下文窗口长度为 4096。在标准的中文和英文 benchmark(C-Eval/MMLU)上均取得同尺寸最好的效果。
C-Eval 数据集是一个全面的中文基础模型评测数据集,涵盖了 52 个学科和四个难度的级别。我们使用该数据集的 dev 集作为 few-shot 的来源,在 test 集上进行了 5-shot
测试。通过执行执行下面的命令:
cd evaluation
python evaluate_zh.py --model_name_or_path 'your/model/path'
Model 5-shot | Average | Avg(Hard) | STEM | Social Sciences | Humanities | Others |
---|---|---|---|---|---|---|
GPT-4 | 68.7 | 54.9 | 67.1 | 77.6 | 64.5 | 67.8 |
ChatGPT | 54.4 | 41.4 | 52.9 | 61.8 | 50.9 | 53.6 |
Claude-v1.3 | 54.2 | 39.0 | 51.9 | 61.7 | 52.1 | 53.7 |
Claude-instant-v1.0 | 45.9 | 35.5 | 43.1 | 53.8 | 44.2 | 45.4 |
BLOOMZ-7B | 35.7 | 25.8 | 31.3 | 43.5 | 36.6 | 35.6 |
ChatGLM-6B | 34.5 | 23.1 | 30.4 | 39.6 | 37.4 | 34.5 |
Ziya-LLaMA-13B-pretrain | 30.2 | 22.7 | 27.7 | 34.4 | 32.0 | 28.9 |
moss-moon-003-base (16B) | 27.4 | 24.5 | 27.0 | 29.1 | 27.2 | 26.9 |
LLaMA-7B-hf | 27.1 | 25.9 | 27.1 | 26.8 | 27.9 | 26.3 |
Falcon-7B | 25.8 | 24.3 | 25.8 | 26.0 | 25.8 | 25.6 |
TigerBot-7B-base | 25.7 | 27.0 | 27.3 | 24.7 | 23.4 | 26.1 |
Aquila-7B* | 25.5 | 25.2 | 25.6 | 24.6 | 25.2 | 26.6 |
Open-LLaMA-v2-pretrain (7B) | 24.0 | 22.5 | 23.1 | 25.3 | 25.2 | 23.2 |
BLOOM-7B | 22.8 | 20.2 | 21.8 | 23.3 | 23.9 | 23.3 |
Baichuan-7B | 42.8 | 31.5 | 38.2 | 52.0 | 46.2 | 39.3 |
Gaokao 是一个以中国高考题作为评测大语言模型能力的数据集,用以评估模型的语言能力和逻辑推理能力。
我们只保留了其中的单项选择题,随机划分后对所有模型进行统一 5-shot
测试。
以下是测试的结果。
Model | Average |
---|---|
BLOOMZ-7B | 28.72 |
LLaMA-7B | 27.81 |
BLOOM-7B | 26.96 |
TigerBot-7B-base | 25.94 |
Falcon-7B | 23.98 |
Ziya-LLaMA-13B-pretrain | 23.17 |
ChatGLM-6B | 21.41 |
Open-LLaMA-v2-pretrain | 21.41 |
Aquila-7B* | 24.39 |
Baichuan-7B | 36.24 |
AGIEval 旨在评估模型的认知和解决问题相关的任务中的一般能力。
我们只保留了其中的四选一单项选择题,随机划分后对所有模型进行了统一 5-shot
测试。
Model | Average |
---|---|
BLOOMZ-7B | 30.27 |
LLaMA-7B | 28.17 |
Ziya-LLaMA-13B-pretrain | 27.64 |
Falcon-7B | 27.18 |
BLOOM-7B | 26.55 |
Aquila-7B* | 25.58 |
TigerBot-7B-base | 25.19 |
ChatGLM-6B | 23.49 |
Open-LLaMA-v2-pretrain | 23.49 |
Baichuan-7B | 34.44 |
*其中 Aquila 模型来源于智源官方网站(https://model.baai.ac.cn/model-detail/100098) 仅做参考
除了中文之外,Baichuan-7B也测试了模型在英文上的效果,MMLU 是包含 57 个多选任务的英文评测数据集,涵盖了初等数学、美国历史、计算机科学、法律等,难度覆盖高中水平到专家水平,是目前主流的LLM评测数据集。我们采用了开源 的评测方案,最终 5-shot
结果如下所示:
Model | Humanities | Social Sciences | STEM | Other | Average |
---|---|---|---|---|---|
ChatGLM-6B0 | 35.4 | 41.0 | 31.3 | 40.5 | 36.9 |
BLOOMZ-7B0 | 31.3 | 42.1 | 34.4 | 39.0 | 36.1 |
mpt-7B1 | - | - | - | - | 35.6 |
LLaMA-7B2 | 34.0 | 38.3 | 30.5 | 38.1 | 35.1 |
Falcon-7B1 | - | - | - | - | 35.0 |
moss-moon-003-sft (16B)0 | 30.5 | 33.8 | 29.3 | 34.4 | 31.9 |
BLOOM-7B0 | 25.0 | 24.4 | 26.5 | 26.4 | 25.5 |
moss-moon-003-base (16B)0 | 24.2 | 22.8 | 22.4 | 24.4 | 23.6 |
Baichuan-7B0 | 38.4 | 48.9 | 35.6 | 48.1 | 42.3 |
0: 重新复现
1: https://huggingface.co/spaces/HuggingFaceH4/open_llm_leaderboard
2: https://paperswithcode.com/sota/multi-task-language-understanding-on-mmlu
git clone https://github.com/hendrycks/test
cd test
wget https://people.eecs.berkeley.edu/~hendrycks/data.tar
tar xf data.tar
mkdir results
cp ../evaluate_mmlu.py .
python evaluate_mmlu.py -m /path/to/Baichuan-7B
其中在 MMLU 上57个任务的具体细指标如下图:
其中各个学科的指标如下图:
推理代码已经在官方 Huggingface 库
from transformers import AutoModelForCausalLM, AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("baichuan-inc/Baichuan-7B", trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained("baichuan-inc/Baichuan-7B", device_map="auto", trust_remote_code=True)
inputs = tokenizer('登鹳雀楼->王之涣\n夜雨寄北->', return_tensors='pt')
inputs = inputs.to('cuda:0')
pred = model.generate(**inputs, max_new_tokens=64,repetition_penalty=1.1)
print(tokenizer.decode(pred.cpu()[0], skip_special_tokens=True))
整体流程如下所示:
我们参考学术界方案使用 SentencePiece 中的 Byte-Pair Encoding (BPE) 作为分词算法,并且进行了以下的优化:
Model | Baichuan-7B | LLaMA | Falcon | mpt-7B | ChatGLM | moss-moon-003 |
---|---|---|---|---|---|---|
Compress Rate | 0.737 | 1.312 | 1.049 | 1.206 | 0.631 | 0.659 |
Vocab Size | 64,000 | 32,000 | 65,024 | 50,254 | 130,344 | 106,029 |
整体模型基于标准的 Transformer 结构,我们采用了和 LLaMA 一样的模型设计
我们在原本的 LLaMA 框架上进行诸多修改以提升训练时的吞吐,具体包括:
基于上述的几个优化技术,我们在千卡 A800 显卡上达到了 7B 模型 182 TFLOPS 的吞吐,GPU 峰值算力利用率高达 58.3%。
最终的loss如下图:
pip install -r requirements.txt
用户将训练语料按总rank数的倍数均匀切分成多个 UTF-8 文本文件,放置在语料目录(默认为 data_dir
)下。各个rank进程将会读取语料目录下的不同文件,全部加载到内存后,开始后续训练过程。以上是简化的示范流程,建议用户在正式训练任务中,根据需求调整数据生产逻辑。
下载 tokenizer 模型文件 tokenizer.model ,放置在项目目录下。
本示范代码采用 DeepSpeed 框架进行训练。用户需根据集群情况,修改 config/hostfile
,如果是多机多卡,需要修改 ssh 中各个节点的 IP 配置。具体可以参见 DeepSpeed 官方说明 。
scripts/train.sh
对本仓库源码的使用遵循开源许可协议 Apache 2.0。
Baichuan-7B 支持商用。如果将 Baichuan-7B 模型或其衍生品用作商业用途,请您按照如下方式联系许可方,以进行登记并向许可方申请书面授权:联系邮箱:opensource@baichuan-inc.com, 具体许可协议可见《Baichuan-7B 模型许可协议》。