LlaMa1,2,3各个版本的区别
一、Tokenizer
1、SentencePiece
Llama 1,2 使用 SentencePiece 进行标记化
2、Tiktoken
而 Llama 3 已过渡到 OpenAI 的 Tiktoken。 Llama 3 还引入了 ChatFormat 类、特殊令牌(包括回合结束标记的令牌)和其他功能,以增强对基于聊天的交互和对话处理的支持。
无论SentencePiece 和Tiktoken 底层算法都是BPE算法,只是实现的插件(工具不一样),tiktoken is a fast BPE tokeniser for use with OpenAI's models.
使用tiktoken的原因:速度更快,快了好几倍:
所以大家一定对为什么这么快很好奇,查阅tictoken的源码得知,tictoken对CoreBPE类进行了基于RUST的重写,包括真·多线程,regex,缓存caching,哈希各个方面的优化,
二、GQA:分组注意力机制
MHA、MQA、GQA的区别查看:http://kexue.love/index.php/archives/513/
在Llama2中:7B和13B 使用与 LLaMA 相同的架构,34B和70B模型采用分组查询注意力(GQA)
1、GQA 介绍:
自回归解码的标准做法是缓存序列中先前 token 的键 (K) 和值 (V) 对,以加快注意力计算。然而,随着上下文窗口或批量大小的增加,多头注意力 (MHA) 模型中与 KV 缓存大小相关的内存成本显着增加。对于更大的模型,其中 KV 缓存大小成为一个瓶颈,键和值投影可以跨多个头共享,而不会大大降低性能。
2、对于上述这种情况有两种主流解决方案
MQA:具有单个KV投影的原始多查询格式
GQA:具有 8 个KV投影的分组查询注意力变体
3、选择 GQA 的原因
(1)本文做了一系列实验证明 GQA 变体在大多数评估任务上的表现与 MHA 基线相当,并且平均而言优于 MQA 变体
(2)为了优化延迟,需要在具有张量并行性的单个节点中使用 8 A100 托管最大的模型,在这种情况下,MQA 的分片不能再跨头完成,因为头的数量低于 GPU 的数量。要么复制所有 GPU 中的 KV 值(使 KV 缓存大小等于 GQA),要么另一种选择是跨批次维度分片。然而,跨批次维度分片可能会使推理服务复杂化,因为它只当批量大小大于分片的数量并且额外的通信成本在所有情况下都不值得它
三、Llama系列的上下文长度一直在增长
上下文长度每一代都翻倍了,在Llama3中,训练的时候用的就是8K上下文:
从上图可以看到,Llama三代模型的上下文长度分别是2K、4K和8K,虽然Llama3训练是8K上下文,但是按照目前业界的技术,应该是可以继续拓展到更长上下文的。而官方也说过,未来Llama3会有更长上下文的版本。
四、Llama3模型的词汇表大幅提高
在模型架构中另一个值得注意的是词汇表的大幅提高。在Llama1和Llama2中,MetaAI的词汇表都是32K大小,这可能与前两代模型的训练数据差距不大有关。而第三代的Llama3模型的词汇表大小变为128K,也就是说它的tokenizer有了较大的变化。
五、Llama3模型的训练数据大幅增长
Llama3的训练数据达到了15万亿,比第一代和第二代Llama模型加在一起还多好几倍。如下图所示,第一代的小一点的模型训练数据是1万亿tokens,而较大的650亿规模的模型训练数据是1.4万亿tokens。到了第二代Llama2系列,训练数据都增长到了2万亿tokens。
可以看到,第三代Llama3训练数据大幅增加,几乎也是目前市场上训练数据最多的一个模型了。这里有一点也值得提一下,DeepMind发表过一个非常著名的论文,就是关于Chinchilla模型的论文,里面提到了训练数据对大模型性能的影响。根据论文发现的规律,80亿参数规模的模型,用2000亿tokens数据集训练可以获得最佳性能,但是MetaAI发现,80亿参数规模的模型训练数据增长到15万亿tokens依然可以获得log线性增长!因此,数据可以说依然是王道。
参考:
1.https://www.datalearner.com/blog/1051713702716647
2.重要:https://www.53ai.com/news/qianyanjishu/1120.html
想想你的文章写的特别好https://www.ea55.com/