📌随着大模型的火热🔥,许多人开始纷纷入坑🕳️大模型,不过目前很多人都只是基于开源的大模型做微调,今天毛毛张要分享的是关于Hugging Face下载大模型微调文件的说明,有助于大家下载的微调文件的作用
1.前言
上图是毛毛张在HuggingFace
的官网上的ChatGLM-6B
大模型的所有文件,对于初学者来说,对于上面的文件是干什么的很多小伙伴是很迷糊的,根本不知道是干什么的,毛毛张接下来将简单讲述一下上面的每个文件的作用。
2.文件说明
在Hugging Face
的模型存储库中,这些文件通常用于表示预训练模型及其相关配置、模型权重、词汇表和分词器等。下面是这些文件的一般作用:
.gitignore
:是一个纯文本文件,包含了项目中所有指定的文件和文件夹的列表,这些文件和文件夹是Git
应该忽略和不追踪的MODEL_LICENSE
:模型商用许可文件REDAME.md
:略config.json
:模型配置文件,包含了模型的各种参数设置,例如层数、隐藏层大小、注意力头数及Transformers API
的调用关系等,用于加载、配置和使用预训练模型。configuration_chatglm.py
:是该config.json
文件的类表现形式,模型配置的Python
类代码文件,定义了用于配置模型的ChatGLMConfig
类。modeling_chatglm.py
:源码文件,ChatGLM
对话模型的所有源码细节都在该文件中,定义了模型的结构和前向传播过程,例如ChatGLMForConditionalGeneration
类。model-XXXXX-of-XXXXX.safetensors
:安全张量文件,保存了模型的权重信息。这个文件通常是TensorFlow
模型的权重文件。model.safetensors.index.json
:模型权重索引文件,提供了safetensors
文件的索引信息。pytorch_model-XXXXX-of-XXXXX.bin
:PyTorch
模型权重文件,保存了模型的权重信息。这个文件通常是PyTorch
模型的权重文件。pytorch_model.bin.index.json
:PyTorch
模型权重索引文件,提供了bin
文件的索引信息。说明1:
在实际使用过程中不需要将这两种类型的权重文件都下载下来,只需要下载一类即可,还包括对应的
.index.json
;在使用过程中都是调用transformers包
进行加载,两种格式都可以加载,即使在PyTorch
环境中也可以下载.safetensors
格式的模型权重进行加载,只要安装了transformers包
即可。
说明2:传统的,
Pytorch
会保存一个完整的文件,包含参数名到权重的映射关系。这个映射关系表称为state_dict
。# PyTorch文档给出的保存和加载模型代码示例 # Save the model weights torch.save(my_model.state_dict(), 'model_weights.pth') # Reload them new_model = ModelClass() new_model.load_state_dict(torch.load('model_weights.pth'))
在模型参数小于10亿时,上面代码一般运行没有问题。但是对于大模型(超过10亿参数),上面的代码就有点不能用了。像
ChatGPT
模型有1760亿个参数,就算使用全精度(bfloat16
数据类型)来保存权重,它会消耗352GB的存储空间。对于超级计算机,可以完成加载、训练和保存的任务,但是对于用户侧的推理,这个存储需求就要另外想办法了。这个方法就是将模型权重文件切分为多个文件,如果模型
.bin
文件形式进行保存,会得到两种后缀格式的文件:pytorch_model_xxxxx-of-000XX.bin
:每个都是模型权重的一部分,通过这种文件格式切分,可以在内存中一个一个加载(不用全部加载,导致超出内存存储能力。可以实现加载部分权重到模型、移动到GPU或其他设备上进行计算、以及加载下一部分权重时,去除上一部分已加载的权重来释放内存或显存等)。与加载全部的模型不同,我们的机器只需要能够加载最大的一个checkpoint即可,这里称为分片。pytorch_model.bin.index.json
:参数名 与 模型bin文件的映射表。
quantization.py
:量化代码文件,包含了模型量化的相关代码。special_tokens_map.json
:特殊标记映射文件,用于指定特殊标记(如起始标记、终止标记等)的映射关系。tokenization_chatglm.py
:分词器的Python
类代码文件,用于chatglm3-6b
模型的分词器,它是加载和使用模型的必要部分,定义了用于分词的ChatGLMTokenizer
类。tokenizer.model
:包含了训练好的分词模型,保存了分词器的模型信息,用于将输入文本转换为标记序列;通常是二进制文件,使用pickle
或其他序列化工具进行存储和读取。tokenizer_config.json
:含了分词模型的配置信息,用于指定分词模型的超参数和其他相关信息,例如分词器的类型、词汇表大小、最大序列长度、特殊标记等LFS
:Large File Storage
,大文件存储
这些文件共同构成了一个完整的预训练模型及其相关组件,可以通过加载这些文件来实例化模型、配置模型、分词等操作。