EBET易博app中文Falcon基础模型:代码实现与增量训练

  新闻资讯     |      2023-10-01 22:18

  近期,阿联酋阿布扎比的技术创新研究所(TII)开源了Falcon 系列模型,使用经过筛选的1 万亿tokens进行预训练,并以Apache 2.0协议开源,可能是目前效果最好且许可协议最宽松(允许商用)的开源模型。

  然而,Falcon模型在使用上面临和 LLaMA 模型类似的问题:由于模型主要在英文数据集上训练,因此它理解和生成中文的能力偏弱。此外,Falcon 在构建词表时没有加入中文字/词,中文字会被拆分成多个 token 的组合,这导致中文文本会被拆分成更长的 tokens 序列,降低了编码和生成效率。

  针对以上问题,“伶荔(Linly)”项目团队以 Falcon 模型为底座扩充中文词表,利用中文和中英平行增量预训练将模型的语言能力迁移学习到中文,实现 Chinese-Falcon。本文从模型结构上分析 Falcon、LLaMA 与传统 GPT 的异同,代码实现细节。并介绍我们的中文 Falcon 训练方案,包括中文字词扩充、数据集构建和训练参数等。

  Falcon与GPT系列一样采用单向Transformer-decoder模型架构,并以语言模型作为训练目标。与GPT-3相比,Falco的结构具有如下变化:

  2. 注意力机制:使用Multi-Query将key和value映射到单个注意力头(40B版本为8个),只有query保留多头矩阵,这种简化方案能提升生成效率;使用FlashAttention将注意力矩阵分块,加速计算并降低内存IO开销。

  从Transformer模型结构上看,LLaMA将Layer-Norm层放在Ateention和FFN的输入,这样有助于大模型训练稳定性(由GPT2论文提出)。此外,FFN部分使用了门控线性层(GLU),这种结构最初被用在T5-1.1,实验效果优于MLP。

  本章节介绍“伶荔(Linly)”项目中Falcon实现方案,我们使用TencentPretrain复现Falcon模型结构,用语言模型目标增量训练模型。TencentPretrain是 UER-py 预训练框架的多模态版本,支持 BERT、GPT、T5、ViT、Dall-E、Speech2Text 等文本、图像和语音预训练模型及下游任务。TencentPretrain 基于模块化设计,可以通过模块组合的方式构成各种模型,也可以通过复用已有的模块进行少量修改来实现新的模型。

  值得注意的是,我们的实现与Hugging Face版本Falcon模型完全对齐,训练后的模型权重可以直接转换到Hugging Face使用,反之亦然。此外,我们复现的版本还改进了Falcon代码的兼容性:Falcon在Hugging Face中为了高效训练使用了F.scaled_dot_product_attention,它是 PyTorch 2.0 新增的函数。我们重写了这部分代码,当用户使用1.x版本时切换到我们的实现来兼容低版本PyTorch。

  本章节介绍中文Falcon的训练流程和细节。首先扩充Falcon词表,包括 8,701 个常用汉字,jieba 词表中前 20,000个中文高频词以及 60 个中文标点符号。去重后共增加 25,022 个 token,词表大小扩充为 90,046。改变词表后,embedding 和 target.output_layer 矩阵也要对应的扩充。我们将每个新增字/词在原始 tokenizer 中的对应向量的平均作为初始化。

  在第一阶段,我们使用了50GB数据进行预训练,其中20G中文通用语料为模型提供中文语言能力和中文知识,10G中英文平行语料用于对齐模型的中英文表示,将英文语言能力迁移到中文上,20G英文语料用于数据回放,缓解模型遗忘。数据已在Linly项目中公开,细节如图所示:

  在模型训练阶段,我们使用与Falcon预训练相同的超参数设置:AdamW,ZeRO Optimizer,Batch size 2304,对于增量训练,我们设置更低的学习率2e-5。在通用语料上启动全参数训练(Full-tuning),精度为BF16,收敛情况如下图所示:

  除了第一阶段的50GB语料外,我们还将使用自建中文数据集和SlimPajama数据集共2TB语料训练中文Falcon基础模型,在伶荔项目中持续更新。

  EBET易博真人