someone
someone
直接用就行,读也是3个文件都要读
> @xiongma 碰到了同样的问题,第一个epoch=2.3,然后loss=0,加载权重后发现很多层都变成了nan。我感觉是FP16在全量微调下不稳定可能造成了梯度爆炸。我在模型初始化后加了一步model.float(), 把模型参数调整成了FP32,再进行微调loss就正常了。但确实是既慢。。。又大。。。。 我用peft模块的lora微调的时候,用fp16加载的模型会运行失败,我推测应该lora部分的参数是fp32导致最终merge的模型参数精度不一致然后失败的。我就用fp32加载的glm模型,然后用lora微调也会出现loss一开始的几个step是十几,然后就变成nan了。。。
💓💓感谢回答~ 看完之后依然有些问题👁👁 > 两个设计的核心思路是一样的(我理解是说chatglm1和chatglm2的mask设计?),即 prefix tokens + prompt 部分不被遮掩,answer部分被遮掩,区别是代码整体组织不一样、past_key_values的应用也不一样。 我认为1是这样,2不是。2是prefix tokens部分双向注意力(不被遮掩),prompt+answer部分单向注意力(被遮掩)。llama1、2的代码暂时还没看过,所以具体实现不是太清楚~ 之后可以学习学习~ glm1目前只是看过代码,没有测试输出1的中间过程确认,不过看代码认为1的mask实现的逻辑是prefix tokens + prompt 部分是双向注意力,answer是单向注意力。这个后续也可以运行验证一下。 glm2训练的过程中我把不同阶段的mask打印了出来,下面是整个过程和结论,如果有不正确的,希望帮我指出~~ 1. 第1阶段的mask是输入的attention_mask,这个时候只是padding_mask,假设是[1,1,1,1,1,0,0,0,0,0]; 2. 第2阶段是在ChatGLMModel的forward中进行了mask的计算: ```` if self.pre_seq_len is not None: if past_key_values...
> 作者在之前的issue里好像说过,chatglm2是causal llm,不是prefix llm,所以似乎没有双向注意力部分,都是单向注意力;也就是说GLM本身在设计的时候,是prefix-llm,但是应用在chatGLM时,讲双向注意力部分去掉了? > 作者在之前的issue里好像说过,chatglm2是causal llm,不是prefix llm 感觉这个比较符合我的认知,哈哈哈哈,还能找到对应的链接吗?想看看👁👁 glm论文的研究目标是想提出一个在nlu和nlg效果都比较好的、统一3种模型结构的模型,按照论文的掩码示意图感觉就是一个encoder-decoder的结构。之前看的文章也基本会从causal llm和prefix llm两个维度介绍llm,prefix llm都会举例chatglm。我是直接触的chatglm2,结果感觉它模型结构一直跟之前的介绍对不上,强迫症都要犯了💊💊🤣🤣 感觉1->2还是有结构上的调整,中间的变换过程应该是没论文吧?我好像没找到2对应的论文😅
> > > 作者在之前的issue里好像说过,chatglm2是causal llm,不是prefix llm,所以似乎没有双向注意力部分,都是单向注意力;也就是说GLM本身在设计的时候,是prefix-llm,但是应用在chatGLM时,讲双向注意力部分去掉了? > > > > > > > 作者在之前的issue里好像说过,chatglm2是causal llm,不是prefix llm > > > > > > 感觉这个比较符合我的认知,哈哈哈哈,还能找到对应的链接吗?想看看👁👁 > > glm论文的研究目标是想提出一个在nlu和nlg效果都比较好的、统一3种模型结构的模型,按照论文的掩码示意图感觉就是一个encoder-decoder的结构。之前看的文章也基本会从causal llm和prefix llm两个维度介绍llm,prefix llm都会举例chatglm。我是直接触的chatglm2,结果感觉它模型结构一直跟之前的介绍对不上,强迫症都要犯了💊💊🤣🤣 >...
> 不同样本算出来的评价指标是不一样的。可能刚好没有加载到同样的样本。 🤣 每次都是一样的验证、测试数据,我把样本直接按照train、eval、test三部分存了3个文件,每次执行每个部分的数据都是一样的🤭
> 加这个参数就可以: > > > training_args.ddp_find_unused_parameters=False > > 参见: https://stackoverflow.com/questions/68000761/pytorch-ddp-finding-the-cause-of-expected-to-mark-a-variable-ready-only-once 太赞了,设置完可以正常双卡训练了🎉🎉 不过我没设置之前`ddp_find_unused_parameters`默认是`None`,感觉和`False`应该是类似,有点奇怪🤣
一个batch内的dropout mask理论上是一样的,一个batch同一个句子重复两遍,经过的也是相同的dropout mask,理论上encoder输出的向量是一样的,感觉没有引入dropout noisy啊 —— 尴尬😓review了一遍dropout层的实现,正常在不传入noisy_shape时,noisy_shape默认与input shape一致,即[N,xx,xx]或[N,xx],这样dropout mask是样本维度,所以重复的样本会计算不同的dropout mask,实现和原论文逻辑一致。