完整的教程请参考:datawhalechina/tiny-universe: 《大模型白盒子构建指南》:一个全手搓的Tiny-Universe (github.com)
这是Task2的学习任务
目录
RMS Norm(RMS Layer Normalization)
Qwen-blog
因为llama和Qwen的架构类似,所以这里按照Qwen的架构来学习。
Tokenizer(分词器)
Q:什么是Tokenizer?
A:Tokenizer的主要功能是将一段文本分割成更小的有意义的部分,这些部分被称为“tokens”(标记)。
Embedding(嵌入)
Q:什么是Embedding?
A:Embedding是一种将离散的符号(如单词或标记)映射到连续向量空间的技术。这些向量捕捉了词语之间的语义关系,并且可以用来表示词语在向量空间中的位置。
- Tokenizer 是用来将原始文本转换成分词后的序列,它是文本预处理的一部分。
- Embedding 则是将分词后的序列进一步转换为数值化的向量表示,以便于机器学习模型理解和处理。
通常先使用Tokenizer对文本进行分词,然后再将得到的tokens通过Embedding转换成向量,最终用于训练模型。
Q:关于Tokenizer好用的库推荐。
A:1)NLTK (Natural Language Toolkit)。NLTK 是一个强大的自然语言处理库,提供了多种分词器和其他NLP工具。2)Transformers (Hugging Face)。Transformers 库提供了多种预训练的Transformer模型,包括分词器。
RMS Norm(RMS Layer Normalization)
Q:什么是RMSNorm?
A:RMS Layer Normalization是对Batch Normalization(BN)和Layer Normalization(LN)的一种改进。RMSNorm针对每一批次中的每一个样本进行归一化处理,计算特征的均方根值,Layer Normalization计算的是每个特征的均值和方差。
enumerate函数
enumerate()
函数是 Python 中的一个内置函数,用于遍历可迭代对象(如列表、元组、字符串等)时同时获取元素及其对应的索引。这对于需要在循环中同时使用元素及其索引的情况非常有用。enumerate()
函数使得在遍历时获取元素的索引变得非常方便,适用于需要索引信息的各种场景。
Flash Attention介绍
Q:什么是Flash Attention?
A:Flash Attention 是一种用于加速Transformer模型中自注意力(self-attention)机制的优化技术。传统自注意力机制的时间复杂度和内存消耗均为 O(N2),其中 N是序列长度。Flash Attention 通过优化注意力计算的方式,能够在保持计算精度的同时显著降低计算成本,特别是内存消耗。
Q:Flash Attention的机制是什么?如何实现这种优化的?
A:Flash Attention 的核心思想在于利用稀疏矩阵运算和近似计算来减少自注意力机制的计算量。Flash Attention 通过稀疏化注意力矩阵,仅保留最重要的注意力权重,从而减少了计算和内存开销。Flash Attention 在计算注意力权重时采用近似方法,允许在一定程度上牺牲精确度以换取更高的计算效率。
Q:对比传统的自注意力机制,Flash Attention的改进体现在哪里?
A:传统的自注意力机制,包括步骤1)查询、键、值计算;2)注意力得分计算;3)Softmax规范化;4)加权求和。laFlash Attention的改进主要体现在第2步:注意力得分计算:不是直接计算所有查询和键之间的点积,而是通过稀疏化和近似计算来估计注意力得分。
GQA
Q: