ShapeToken

📅 2026/7/16 17:23:00
ShapeToken
在现代大模型LLM与 AI 编译器的架构中Shape形状和Token标记是两个处于不同维度的核心概念。如果把大模型处理文本的过程比作“工厂加工流水线”Token是被加工的原材料把文字切碎成一个个标准零件。Shape则是流水线上运输这些零件的集装箱规格数据的多维尺寸。1. Token大模型世界的“文字乐高”大模型是无法直接阅读人类的字符串如 “Hello” 或 “你好”的它只能处理数学向量。Token 就是文本与数字之间的中介。① 什么是分词Tokenization当输入一段话时模型会先用分词器Tokenizer把文本切碎。一个 Token 可以是一个单词、一个词根甚至是一个汉字或标点符号。英文示例Compiler optimization可能会被切分为[Comp, iler, optimization]3 个 Token。中文示例我爱数据科学可能会被切分为[我, 爱, 数据, 科学]4 个 Token。分词器内部有一本巨大的“字典”词表/Vocabulary通常包含几万到十几万个不同的 Token。切分好后每个 Token 都会映射为字典里的一个整数 ID。② 为什么 Token 的数量对大模型至关重要计算开销Attention 复杂度Transformer 模型的自注意力机制Self-Attention的计算复杂度与 Token 数量的平方成正比O(N2)O(N^2)O(N2)。输入序列的 Token 越长显存占用和计算量就会呈爆炸式增长。上下文窗口Context Window大模型都有单次处理的最大 Token 限制如 8K、32K、128K Token。超过这个长度模型就会“忘掉”前面的内容。2. Shape大模型数据流的“三围尺寸”当 Token 被变成数字并传入大模型后它们就会组合成我们前面提到的Tensor张量。而Shape形状就是用来描述这个 Tensor 在各个维度上究竟有多大。在大模型训练和推理的矩阵乘法中Tensor 的 Shape 会随着网络层数的向前推进而不断演变。 典型的大模型数据 Shape 拆解在大模型中有几个最经典的维度符号B(Batch Size)批处理大小即同时处理多少个样本/对话。S(Sequence Length)序列长度即当前对话包含多少个Token。H(Hidden Size / Embedding Dim)隐藏层维度即每个 Token 被转化成多少维的稠密向量比如 LLaMA 的 Hidden Size 可能是 4096。阶段数据的物理语义典型的 Shape 形式Token 输入层纯整数 ID 矩阵[B, S]即几路对话×\times×每路多少个 TokenEmbedding 嵌入层文本变成高维数学空间里的向量[B, S, H]每个 Token 都膨胀为了HHH维的浮点数向量Attention 注意力层计算 Token 两两之间的关联度得分矩阵[B, Num_Heads, S, S]在这里诞生了S×SS \times SS×S的平方级计算3. 编译器视角下的 Shape 与 Token动态性的终极挑战在开发 AI InfrastructureAI 基础设施/高性能算子时Shape和Token的结合会带来整个 AI 编译器领域最头疼的挑战动态形状Dynamic Shape。静态编译 vs 动态挑战传统编译器如老版本的 XLA喜欢静态 Shape。如果在编译时明确知道数据 Shape 是[2, 512, 4096]编译器就能做极致的内存复用、循环展开和流水线优化。然而在大模型推理LLM Serving中用户输入的文本长度Token 数量SSS是完全随机、动态变化的第一秒进来的对话是 10 个 TokenShape 是[1, 19, 4096]包含 Prompt 预热。第二秒进来的对话是 1000 个 TokenShape 变成了[1, 1000, 4096]。工业界的破局之道如果每次 Token 长度变了都要让编译器重新编译一次产生巨大的 JIT 编译开销大模型服务就会彻底卡死。为了解决由 Token 变化引起的 Dynamic Shape 性能损耗底层工程界进化出了几种核心技术Padding填充与对齐早期的粗暴做法。强行把所有不同长度的 Token 序列用0填充到固定长度如 2048维持静态 Shape。缺点是浪费了大量的算力和显存去计算没意义的0。PagedAttention主流技术如 vLLM将 Token 对应的 KV Cache键值缓存打碎成类似于操作系统虚拟内存的“页Pages”在物理显存上离散存储。从底层彻底消除了因为 Token 动态增长导致的显存碎片让 Shape 在逻辑上连续物理上离散。MLIR 动态维度支持现代 AI 编译器通过在 Shape 中引入?如tensor?x?xf32允许在运行时动态传递 Token 的实际长度并生成高度泛化的动态循环代码避免了重复编译。 总结在大模型的高性能计算世界里Token 是数据的灵魂决定了模型读到了什么、要消耗多少算力而Shape 是数据的骨架定义了这些数据在底层矩阵运算时呈现的几何形态。AI 基础设施工程的核心任务之一就是要在底层打造出一套足够坚固且灵活的编译器与运行时流转机制去完美降服由Token数量闪烁不定所带来的Shape动态变化。