在大语言模型(LLM)训练、微调和部署过程中,通常会涉及到多种不同类型的文件。每种文件都有特定的用途,以便存储模型的结构、参数、配置以及辅助信息。这些文件对于模型的运行、管理和进一步优化都是非常重要的。以下是一些常见的大模型相关文件及其作用:
1、模型文件
1.1 pytorch_model.bin
这个文件包含了模型的预训练权重,是 PyTorch 格式的二进制文件。在 Hugging Face Transformers 中,通常以 .bin
格式保存模型的参数。
1.2 tf_model.h5
如果模型是用 TensorFlow 训练的,参数会保存在 .h5
文件中。这是 TensorFlow 格式的模型文件。
1.3 model-00001-of-0000x.safetensors
模型的权重,使用 .safetensors
格式。safetensors
是一种替代传统 .bin
格式的权重保存格式,它是专为安全、快速加载而设计的。
1.4 adapter_model.safetensors
存储适配器模型的权重,使用 .safetensors
格式。
adapter_model.safetensors
是一种用于存储适配器(adapter)模型权重的文件,通常用于参数高效微调(PEFT, Parameter-Efficient Fine-Tuning)的大模型。在 NLP 和大语言模型(LLM)的训练和微调过程中,使用适配器是一种非常有效的方法,可以在保持原始模型大部分参数冻结的情况下,通过训练少量新增参数来适应特定任务。
适配器(Adapter)是什么?
- 适配器是一种微调方法,旨在降低传统微调过程中的内存和计算开销。适配器模型通过在原有的大模型的特定层中插入一些小的模块来进行训练,这些模块通常参数量较小,只需要少量的计算资源就可以实现模型在新任务上的有效微调。
- 在适配器训练中,主模型的大部分参数保持冻结状态,仅训练适配器模块中的参数,这样既保留了主模型的通用知识,又能够快速适应新任务。
1.5 checkpoint
checkpoint
:在训练或微调过程中,模型的状态可以保存为多个 检查点(checkpoint),以便在训练中断后从上次的状态继续。每个 checkpoint 可能包含参数权重、优化器状态等。
2、配置文件
2.1 config.json
config.json
:该文件包含模型的配置信息,如模型层数、隐藏层大小、注意力头数等。配置文件定义了模型的架构,是模型加载时需要参考的重要内容。微调或部署模型时,这个文件可以用于创建模型的架构。
2.2 training_args.json
training_args.json
:这个文件记录了训练时的超参数设置,例如学习率、批量大小、优化器类型等。它通常用于再现训练过程或在微调中使用相同的参数设置。
2.3 adapter_config.json
包含适配器(adapter)配置的信息。适配器是一种参数高效微调方法,通过添加较小的模块在模型内部进行特定任务的适应性训练。这个文件定义了适配器的结构和超参数(如层数、隐藏层维度等)。
3、词汇表文件
3.1 vocab.txt | vocab.json
vocab.txt
或 vocab.json
:这个文件包含了模型所用的词汇表。对于 BERT 这样的模型,vocab.txt
存储了词汇和对应的索引。对于 GPT-3 或其他使用字节对编码(BPE)的模型,vocab.json
会保存分词后的词汇与其编码关系。
3.2 merges.txt
merges.txt
是一个用于**字节对编码(BPE, Byte Pair Encoding)**分词算法的文件。在自然语言处理领域,尤其是大语言模型(如 GPT、BERT 等)中,BPE 分词是一种常见的分词方式,它能够将输入的文本分割为模型可以理解的子词单元,以有效应对词汇量过大、长尾词等问题。
BPE 分词与 merges.txt
字节对编码(BPE) 是一种数据压缩和分词技术,能够逐步将最频繁的字符对合并为子词,最终形成适合语言模型的词汇表。在这个过程中,merges.txt
文件保存了合并规则的历史记录。
-
BPE 分词的原理:
- 初始化:一开始,所有单词都会被分割成最小的单元(即字符)。
- 统计频率:统计文本中所有字符对的出现频率,找到出现次数最多的字符对。
- 合并字符对:将这个频率最高的字符对合并为一个新的子词单元,并将这个新子词加入词汇表中。
- 重复步骤:反复执行该过程,直到达到预设的词汇表大小或者没有频繁的字符对可以合并。
-
merges.txt
文件的内容:-
merges.txt
文件记录了每一步中合并的字符对信息,这些信息用于在分词过程中恢复原来的合并过程。 -
每一行代表一个字符对(或子词对)的合并规则。例如:
t h th e e r er y
-
这些行表示在编码过程中,t
和 h
先被合并为 th
,接着 th
和 e
被合并为 the
,以此类推。
在模型训练或者推理时,merges.txt
文件用于指导分词器如何将输入的文本进行分割或者合并,以便形成模型的输入子词单元。
通过 merges.txt
,BPE 分词器能够以一致的方式将文本编码为子词,使得模型可以更好地处理不同长度和多样性的文本输入。
3.3 added_tokens.json
存储在微调或预处理过程中额外添加的词汇。这些词汇可能是特定领域的专有名词、符号或其他特殊标记,便于模型更好地处理特定任务。
4、分词器文件
4.1 tokenizer.json
tokenizer.json
:这个文件包含了分词器的全部信息,包括词汇表和编码规则。它通常是自包含的,适用于一些 Transformer 模型的分词过程。
4.2 special_tokens_map.json
special_tokens_map.json
:包含特殊标记(例如 [CLS]
、[SEP]
等)和它们在词汇表中的对应关系。特殊标记在自然语言处理任务中用于标记文本的开始、结束或区分不同类型的段落。
4.3 tokenizer_config.json
tokenizer_config.json
:这个文件包含分词器的配置参数,定义了如何初始化和加载分词器,例如最大长度、处理方式等。这些配置会影响模型的输入预处理方式。
5、辅助文件
5.1 preprocessor_config.json
preprocessor_config.json
:一些模型会有预处理器的配置文件,定义如何在模型输入之前对原始数据进行处理。比如文本标准化、去除空格等预处理步骤。
5.2 added_tokens.json
added_tokens.json
文件用于存储在分词器(Tokenizer)中额外添加的特殊词汇或标记,通常是在训练、微调、或部署过程中,根据特定的需求将这些新词汇或标记加入模型的词汇表。该文件是以 JSON 格式保存,内容描述了这些新增词汇及其在分词器词汇表中的位置。
原始的预训练模型通常是基于大量的通用数据构建的词汇表,这个词汇表可能缺少特定领域的词汇、缩写或符号。通过 added_tokens.json
文件,可以向原始模型中增加这些特定的词汇,避免模型在处理这些词汇时将它们拆分成不合理的子词。这对于提高模型在特定领域的表现非常重要。
6、训练日志与监控文件
6.1 events.out.tfevents.*
events.out.tfevents.\*
:这些文件是由 TensorBoard 生成的,用于存储训练过程中的日志信息,比如损失函数变化、指标评估结果等。通过这些文件可以在 TensorBoard 中可视化模型训练的各种信息。
6.2 trainer_state.json
保存了训练过程的状态,例如当前的 epoch、步数、优化器状态等。这对于在训练中断后恢复训练非常重要,可以使训练过程从中断点继续。
6.3 trainer_results.json
保存了训练的最终结果,如训练集上的损失、评估指标等。它通常用于分析训练过程的表现,以及对模型进行调优。
6.4 log.txt
log.txt
:用于记录训练或微调过程中的日志,方便进行调试或追踪训练进展。
6.5 all_results.json
保存了训练或评估过程中的所有结果,例如准确率、损失值等评估指标。这可以帮助进行模型性能的综合评估。
6.6 trainer_log.jsonl
训练日志文件,使用 .jsonl
格式保存,每行是一个 JSON 对象,包含训练过程中的各种信息,例如每个 epoch 的损失、评估结果等。它用于追踪训练过程,方便调试和分析。
7、优化文件
7.1 optimizer.pt | scheduler.pt
optimizer.pt
和 scheduler.pt
:在训练过程中,保存优化器和学习率调度器的状态,这些文件可以帮助在训练中断后继续相同的学习率策略和优化进度。
8、说明文件
8.1 requirements.txt
记录了训练或运行模型所需的 Python 库及其版本。例如,用于模型微调和部署的环境所需的 PyTorch、Transformers 库、DeepSpeed 等依赖。
8.2 Dockerfile
用于构建包含所有环境依赖的 Docker 镜像,以便在一致的环境中部署和运行大模型,特别是用于跨团队共享和云端部署。
8.3 README.md
说明文件,包含关于项目或模型的信息、使用方法、依赖项以及其他相关细节,方便用户了解如何使用和运行模型。