.gitignore
:是一个纯文本文件,包含了项目中所有指定的文件和文件夹的列表,这些文件和文件夹是Git
应该忽略和不追踪的MODEL_LICENSE
:模型商用许可文件
:略
:模型配置文件,包含了模型的各种参数设置,例如层数、隐藏层大小、注意力头数及Transformers API
的调用关系等,用于加载、配置和使用预训练模型。configuration_chatglm.py
:是该
文件的类表现形式,模型配置的Python
类代码文件,定义了用于配置模型的 ChatGLMConfig
类。modeling_chatglm.py
:源码文件,ChatGLM
对话模型的所有源码细节都在该文件中,定义了模型的结构和前向传播过程,例如 ChatGLMForConditionalGeneration
类。
:安全张量文件,保存了模型的权重信息。这个文件通常是 TensorFlow
模型的权重文件。
:模型权重索引文件,提供了 safetensors
文件的索引信息。pytorch_model
:PyTorch
模型权重文件,保存了模型的权重信息。这个文件通常是 PyTorch
模型的权重文件。pytorch_model.
:PyTorch
模型权重索引文件,提供了 bin
文件的索引信息。
说明1:
在实际使用过程中不需要将这两种类型的权重文件都下载下来,只需要下载一类即可,还包括对应的
.
;在使用过程中都是调用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
:每个都是模型权重的一部分,通过这种文件格式切分,可以在内存中一个一个加载(不用全部加载,导致超出内存存储能力。可以实现加载部分权重到模型、移动到GPU或其他设备上进行计算、以及加载下一部分权重时,去除上一部分已加载的权重来释放内存或显存等)。与加载全部的模型不同,我们的机器只需要能够加载最大的一个checkpoint即可,这里称为分片。pytorch_model.
:参数名 与 模型bin文件的映射表。
:量化代码文件,包含了模型量化的相关代码。special_tokens_map.json
:特殊标记映射文件,用于指定特殊标记(如起始标记、终止标记等)的映射关系。tokenization_chatglm.py
:分词器的Python
类代码文件,用于chatglm3-6b
模型的分词器,它是加载和使用模型的必要部分,定义了用于分词的 ChatGLMTokenizer
类。
:包含了训练好的分词模型,保存了分词器的模型信息,用于将输入文本转换为标记序列;通常是二进制文件,使用pickle
或其他序列化工具进行存储和读取。tokenizer_config.json
:含了分词模型的配置信息,用于指定分词模型的超参数和其他相关信息,例如分词器的类型、词汇表大小、最大序列长度、特殊标记等LFS
:Large File Storage
,大文件存储