大模型的文件有哪些?

发布于:2024-12-18 ⋅ 阅读:(109) ⋅ 点赞:(0)

在大模型仓库(如Hugging Face)中,例如:https://modelscope.cn/models/ZhipuAI/glm-4-9b-chat/files,通常会发现以下几类文件:

  • 模型权重文件:存储训练好的模型参数,是模型推理和微调的基础
    • .pt.ckpt.safetensors
  • 配置文件:确保模型架构的一致性,使得权重文件能够正确加载
    • config.jsongeneration_config.json
  • 词汇表文件:保证输入输出的一致性
    • tokenizer.jsontokenizer_config.json

GLM-4模型文件列表

1、模型权重文件

  • 模型权重文件是存储训练好的模型参数,是模型推理和微调的基础 ,常见的有.pt.ckpt.safetensors

  • 不同的框架(如TensorFlow、PyTorch)使用不同的模型文件格式
    例如:

    • safetensors:适配多种框架,支持transformers库的模型加载
    • PyTorch:选择下载.pt.bin格式的模型文件。
    • TensorFlow:选择下载.ckpt.h5格式的模型文件。

1.1 safetensors是什么?

  • .safetensors是由Hugging Face提出的一种新型的模型权重文件格式,有以下特点:

    • 安全性.safetensors采用了加密和校验机制,防止模型文件被篡改或注入恶意代码
    • 性能:优化了数据加载和解析速度
    • 跨框架支持:有多种深度学习框架的兼容性,便于在不同环境中使用
  • .safetensors中,大模型可被分为多个部分,格式类似modelname-0001.safetensorsmodelname-0002.safetensors

  • model.safetensors.index.json是索引文件,记录了模型的各个部分的位置和大小信息

2、配置文件

  • config.jsongeneration_config.json

2.1 config.json

  • config.json包含模型的配置信息(如模型架构、参数设置等),可能包含隐藏层的数量、每层的神经元数、注意力头的数量等
  • config.json的基本结构如下:
{
  "architectures": [
    "LlamaForCausalLM"
  ],
  "hidden_act": "silu",
  "hidden_size": 8192,
  "num_hidden_layers": 80,
  "max_position_embeddings": 8192,
  "model_type": "llama",
  "num_attention_heads": 64,
  "vocab_size": 128256,
  ......
}
  • 例如architectures字段指定了模型的架构,hidden_act字段指定了隐藏层的激活函数,hidden_size字段指定了隐藏层的神经元数
  • num_attention_heads字段指定了注意力头的数量,max_position_embeddings字段指定了模型能处理的最大输入长度等

2.2 generation_config.json

  • generation_config.json是用于生成文本的配置文件,包含了生成文本时的参数设置,如max_lengthtemperaturetop_k
  • generation_config.json的基本结构如下:
{
  "bos_token_id": 128000,
  "eos_token_id": 128001,
  "do_sample": true,
  "temperature": 0.6,
  "max_length": 4096,
  "top_p": 0.9,
  "transformers_version": "4.40.0.dev0"
}
  • 例如bos_token_id字段指定了开始标记的ID,eos_token_id字段指定了结束标记的ID,do_sample字段指定了是否使用采样,temperature字段用于控制生成文本的随机性,max_length字段指定了生成文本的最大长度,top_p字段指定了采样的概率等
  • config.jsongeneration_config.json 都可能包含 "bos_token_id"(Beginning of Sequence Token ID)和 "eos_token_id"(End of Sequence Token ID)。在config.json中,这两个字段用于模型的加载和训练,而在generation_config.json中,这两个字段用于生成文本时的参数设置
  • config.json 提供模型的基本信息,而 generation_config.json 则细化为生成任务的具体需求

3、词汇表文件

词汇表文件包含了模型使用的词汇表或标记器信息,是自然语言处理模型理解和生成文本的基础。

  • tokenizer.jsontokenizer_config.json

3.1 tokenizer.json

  • tokenizer.json包含了模型使用的词汇表信息,如词汇表的大小、特殊标记的ID等
  • tokenizer.json的基本结构如下:
{
  "version": "1.0",
  "truncation": {
    "max_length": 128,
    "strategy": "longest_first"
  },
  "padding": {
    "side": "right",
    "pad_id": 0,
    "pad_token": "[PAD]"
  },
  "added_tokens": [
    {
      "id": 128010,
      "content": "[CUSTOM]"
    }
  ],
  "normalizer": {
    "type": "NFD",
    "lowercase": true,
    "strip_accents": true
  },
  "pre_tokenizer": {
    "type": "ByteLevel",
    "add_prefix_space": true
  },
  "post_processor": {
    "type": "AddSpecialTokens",
    "special_tokens": {
      "cls_token": "[CLS]",
      "sep_token": "[SEP]"
    }
  },
  "decoder": {
    "type": "ByteLevel"
  },
  "model": {
    "type": "BPE",
    ...
  }
}

  • 其中truncation是定义截断策略,用于限制输入序列的最大长度,padding用于统一输入序列的长度,added_tokens列出分词器额外添加到词汇表中的特殊标记或自定义标记
  • normalizer用于定义文本标准化的步骤和规则,用于在分词前对输入文本进行预处理,pre_tokenizer定义分词器如何将输入文本分割为初步的tokens,post_processor定义分词后处理的步骤
  • decoder定义如何将tokens ID 序列解码回原始文本,model定义了分词器的模型信息,如词汇表、合并规则(对于 BPE)等

3.2 tokenizer_config.json

  • tokenizer_config.json是用于生成文本的配置文件,包含了生成文本时的参数设置,如max_lengthtemperaturetop_k
  • tokenizer_config.json的基本结构如下:
{
  "added_tokens_decoder": [],
  "bos_token": "begin_of_text |>",
  "clean_up_tokenization_spaces": true,
  "eos_token": "<|end_of_text|>",
  "model_input_names": ["input_ids", "attention_mask"],
  "model_max_length": 1000000,
  "tokenizer_class": "PreTrainedTokenizerFast"
}
  • 其中added_tokens_decoder定义分词器在解码(将 token ID 转换回文本)过程中需要额外处理的特殊标记或自定义标记
  • bos_tokeneos_token定义开始、结束标记,clean_up_tokenization_spaces定义了是否清除分词后的多余空格等
  • tokenizer.jsontokenizer_config.json的区别:tokenizer.json侧重于分词器的训练和加载,而tokenizer_config.json更侧重于生成文本时的参数设置

为什么很多模型都没有 vocab.txt 了?现代分词器采用了更为丰富和灵活的文件格式,如 tokenizer.json,以支持更复杂的分词策略和特殊标记处理


网站公告

今日签到

点亮在社区的每一天
去签到