Hugging Face入门 (模型文件详解)

Hugging face Llama-2 模型文件详解

当使用 AutoClass 或者 pipeline() 进行模型加载时,我们会看到从Hugging face上下载模型相关文件。
这些文件有什么作用?今天我们就以模型 meta-llama/Llama-2-7b-chat-hf 为例,介绍模型的文件组成。

模型文件详解

Llama-2 Huggingface 文件构成如下图所示:

Llma2_hugging_face

Huggingface 文件介绍

文件名 描述
config.json 模型的主要配置信息,如 Bert 模型设置、预测头部设置、训练参数等
generation_config.json 文本生成相关的模型配置
model-00001-of-00002.safetensors safetensors 文件格式的模型权重参数的分块
model-00002-of-00002.safetensors safetensors 文件格式的模型权重参数的分块
model.safetensors.index.json safetensors 模型参数文件的索引,描述了模型切片的信息
pytorch_model-00001-of-00002.bin pickle 序列化的 PyTorch 模型权重参数的分块
pytorch_model-00002-of-00002.bin pickle 序列化的 PyTorch 模型权重参数的分块
pytorch_model.bin.index.json pickle 序列化的 PyTorch 模型索引,描述了模型切片的信息
special_tokens_map.json tokenizer 中特殊标记符(special tokens)到数字 ID 的映射关系
tokenizer.json tokenizer 的配置信息,如字典大小、tokenize 策略等
tokenizer.model tokenizer 的具体模型参数,经过训练得到的二进制文件
tokenizer_config.json 使用该 tokenizer 时的配置,如最大序列长度等

模型切片的索引信息

一个完整的大型模型通常会被切分成多个碎片(shards),并以 model-00001-of-00002.safetensors 这种命名方式保存。
pytorch_model.bin.index.json 文件包含所有的模型切片信息,主要包括:

  • 模型切片的总数。

  • 每个切片的元数据,如名称、偏移地址、文件大小等。

  • 切片如何组合起来重新组成完整模型的说明。

  • 一些额外的模型信息,如模型名称、框架版本等元数据。

Tokenizer 特殊标记符(Special Tokens)

special_tokens_map.json 包含 Tokenizer 特殊标记符(Special Tokens)到其对应的数字 ID 的映射。

一些常见的特殊标记符定义包括:

  • unk_token:未登录词(out-of-vocabulary words)的标记 ID。

  • sep_token:句子分隔的标记 ID。

  • pad_token:填充序列到相等长度时使用的填充标记 ID。

  • cls_token:分类任务中使用的分类标记 ID。

  • mask_token:掩码语言模型任务中使用的掩码标记 ID。

safetensors 文件

safetensors 是一种安全快速存储和加载 tensors 的文件格式。
通常,PyTorch 模型权重会使用 Python 的 pickle 工具将数据序列化到一个 .bin 文件中。
然而,pickle 不安全,pickle 的文件可能包含可以执行的恶意代码。safetensors 是 pickle 的一个安全替代方案,非常适合共享模型权重。

有关使用 Safetensors 的详细信息,请参考 Using Safetensors