LLAMA 模型解析:大语言模型 LLM 推理入门指南
本文借助 LLAMA 模型快速入门 LLM(Large Language Model,大语言模型)的推理过程。技术细节很多都是通用的,也适合其他的 LLM。本篇主要关注从部署和推理的角度考虑这个模型。
什么是 LLM
LLAMA 是 LLM 的一种结构,其核心任务是在阅读前 n 个单词后预测句子中下一个单词。输出取决于过去和现在的输入,与未来无关。这是一个自回归(Autoregressive)的过程。
每次输入模型会带上上一次输出的结果,这与 CV(计算机视觉)模型不同,CV 模型通常输入一次即可得到结果,而 LLM 需要迭代生成。
一般来说,LLM 模型主要由两个块组成:
- 编码器(Encoder):接收输入并构建其表示形式(特征)。适用于理解任务,如句子分类、命名实体识别。
- 解码器(Decoder):使用编码器的表示形式及其他输入来生成目标序列。适用于生成性任务,如文本生成。
LLAMA 属于 Decoder-only models,只有 decoder 层。
Transformer 架构核心组件
LLAMA 的 decoder 部分的结构取自 Transformer。对于 Llama 来说,重点关注以下几个概念:
- Tokenization(分词器)
- Embedding(嵌入层)
- Positional Encoding(位置编码)
- Self-attention(自注意力机制)
- Multi-head attention(多头注意力)
- RMSNorm(归一化)
- Residual Connection(残差连接)
分词器与 Embedding
分词器可将原始文本转换为由 token 组成的文本的初始数值表征。LLAMA 的分词器基于字节级的字节对编码(Byte-Pair Encoding, BPE)。
在代码实现中,调用 AutoTokenizer.from_pretrained 获取分词器。例如:
tokenizer = AutoTokenizer.from_pretrained(args.model, use_fast=False)
input_ids = tokenizer.encode(args.text, return_tensors="pt").to(dev)
具体流程分为两步:
- 将字符串转换为 token 序列(如
['▁"', 'this', '▁is', ...])。 - 将 token string 转变为 token id(通过查找词汇表)。
最终得到的 input_ids 形状通常为 [batch_size, sequence_length]。
随后调用 inputs_embeds = self.embed_tokens(input_ids) 将 ID 转换为向量,shape 为 [batch_size, sequence_length, hidden_size]。Embedding 矩阵本质上是一个查找表,每个单词定位到表中的某一行,即该单词在嵌入空间的语义向量。
自注意力机制 (Self-Attention)
Self-attention 是 Transformer 的核心,允许模型考虑到序列中的其他标记,以便更好地理解每个标记的上下文。每个标记的新表示形式是由它自己和其他标记的交互得到的。
位置编码
由于 Transformer 的结构没有考虑到标记的顺序,我们需要加入位置编码来给模型提供词元在序列中的位置信息。这些编码会被添加到词嵌入向量中。

