百川智能|开源可商用的大规模预训练语言模型baichuan-7B大模型
概述
baichuan-7B 是由百川智能开发的一个开源可商用的大规模预训练语言模型。基于 Transformer 结构,在大约1.2万亿 tokens 上训练的70亿参数模型,支持中英双语,上下文窗口长度为4096。在标准的中文和英文权威 benchmark(C-EVAL/MMLU)上均取得同尺寸最好的效果。
百川智能发布的开源中英文大模型baichuan-7B是一个基于GPT-3.5架构的预训练语言模型,拥有70亿个参数,是目前全球最大的中英文混合预训练语言模型之一。根据百川智能的官方介绍,baichuan-7B的能力包括:
语言理解和生成:baichuan-7B能够对中英文文本进行自然语言理解和生成,包括语义理解、情感分析、自动摘要、对话生成等。
多场景应用:baichuan-7B在多个领域都有广泛的应用,例如智能客服、自然语言处理、智能写作、文本分类、机器翻译等。
高效性能和可扩展性:baichuan-7B采用了高效的模型架构和训练算法,具有优秀的性能和可扩展性,能够支持大规模语言处理任务。
总体来说,baichuan-7B是一款非常强大的中英文混合预训练语言模型,具有语言理解和生成、多场景应用、高效性能和可扩展性等优点,可以为各种自然语言处理任务提供强有力的支持。
https://github.com/baichuan-inc/baichuan-7B
数据
原始数据包括开源的中英文数据和自行抓取的中文互联网数据,以及部分高质量知识性数据。
参考相关数据工作,频率和质量是数据处理环节重点考虑的两个维度。 我们基于启发式规则和质量模型打分,对原始数据集进行篇章和句子粒度的过滤。在全量数据上,利用局部敏感哈希方法,对篇章和句子粒度做滤重。
经过不断的调整和多轮测试,最终确认了一个在下游任务上表现最好的中英文配比。
我们使用了一个基于自动学习的数据权重策略,对不同类别的数据进行配比。
分词
我们参考学术界方案使用 SentencePiece 中的 byte pair encoding (BPE)作为分词算法,并且进行了以下的优化:
目前大部分开源模型主要基于英文优化,因此对中文语料存在效率较低的问题。我们使用2000万条以中英为主的多语言语料训练分词模型,显著提升对于中文的压缩率。
对于数学领域,我们参考了 LLaMA 和 Galactica 中的方案,对数字的每一位单独分开,避免出现数字不一致的问题,对于提升数学能力有重要帮助。
对于罕见字词(如特殊符号等),支持 UTF-8-characters 的 byte 编码,因此做到未知字词的全覆盖。
我们分析了不同分词器对语料的压缩率,如下表,可见我们的分词器明显优于 LLaMA, Falcon 等开源模型,并且对比其他中文分词器在压缩率相当的情况下,训练和推理效率更高。
模型结构
整体模型基于标准的 Transformer 结构,我们采用了和 LLaMA 一样的模型设计
位置编码:rotary-embedding 是现阶段被大多模型采用的位置编码方案,具有更好的外延效果。虽然训练过程中最大长度为4096,但是实际测试中模型可以很好的扩展到 5000 tokens 上。
激活层:SwiGLU, Feedforward 变化为(8/3)倍的隐含层大小,即11008
Layer-Normalization: 基于 RMSNorm 的 Pre-Normalization
训练稳定性和吞吐
我们在原本的LLaMA框架上进行诸多修改以提升训练时的吞吐,具体包括:
算子优化技术:采用更高效算子,如 Flash-attention,NVIDIA apex 的 RMSNorm 等。
算子切分技术:将部分计算算子进行切分,减小内存峰值。
混合精度技术:降低在不损失模型精度的情况下加速计算过程。
训练容灾技术:训练平台和训练框架联合优化,IaaS + PaaS 实现分钟级的故障定位和任务恢复。
通信优化技术,具体包括:
采用拓扑感知的集合通信算法,避免网络拥塞问题,提高通信效率。
根据卡数自适应设置 bucket size,提高带宽利用率。
根据模型和集群环境,调优通信原语的触发时机,从而将计算和通信重叠。
基于上述的几个优化技术,我们在千卡A800机器上达到了7B模型182Tflops的吞吐,GPU峰值算力利用率高达58.3% 。
公开benchmark榜单
中文评测
C-Eval
C-Eval 数据集是一个全面的中文基础模型评测数据集,涵盖了52个学科和四个难度的级别。我们使用该数据集的dev集作为 few-shot 的来源,在 test 集上进行了 5-shot 测试。
先修改 evaluate_zh.py 中的 OPENMODEL_PATH 和 CEVAL_DATA_PATH 两个值,分别是模型(文件夹)存放的路径和 C-Eval 数据集的路径。再执行下面的脚本。
shot=5 # few-shot
gpu=0 # 显卡id
split=test # 评估测试集
model_id=baichuan-7b # 待评估的模型
task=ceval # 任务名称:ceval
echo gpu_idx-
g
p
u
−
{gpu}-
gpu−{model_id}KaTeX parse error: Expected group after '_' at position 7: {task}_̲{split}${shot}-shot
nohup python evaluate_zh.py --gpu_idx ${gpu} --model_id ${model_id} --task ${task} --shot ${shot} --split ${split} --show_detail > KaTeX parse error: Expected group after '_' at position 11: {model_id}_̲{task}_KaTeX parse error: Expected group after '_' at position 8: {split}_̲{shot}-shot_record.txt 2>&1 &
结果
Gaokao
Gaokao 是一个以中国高考题作为评测大语言模型能力的数据集,用以评估模型的语言能力和逻辑推理能力。 我们只保留了其中的单项选择题,随机划分后对所有模型进行统一 5-shot 测试。
结果
以下是测试的结果。
AGIEval
AGIEval 旨在评估模型的认知和解决问题相关的任务中的一般能力。 我们只保留了其中的四选一单项选择题,随机划分后对所有模型进行了统一5-shot测试。
结果
其中 Aquila 模型来源于智源官方网站