-
Notifications
You must be signed in to change notification settings - Fork 194
Tigerbot‐13B is All You Need
虎博很高兴的发布TigerBot-13B大模型,在Llama-2的基础上以虎博积累的技术和数据继续训练,不但保持了Llama-2出色的英文能力,更是在中文能力填补了Llama-2的不足,各项主流中文任务中超过Llama-2 的49%,在开源同类模型中具有竞争力。我们的理论和实验探索表明,TigerBot的训练方法,计算效率和数据达到世界上SOTA水平,本着open innovation的精神,我们将这些成果分享给大模型社区,继续开源和免费商用TigerBot-13B大模型。本次发布包括:
- TigerBot-13B-base: 基于Llama-2-13B继续预训练300B tokens,扩充了中文词表到60K vocabulary, 并采用holistic training在预训练中直接使模型具有9成的指令完成能力。在主流英文基准测试中超过Llama-2-13B-base的7%,在中文测试中综合能力超过Llama-2-13B-base的49%,在国内主流开源基座模型中处于领先位置。
- TigerBot-13B-chat: 基于TigerBot-13B-base用5M指令数据微调,并采用rejection sampling fine-tune对齐人类需求。在主流英文基准测试中达到Llama-2-13B-chat的 101%,在中文测试中综合能力超过Llama-2-13B-chat的47%,在国内主流开源模型中亦处于领先位置。
- TigerBot-API: chat和summarization api 将自动升级到TigerBot-13B-chat,对科研教育用户免费,对商用开发者保持价格不变。
为了补充Llama在中文上的不足,我们继续预训练了1TB数据,约300B tokens,中英文比例约1:1。其中去除了Llama预训练用到的数据(commoncrawl, c4),补充了中文数据(书籍,百科,网页等)。我们将数据分为train:validation:test三份,loss曲线表明训练对我们的数据有不错的收敛(见图一) 图一:tigerbot-13-base training and validation loss
为了弥补Llama中文数据的不足(约占其训练数据的0.13%),我们扩充了中文进入词表。首先我们从中文训练数据中随机抽取10%,约100G数据,训练了中文为主的sentencepiece tokenizer (感谢@google/sentencepiece)。因为中英文语言的自然分布不同,我们扩充的tokenizer以中文为主,保证中文在最后tokenizer中充分表现,然后合并到Llama-2的tokenizer中(感谢@ymcui/Chinese-LLaMA-Alpaca),最终tokenizer(tigerbot_llama.model)vocabulary size达到60,515;tokenizer效率(raw:tokenized)达到llama的约2倍。我们也发现tokenizer训练数据100G以上没有必要,覆盖的字符基本一致,并且cpu峰值可超过2TB。
我们在Tigerbot-v2的实验中提出self-evolution技术,即在预训练中混合入10%的sft数据(10% out of sft training data),从而让sft训练大部分的gradient指向完成指令的方向。在Tigerbot-v3探索阶段,我们将这一自我进化的思想进一步推进,提出holistic training的方法,将预训练中的指令完成类数据达到预训练数据的5-10%,这可以达到sft数据的5-20倍;并且在原预训练数据中去重掉和sft类数据知识重复的部分。背后的思想是:指令完成(问答、生成等)是人类语言续写的一部分,我们希望模型在学知识的同时也学习指令完成的模式。这样带来的好处是两方面的:
- base model不经过sft就立刻展现出很强的指令完成能力,并且是更泛化的(图二见示例);我们以squad_v2的阅读理解任务快速测试,tigerbot-13b-base达到tigerbot-13b-chat的准确率(next-token prediction accuracy)的86%.
- 由于基础的能力(知识和指令完成的格式)已经在pretrain中学得,sft可以很轻量,而把有限的计算资源投入到alignment中(如ppo, rejection-sampling)。我们实验发现,sft训练大约1万条数据后loss就基本达到convergence的95%。
图二:tigerbot-13b-base的指令完成能力示例,未经过sft/rlhf
在sft训练中,我们加入了rejection-sampling fine-tune,算法如下:
- 随机取样sft数据中5-10%的prompts,
- 用best candidate chat model对每个prompt随机生成10个generation,
- 其中95%用reward model ranking (smooth Pareto frontier),5%用human labeling ranking (push Pareto frontier),1%用human labeling editing (jump Pareto frontier),
- 将top ranked generation混合入sft训练数据,然后训练。
计算的经济性对于大模型的迭代至关重要。我们采用了如下技术把计算效率推至全球前列:
- 对于大模型13B以上,采用模型分片技术分布式训练(基于megatron-deepspeed源码修改),
- 不采用高stage的deepspeed zero配置,避免cpu/gpu模型参数的传输,
- 保证20%的gpu显存冗余,避免数据或参数传输成为瓶颈,
- 训练采用flash-attention, gradient accumulation, group query attention(模型大于30B)的技术相结合,在不超过4M token情况下尽可能大的global batch size。 参考Llama-2 paper中的计算效率数据,Llama-2-13b 的pretrain gpu hours是368,640,数据量是2TB token,由此得出:llama-2-training-tokens / per-gpu-sec = 1,507。Tigerbot-13b训练中的throughput最高达到350 examples / sec, 在488xA100-40G 的集群上,seq-length = 2048,即tigerbot-13b-traning-tokens / per-gpu-sec = 1,469 (97% of Llama training)。考虑到根据Llama-2 paper,meta AI research super-cluster硬件配置更高(A100-80G, 2TB CPU memory, RDMA inter-connection), 我们相信TigerBot的计算效率已经达到全球范围的SOTA,而这将保证我们持续高速迭代,和给用户和开发者带来更好的计算经济性。
我们进行三个步骤的评测:
- 训练过程中使用transformers trainer的next-token prediction accuracy 快速评测决定迭代方向,
- 使用经典的中英文13项benchmark自动评测,我们基于opencompass建立自动评测体系(感谢@opencompass),后续会发布评测数据和代码,以提倡reproducibility。(图三与图四是自动评测结果)
- 使用gold dataset人工评测模型是否符合人类期望。我们观察到,benchmark自动评测和人类感知不完全一致,我们此次发布的模型并不是自动评测分数最高的模型,这其中我们权衡了model degradation, serendipity, helpness和harmness等非量化的因素。
图三:base model benchmark 测评结果
图四:chat model benchmark 测评结果
大模型领域的发展是激动人心的,正如一个懵懂少年的成长。我们享受这个过程中的激动和沮丧,但我们认为LLM发展仍处在早期,并以谦逊的心态浸润其中,每天都以更好的理论和实验探索,来回馈给大模型社区,open innovation and happy coding!
TigerBot demo 在线体验: https://tigerbot.com/chat
Github 项目: https://github.com/TigerResearch/TigerBot
微信讨论群