当前位置: 首页 > article >正文

【nlp】模型文件构成

一、模型文件

1. 以 llama-2-7b-chat-hf为例

文件名说明
config.json模型架构的主要配置,如Bert模型设置,预测头部设置,训练参数等
generation_config.json文本生成相关的模型配置
ggml-model-f16.gguf专门为LLM推理设计的GGUF格式文件
pytorch_model-00001-of-00002.binpickle序列化的pytorch模型权重参数分块1
pytorch_model-00002-of-00002.binpickle序列化的pytorch模型权重参数分块2
pytorch_model.bin.index.jsonpickle序列化的pytorch索引和描述模型切片的JSON文件
special_tokens_map.json分词器中特殊标记符(special tokens)到其对应的数字id的映射
tokenizer_config.json使用该tokenizer时的一些配置,如:最大序列长度等
tokenizer.jsontokenizer的具体配置信息,如字典大小,tokenize的策略等
tokenizer.modeltokenizer的具体模型配置参数,这是经过训练得到的二进制文件,不可读

这些文件是用于保存和加载大规模语言模型(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_searchsampling
  • 生成过程:在模型训练阶段,开发者可以选择是否同时训练生成模型,并调整与生成相关的参数。生成配置通常由文本生成任务的开发者手动设置,用于推理时生成文本时的参数。

示例内容

{
  "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.binpytorch_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 存储了分词器的模型和字典信息,它是不可读的二进制文件。

http://www.kler.cn/a/420326.html

相关文章:

  • 前端跳转路由的时候,清掉缓存
  • ARP表、MAC表、路由表的区别和各自作用
  • 【C语言】结构体(四)
  • MAUI APP开发蓝牙协议的经验分享:与跳绳设备对接
  • 代码随想录-算法训练营day31(贪心算法01:分发饼干,摆动序列,最大子数组和)
  • C++类与对象(二)
  • 嵌入式入门Day22
  • 学习JavaEE的日子 Day36 字符流
  • 三菱汽车决定退出中国市场,发展重心转移至东南亚
  • 优先算法 —— 双指针系列 - 三数之和
  • 机器学习:机器学习项目的完整周期
  • VS Code配置Lua调试环境
  • 【Verilog】实验三 数码管实验
  • 使用 Pytorch 构建 Vanilla GAN
  • Jenkins环境搭建及简单介绍
  • 十、软件设计架构-微服务-服务调用Dubbo
  • Ubuntu24.04初始化教程(包含基础优化、ros2)
  • 高效处理 iOS 应用中的大规模礼物数据:以直播项目为例(1-礼物池)
  • Ajax:回忆与节点
  • 使用R语言优雅的获取任意区域的POI,道路,河流等数据
  • StarRocks存算分离在得物的降本增效实践
  • 基于Pyside6开发一个通用的在线升级工具
  • Liunx系统编程——shell的简单实现
  • HO-VMD-TCN西储大学轴承故障诊断
  • 分治的思想(力扣965、力扣144、牛客KY11)
  • SQL进阶技巧:非等值连接--单向近距离匹配