模型和权重文件管理之HuggingFace

一、文件列表

在使用 Hugging Face 的 transformers 库时,模型文件通常包含两个主要部分:模型权重文件(如 pytorch_model.bin)和词汇表文件(如 vocab.jsonvocab.txt)。

config.json

用于存储模型配置信息的 JSON 文件。它包含了模型的各种元数据和参数设置,这些信息对于正确加载和使用模型至关重要。

config.json样例:
{
"activation_function": "gelu_new",
"architectures": [
"GPT2LMHeadModel"
],
"attn_pdrop": 0.1,
"bos_token_id": 50256,
"embd_pdrop": 0.1,
"eos_token_id": 50256,
"initializer_range": 0.02,
"layer_norm_epsilon": 1e-05,
"model_type": "gpt2",
"n_ctx": 1024,
"n_embd": 768,
"n_head": 12,
"n_layer": 12,
"n_positions": 1024,
"resid_pdrop": 0.1,
"summary_activation": null,
"summary_first_dropout": 0.1,
"summary_proj_to_labels": true,
"summary_type": "cls_index",
"summary_use_proj": true,
"task_specific_params": {
"text-generation": {
  "do_sample": true,
  "max_length": 50
}
},
"vocab_size": 50257
}
}

pytorch_model.bin

pytorch_model.bin是一个二进制文件,它包含了使用 PyTorch 框架训练的深度学习模型的权重和参数。这个文件通常是由模型的训练过程生成的,并且包含了模型在训练过程中学到的所有信息,使得模型可以在之后被加载并用于推理或继续训练。

vocab文件

vocab文件(通常是vocab.txt或vocab.json)是一个包含模型词汇表的文本文件。这个文件列出了模型能够理解和生成的所有单词或子词单元(tokens)。

tokenizer_config.json

tokenizer_config.json是一模型词汇表的配置文件

{"do_lower_case": true, "do_basic_tokenize": true, "never_split": null, "unk_token": "[UNK]", "sep_token": "[SEP]", "pad_token": "[PAD]", "cls_token": "[CLS]", "mask_token": "[MASK]", "tokenize_chinese_chars": true, "strip_accents": null, "special_tokens_map_file": null, "tokenizer_file": null}
  • special_tokens_map.json: 定义特殊 tokens 与其在词汇表中索引之间映射关系的 JSON 文件。这些特殊 tokens 通常包括填充(padding)、起始(start of sentence)、结束(end of sentence)、未知词(unknown word)等标记。
{"unk_token": "[UNK]", "sep_token": "[SEP]", "pad_token": "[PAD]", "cls_token": "[CLS]", "mask_token": "[MASK]"}

二、模型加载示例代码

以下是一个完整的示例代码,展示了如何正确离线加载模型和 tokenizer:

from transformers import GPT2Tokenizer, TFGPT2LMHeadModel

model_path = "./models/gpt2"
tokenizer = GPT2Tokenizer.from_pretrained(model_path)
model = TFGPT2LMHeadModel.from_pretrained(model_path)

# 示例输入
input_text = "Hello, how are you?"

# 编码输入文本
inputs = tokenizer(input_text, return_tensors='tf')

# 生成输出
outputs = model(inputs)

发表评论