百川智能开发的BaiChuan-7B是一款大规模的70亿参数预训练语言模型,基于Apache-2.0许可证,可供开源使用和商业使用1。
该模型是双语模型,支持英语和中文。在大约1.2万亿tokens上进行训练。训练数据包括开源的英文和中文数据,以及从中文互联网上抓取的一些高质量知识数据。
BaiChuan-7B使用了SentencePiece的字节对编码(BPE)作为分词算法,并对其进行了多项优化,以更好地适应英语和中文、数学领域和罕见词汇的需求。与其他开源模型相比,它对中文数据的压缩率有显著提升。
模型基于标准的Transformer架构,设计上与LLaMA模型类似。它采用旋转嵌入(rotary-embedding)进行位置编码,允许在超出最大训练长度4096 tokens的情况下进行良好的外延。激活层由SwiGLU构成,前馈层变为隐藏层大小的8/3倍,即11008。它采用基于RMSNorm的预归一化进行层归一化。
百川智能还实施了多项优化技术,以提升训练吞吐量,包括使用高效的运算符如Flash-attention和NVIDIA apex的RMSNorm,切分一些计算运算符以降低内存峰值,使用混合精度技术在不损失模型精度的情况下加速计算过程,以及一些通信优化。
该模型在C-Eval数据集上进行评估,这是一个全面的中文模型评测数据集,涵盖了52个学科和四个难度级别。这个数据集的开发集被用作few-shot学习的来源,在测试集上进行了5-shot测试。
百川-7B是由百川智能开发的大规模7B预训练语言模型。这是一个开源模型,可以用于商业用途,代码按照Apache-2.0许可证进行分发1。该模型在大约1.2万亿tokens上进行了训练,支持中英双语,上下文窗口长度为4096。它的训练数据包括开源的中英文数据、从中文互联网抓取的数据,以及一些高质量的知识数据1。
该模型基于标准的Transformer架构,使用SentencePiece中的字节对编码(BPE)作为其分词算法。模型进行了几项优化:
- 它在大约2000万条以中英为主的多语言语料上训练分词模型,显著提升对中文的压缩率。
- 对于数学领域,它参考了LLaMA和Galactica模型的方法,将数字的每一位单独分开,以避免不一致。
- 它支持UTF-8字符的字节编码,使其能够覆盖未知的单词和字符,包括罕见的字符如特殊符号。
- 开发者声称他们的分词器在压缩率和训练和推理效率方面,尤其是对中文数据,明显优于LLaMA、Falcon等开源模型1。
在架构方面,该模型使用了类似于LLaMA的设计:
- 它使用旋转嵌入(rotary embedding)进行位置编码,使模型能够处理最多5000个tokens的序列,尽管它的训练最大长度为4096。
- 激活层使用SwiGLU,隐层大小为11008(约为输入大小的2.67倍)。
- 层归一化(Layer-Normalization)基于RMSNorm的预归一化(Pre-Normalization)1。
在LLaMA框架上进行了多项改进以提高训练吞吐量:
- 算子优化技术:采用了更高效的算子,如Flash-attention和NVIDIA apex的RMSNorm等。
- 算子切分技术:将部分计算算子进行切分,以减小内存峰值。
- 混合精度技术:在不损失模型精度的情况下加速了计算过程。
- 训练容灾技术:优化了训练平台和训练框架,实现了分钟级别的故障定位和任务恢复。
- 通信优化技术包括:
- 采用拓扑感知的集合通信算法,避免网络拥塞问题,提高通信效率。
- 根据卡数自适应设置 bucket size,提高带宽利用率。
- 根据模型和集群环境,调优通信原语的触发时机,从而将计算和通信重叠。
基于上述优化技术,他们在A800机器上达到了7B模型182Tflops的吞吐量,GPU峰值算力利用率高达58.3%。
百川-7B模型也在C-Eval数据集上进行了评估,该数据集是一个全面的中文基础模型评测数据集,涵盖了52个学科和四个难度的级别。他们在测试集上进行了5-shot测试。
在GitHub仓库中,他们还提供了一些示例代码,说明了如何在C-Eval数据集上评估模型的性能。
GitHub仓库地址:
此处内容需要权限查看
会员免费查看