从计算角度解读 LLM 内部结构与推理过程
引言
本文从计算的角度分析每个算子的输入数据结构、输出数据结构,以及统计对应的计算量,以此对 LLM 内部结构有一个更加深刻的认识。
1. 先认识下什么是 Tensor Shape
张量(Tensor)是深度学习中用于表示数据的核心结构,它是一个多维数组,可以看作是标量、向量和矩阵的泛化,是深度学习框架如 TensorFlow 和 PyTorch 中的核心数据结构。在机器学习里面,一切数据皆 Tensor,在机器学习模型中,所有的数据都是以 Tensor 的格式流转的。
Tensor Shape 是理解计算过程的重要属性。 定义:张量的形状(Shape)是一个整数数组,描述了张量在每个维度上的大小。
例子 1:一维张量(向量)
import torch
vector = torch.tensor([1.0, 2.0, 3.0, 4.0, 5.0])
print(vector.shape)
# 输出:torch.Size([5])
例子 2:三维张量
tensor_3d = torch.tensor([[[3, 7, 2, 5], [1, 4, 6, 0], [9, 8, 3, 2]], [[4, 1, 7, 3], [5, 0, 2, 8], [6, 9, 4, 1]]])
print(tensor_3d.shape)
# 输出:torch.Size([2, 3, 4])
2. 词表 Embedding 计算细节
词表 Embedding 是将词汇表中的单词转换为稠密向量表示的过程,也即是将人类理解的分词词语转换成计算机理解的向量数据。对应到每个模型,每一个大语言模型都有一个词表,这个词表表示了该 LLM 能够输出的不同词语的数量。例如 Llama-2-7b 的词表大小是 128256。
在 LLM 推理过程中,LLM 的第一步,就是将我们输入的文字做分词,并通过 Embedding 转成向量数据。
- 输入 Tensor Shape: ,

