GLM-130B
一、预训练
采用双向注意力机制,对被遮挡的部分进行预测,
可以自由设置单词mask,句子smask,文章gmask,可以根据任务的不同设置mask,文本理解设置单词级别mask,文本生成色湖之句子级别的gmask,glm130B中设置的师70%句子级别gmask,30%词级别mask,
二、模型架构LayerNorm
不同于bert采用transformer架构中attention后进行layernorm,glm采用attention前后进行归一化
用DeepNorm(x) = LayerNorm(α · x + Network(x)),其中α = (2N) 二分之一,
是的模型训练更具稳定性,
Positional Embedding
1,绝对位置编码,三角式,可学习式,
2,相对位置编码,attention中建模单词两两之间的相对距离,
3,RoPE旋转式编码,绝对编码实现相对编码,主要就是对每个位置token中的q, k向量乘以矩阵,然后用更新的q,k向量做attention中的内积就会引入相对位置信息了
GLM和LLaMA都是选用旋式编码
整个流程,相当于forward 参数的计算都是fp16,,更新梯度使用fp32,有更长的表示范围,
转换机制使用float2hat,
四、数据并行,ZeRO优化器
模型并行,流水线并行,将每个stage分别放置到不同的显卡上计算,
五、训练稳定性,
1,attention中在softmax处理之前,乘以一个系数阿尔法,
2,调小embedding层的梯度,缓解梯度爆炸,
3,使用deepnorm归一化,
激活函数,改进transformer中的FFN,使用GeGLu代替relu
六、扩充词表,tockernizer,收集语料,然后用SentencePiece训练后,再拼接词表
七、GLM是一种基于transformer架构的语言模型,利用其空白填空作为其训练目标,对于文本序列x{x1…xm}和文本片段{s1,…sm}从其中采样,每个si表示一个连续标记片段[si,1,…si,li]
并用单个掩码标记替换,形成x,模型要求对它进行自回归回复,
八、预训练数据:包括1.2T Pile (Gao et al., 2020)英语语料库、1.0T汉语五道语料库(Yuan et al.,从网上爬取的250G中文语料库(包括在线论坛、百科全书和问答),形成了中英文数据集
九、Chatglm2-6B,具体信息,
模型结构是,堆叠了28层transformer结构,输入维度是4096,mutil-attention-head是32头
model: ChatGLMForConditionalGeneration(
(transformer): ChatGLMModel(
(embedding): Embedding(
(word_embeddings): Embedding(65024, 4096)
)
(rotary_pos_emb): RotaryEmbedding()
(encoder): GLMTransformer(
(layers): ModuleList(
(0-27): 28 x GLMBlock(
(input_layernorm): RMSNorm()
(self_attention): SelfAttention(
(query_key_value): Linear(in_features=4096, out_features=4608, bias=True)
(core_attention): CoreAttention(
(attention_dropout): Dropout(p=0.0, inplace=False)
)
(dense): Linear(in_features=4096, out_features=4096, bias=False)
)
(post_attention_layernorm): RMSNorm()
(mlp): MLP(
(dense_h_to_4h): Linear(in_features=4096, out_features=27392, bias=False)
(dense_4h_to_h): Linear(in_features=13696, out_features=4096, bias=False)
)
)
)
(final_layernorm): RMSNorm()
)
(output_layer): Linear(in_features=4096, out_features=65024, bias=False)
(prefix_encoder): PrefixEncoder(
(embedding): Embedding(128, 14336)
)
(dropout): Dropout(p=0.1, inplace=False)
)
)
参数解释:
AutoModel.from_pretrained()是AutoModel类的一个方法,用于从预训练模型或模型文件加载模型。它接受以下参数:
pretrained_model_name_or_path (str):必需参数,指定预训练模型的名称或路径。可以是Hugging Face模型中的名称(如bert-base-uncased),也可以是本地文件系统中模型的路径(如/path/to/model.bin)。
config (PretrainedConfig, optional):可选参数,指定预训练模型的配置对象。如果未提供,将根据pretrained_model_name_or_path自动加载相应的配置。
state_dict (str, optional):可选参数,指定加载的模型权重的状态字典。这对于加载自定义训练的模型非常有用。如果提供了state_dict,将忽略pretrained_model_name_or_path和config参数。
cache_dir (str, optional):可选参数,指定缓存目录的路径,用于存储下载的模型和权重文件。如果未提供,将使用默认的缓存目录。
force_download (bool, optional):可选参数,指定是否强制下载模型和权重文件。如果设置为True,将始终从网络下载,忽略缓存。默认为False。
resume_download (bool, optional):可选参数,指定是否在下载中断后恢复下载。如果设置为True,则会尝试从中断的位置继续下载。默认为False。
proxies (dict, optional):可选参数,指定用于下载模型和权重文件的代理设置。可以提供HTTP和HTTPS代理。例如:{‘http’: ‘http://proxy.example.com:1234’, ‘https’: ‘https://proxy.example.com:5678’}。
return_unused_kwargs (bool, optional):可选参数,指定是否返回未使用的关键字参数。如果设置为True,则返回一个包含未使用关键字参数的字典。默认为False。
返回值:
model (PreTrainedModel):加载的预训练模型。
Tokenizer: ChatGLMTokenizer(name_or_path=‘/home/.cache/huggingface/hub/models–THUDM–chatglm2-6b/snapshots/31d45da2d8f14e55f459e15da7e5e57e32dd1e93’, vocab_size=64794, model_max_length=1000000000000000019884624838656, is_fast=False, padding_side=‘left’, truncation_side=‘right’, special_tokens={})
参数解释:
AutoTokenizer是一个用于自动选择和加载分词器的工具类。它根据提供的模型名称或路径自动识别和加载与之相对应的分词器。分词器用于将文本拆分成适合输入模型的标记。
AutoTokenizer.from_pretrained()是AutoTokenizer类的一个方法,用于从预训练模型加载分词器。它接受以下参数:
pretrained_model_name_or_path (str):必需参数,指定预训练模型的名称或路径。可以是Hugging Face模型中的名称(如bert-base-uncased),也可以是本地文件系统中模型的路径(如/path/to/tokenizer)。
config (PretrainedConfig, optional):可选参数,指定预训练模型的配置对象。如果未提供,将根据pretrained_model_name_or_path自动加载相应的配置。
cache_dir (str, optional):可选参数,指定缓存目录的路径,用于存储下载的分词器文件。如果未提供,将使用默认的缓存目录。
use_fast (bool, optional):可选参数,指定是否使用快速分词器。如果设置为True,将使用快速分词器,否则使用标准分词器。默认为True。
additional_special_tokens (list or dict, optional):可选参数,指定额外的特殊标记。可以是一个标记列表,也可以是一个包含特殊标记和它们的词频的字典。
return_unused_kwargs (bool, optional):可选参数,指定是否返回未使用的关键字参数。如果设置为True,则返回一个包含未使用关键字参数的字典。默认为False。
返回值:
tokenizer (PreTrainedTokenizer):加载的预训练分词器。
config:
ChatGLMConfig {
“_name_or_path”: “/home/.cache/huggingface/hub/models–THUDM–chatglm2-6b/snapshots/31d45da2d8f14e55f459e15da7e5e57e32dd1e93”,
“add_bias_linear”: false,
“add_qkv_bias”: true,
“apply_query_key_layer_scaling”: true,
“apply_residual_connection_post_layernorm”: false,
“architectures”: [
“ChatGLMModel”
],
“attention_dropout”: 0.0,
“attention_softmax_in_fp32”: true,
“auto_map”: {
“AutoConfig”: “configuration_chatglm.ChatGLMConfig”,
“AutoModel”: “modeling_chatglm.ChatGLMForConditionalGeneration”,
“AutoModelForSeq2SeqLM”: “modeling_chatglm.ChatGLMForConditionalGeneration”
},
“bias_dropout_fusion”: true,
“eos_token_id”: 2,
“ffn_hidden_size”: 13696,
“fp32_residual_connection”: false,
“hidden_dropout”: 0.0,
“hidden_size”: 4096,
“kv_channels”: 128,
“layernorm_epsilon”: 1e-05,
“model_type”: “chatglm”,
“multi_query_attention”: true,
“multi_query_group_num”: 2,
“num_attention_heads”: 32,
“num_layers”: 28,
“original_rope”: true,
“pad_token_id”: 0,
“padded_vocab_size”: 65024,
“post_layer_norm”: true,
“pre_seq_len”: 128,
“prefix_projection”: false,
“quantization_bit”: 0,
“rmsnorm”: true,
“seq_length”: 32768,
“tie_word_embeddings”: false,
“torch_dtype”: “float16”,
“transformers_version”: “4.27.1”,
“use_cache”: true,
“vocab_size”: 65024
}
参数解释:AutoConfig是一个用于自动选择和加载配置的工具类。它根据提供的模型名称或路径自动识别和加载与之相对应的配置。配置文件包含了模型的架构和参数设置,如层数、隐藏单元数、注意力机制等。
AutoConfig.from_pretrained()是AutoConfig类的一个方法,用于从预训练模型或模型文件加载配置。它接受以下参数:
pretrained_model_name_or_path (str):必需参数,指定预训练模型的名称或路径。可以是Hugging Face模型中的名称(如bert-base-uncased),也可以是本地文件系统中模型的路径(如/path/to/config.json)。
cache_dir (str, optional):可选参数,指定缓存目录的路径,用于存储下载的模型和配置文件。如果未提供,将使用默认的缓存目录。
force_download (bool, optional):可选参数,指定是否强制下载模型和配置文件。如果设置为True,将始终从网络下载,忽略缓存。默认为False。
resume_download (bool, optional):可选参数,指定是否在下载中断后恢复下载。如果设置为True,则会尝试从中断的位置继续下载。默认为False。
proxies (dict, optional):可选参数,指定用于下载模型和配置文件的代理设置。可以提供HTTP和HTTPS代理。例如:{‘http’: ‘http://proxy.example.com:1234’, ‘https’: ‘https://proxy.example.com:5678’}。
return_unused_kwargs (bool, optional):可选参数,指定是否返回未使用的关键字参数。如果设置为True,则返回一个包含未使用关键字参数的字典。默认为False。
返回值:
config (PretrainedConfig):加载的预训练配置对象。