【nlp】模型文件构成
一、模型文件
1. 以 llama-2-7b-chat-hf为例
文件名 | 说明 |
---|---|
config.json | 模型架构的主要配置,如Bert模型设置,预测头部设置,训练参数等 |
generation_config.json | 文本生成相关的模型配置 |
ggml-model-f16.gguf | 专门为LLM推理设计的GGUF格式文件 |
pytorch_model-00001-of-00002.bin | pickle序列化的pytorch模型权重参数分块1 |
pytorch_model-00002-of-00002.bin | pickle序列化的pytorch模型权重参数分块2 |
pytorch_model.bin.index.json | pickle序列化的pytorch索引和描述模型切片的JSON文件 |
special_tokens_map.json | 分词器中特殊标记符(special tokens)到其对应的数字id的映射 |
tokenizer_config.json | 使用该tokenizer时的一些配置,如:最大序列长度等 |
tokenizer.json | tokenizer的具体配置信息,如字典大小,tokenize的策略等 |
tokenizer.model | tokenizer的具体模型配置参数,这是经过训练得到的二进制文件,不可读 |
这些文件是用于保存和加载大规模语言模型(LLM)的各个部分,涵盖了从模型架构配置、权重参数到分词器相关的配置信息。下面是这些文件的详细介绍,以及它们在训练过程中如何生成的。
1. config.json
- 作用:该文件包含
模型架构
的主要配置。通常包括如下内容:- 模型设置:如层数、隐藏单元的数量、注意力头数等。
- 预测头部设置:如分类任务中使用的线性层设置、生成任务中的解码器配置等。
- 训练参数:如学习率、批次大小、优化器设置等。
- 模型超参数:例如
hidden_size
,num_attention_heads
,num_layers
等。
- 生成过程:在训练过程中,通常是在模型架构设计阶段由开发者手动设置。这些配置决定了模型的基本结构,确保模型在加载时能够恢复相应的架构。
示例内容(以BERT为例):
{
"hidden_size": 768,
"num_attention_heads": 12,
"num_hidden_layers": 12,
"vocab_size": 30522,
"max_position_embeddings": 512,
"type_vocab_size": 2,
"initializer_range": 0.02,
"layer_norm_eps": 1e-12
}
2. generation_config.json
- 作用:该文件包含
文本生成任务
的相关配置。它是生成任务(如GPT模型生成文本)的配置文件。通常包括:- 最大生成长度:如
max_length
。 - 温度、Top-K、Top-P等采样参数:控制生成文本的多样性。
- 解码策略:如
beam_search
或sampling
。
- 最大生成长度:如
- 生成过程:在模型训练阶段,开发者可以选择是否同时训练生成模型,并调整与生成相关的参数。生成配置通常由文本生成任务的开发者手动设置,用于推理时生成文本时的参数。
示例内容:
{
"max_length": 50,
"temperature": 0.7,
"top_k": 50,
"top_p": 0.95,
"do_sample": true
}
3. ggml-model-f16.gguf
- 作用:这是一个特定格式(GGUF,GGML)保存的
语言模型权重文件
。GGUF格式特别设计用于LLM推理,以便高效存储并加载大模型。这些文件通常包含了经过优化的参数,用于快速推理。 - 生成过程:通常在训练完成后,将模型权重(例如,通过
pytorch_model.bin
文件)转换成GGUF格式,以便用于高效的推理。在一些应用中,开发者可能会将模型转化为GGUF格式,以便部署在某些特定硬件上(如GPU或TPU)。
4. pytorch_model-00001-of-00002.bin
和 pytorch_model-00002-of-00002.bin
- 作用:这两个文件是训练过程中
分块保存的 PyTorch 模型权重
。这种分块保存的方式是为了处理超大模型,使得单个文件无法容纳全部参数时,模型可以被分割成多个部分来存储。 - 生成过程:在模型训练的过程中,尤其是大规模语言模型训练中,由于模型权重庞大,无法单个文件保存。因此,PyTorch 会将权重按块分割成多个文件保存。在加载模型时,这些文件会被合并,以恢复完整的模型。
示例文件名:
pytorch_model-00001-of-00002.bin
:保存了模型的一部分权重。pytorch_model-00002-of-00002.bin
:保存了模型的另一部分权重。
5. pytorch_model.bin.index.json
- 作用:这是一个包含
模型权重切片描述
的 JSON 文件。它提供了有关模型各个部分(分块)的索引信息,用于加载模型时自动恢复不同分块的顺序和位置。 - 生成过程:在训练过程中,PyTorch 会在分块保存权重的同时生成该索引文件。该文件记录了每个分块对应的模型层或者权重部分的位置等信息,确保在加载时模型能够正确地组合成完整的结构。
示例内容:
{
"weight_map": {
"0": "pytorch_model-00001-of-00002.bin",
"1": "pytorch_model-00002-of-00002.bin"
}
}
6. special_tokens_map.json
- 作用:该文件用于映射分词器中使用的
特殊标记符
(如[CLS]
,[SEP]
,[PAD]
,[UNK]
等)到它们对应的数字 ID。 - 生成过程:在训练过程中,分词器会根据数据集中的特殊标记生成相应的映射,通常这些标记会在分词阶段(如BERT的tokenizer)定义和使用。此文件保证分词器在处理文本时能够正确地转换特殊标记。
示例内容:
{
"[PAD]": 0,
"[CLS]": 1,
"[SEP]": 2,
"[UNK]": 3
}
special_tokens_map.json包含Tokenizer特殊标记符(Special Tokens)到其对应的数字ID的与映射。
一些常见的特殊标记符定义包括:
1、unk_token:未登录次(out-of-vocabulary)的标记id
2、sep_token:句子分割的标记id
3、pad_token: 填充序列到相等长度时使用的填充标记id
4、cls_token: 分类任务中使用的分类标记id
5、mask_token: 掩码语言模型任务中使用的掩码标记id
7. tokenizer_config.json
- 作用:该文件包含了
分词器
的一些配置参数,如:- 最大序列长度:决定模型接受的最大输入长度。
- 特殊标记的配置:如
[PAD]
,[CLS]
,[SEP]
等。 - 词汇表大小等。
- 生成过程:该文件由分词器生成,通常在训练阶段或者模型初始化时会基于训练数据生成。它可以包括一些可选的分词器设置,如最大序列长度、词表大小等。
示例内容:
{
"max_length": 512,
"do_lower_case": true,
"pad_token": "[PAD]",
"unk_token": "[UNK]",
"cls_token": "[CLS]",
"sep_token": "[SEP]"
}
8. tokenizer.json
- 作用:该文件包含了
分词器的具体配置信息
,如字典大小、tokenizer的策略(例如基于子词的tokenization、基于字节对编码(BPE)等)。 - 生成过程:通常在训练模型时,特别是在大规模数据集上训练时,训练好的分词器会保存为
tokenizer.json
文件。该文件包含了分词器的所有信息,包括词汇表(vocab)和分词策略等。
示例内容:
{
"vocab_size": 30522,
"merges": [...], # BPE的合并规则
"token_to_id": { ... }, # 每个token到id的映射
"id_to_token": { ... } # 每个id到token的映射
}
9. tokenizer.model
- 作用:这是
分词器的模型文件
,通常包含分词模型的二进制数据(例如,BPE的词汇表)。它是经过训练得到的,不可读。 - 生成过程:在训练模型时,分词器通常也会同时被训练,并保存为二进制模型文件。
tokenizer.model
存储了分词器的模型和字典信息,它是不可读的二进制文件。