菜单

分词与量化

相关源文件

本文档涵盖了Llama模型变体中使用的分词和量化系统。分词系统使用基于tiktoken的BPE(字节对编码)处理文本编码/解码,而量化系统则为模型权重提供FP8和INT4混合精度优化。

有关模型加载和生成管道的信息,请参阅模型加载和生成。有关提示格式和特殊令牌用法,请参阅提示格式

系统概览

分词和量化系统在Llama模型管道中作为基础预处理和优化层运行。分词将文本输入转换为数值令牌,而量化则通过权重压缩减少模型内存占用。

分词和量化管道

来源:models/llama4/tokenizer.py113-273 models/llama4/scripts/quantize.py45-213

分词器架构

分词系统使用基于tiktoken的BPE编码和模型特有的特殊令牌。Llama 3和Llama 4都实现了相似的核心功能,但在令牌词汇表和特殊令牌集方面有所不同。

核心分词器组件

来源:models/tokenizer_utils.py15-41 models/llama3/tokenizer.py46-210 models/llama4/tokenizer.py113-273

Llama版本差异

令牌词汇表比较

组件Llama 3Llama 4
保留特殊令牌2562048
BPE模式简单正则表达式O200K_PATTERN
视觉令牌<|image|>完整视觉令牌集
推理令牌<|reasoning_thinking_start|>, <|reasoning_thinking_end|>
文本处理基本特殊令牌扩展训练后令牌

Llama 3分词器实现

Llama 3分词器使用简化的令牌集,专注于基本文本处理

来源:models/llama3/tokenizer.py53-116

Llama 4分词器实现

Llama 4分词器扩展了多模态和推理功能

来源:models/llama4/tokenizer.py48-180

BPE文件加载

函数load_bpe_file()处理从Base64编码令牌文件加载核心BPE模型

BPE加载过程

来源:models/tokenizer_utils.py15-41

量化系统

量化系统为Llama 4 MoE模型提供使用FP8和INT4混合精度技术的权重压缩。量化目标是Transformer块中的MoE专家权重(w1w2w3)。

量化架构

来源:models/llama4/scripts/quantize.py45-213

FP8混合量化

FP8混合量化使用FBGEMM操作对MoE专家权重进行高效的逐行量化

FP8量化过程

FP8量化使用特定的键转换来映射专家权重

  • w1moe_w_in_eD_F
  • w2moe_w_out_eF_D
  • w3moe_w_swiglu_eD_F

来源:models/llama4/scripts/quantize.py174-190

INT4混合量化

INT4混合量化使用4位权重和BF16激活函数提供更高的压缩比

INT4量化实现

INT4量化通过批处理方式处理多维权重

来源:models/llama4/scripts/quantize.py143-172

文本预处理与编码

分词系统包含复杂的文本预处理,以处理tiktoken的限制

文本分割策略

预处理解决了两个主要限制

  • TIKTOKEN_MAX_ENCODE_CHARS = 400,000: 每次编码调用的最大字符数
  • MAX_NO_WHITESPACES_CHARS = 25,000: 最大连续非空白字符数

来源:models/llama4/tokenizer.py30-40 models/llama4/tokenizer.py250-272

与模型管道集成

分词和量化系统通过标准化接口与更广泛的模型架构集成

管道集成点

来源:models/llama4/scripts/quantize.py100-113 models/llama4/tokenizer.py181-248