FreedomIntelligence / HuatuoGPT-II

HuatuoGPT2, One-stage Training for Medical Adaption of LLMs. (An Open Medical GPT)
371 stars 60 forks source link

将采样后的数据拼接到固定长度(4096)的目的是什么 #6

Closed zh-jia closed 11 months ago

zh-jia commented 11 months ago

我注意到论文和数据处理代码中提到将多条采样后的数据拼接到一起,直到达到固定长度(4096)为止,形成新的一条数据。有两个问题想请教一下: (1)这样做的好处是什么? (2)这样做在计算注意力的时候,两条本来不相干的采样数据是否会因为注意力机制相互影响,即后边的采样数据是否会看到前面无关的数据,从而造成loss不够准确?

jymChen commented 11 months ago

Hi @niduolaoa, 下面是我个人的理解: (1)拼接4096主要是为了加速,比如一个batch里就不用太多padding,且多个卡上的输入长度一致会更均衡也有利于加速。实践上我发现固定长度效果似乎更好,可能来源于模型学习了更长的长度或是每个token的关注度更一致了。 (2)两条不相干的采样数据拼接在一起学习应该影响不大,因为每条数据间会有一个 EOS token,模型能感知到隔开的数据是不相关的,注意力会集中在自己的数据里。

zh-jia commented 11 months ago

Hi @niduolaoa, 下面是我个人的理解: (1)拼接4096主要是为了加速,比如一个batch里就不用太多padding,且多个卡上的输入长度一致会更均衡也有利于加速。实践上我发现固定长度效果似乎更好,可能来源于模型学习了更长的长度或是每个token的关注度更一致了。 (2)两条不相干的采样数据拼接在一起学习应该影响不大,因为每条数据间会有一个 EOS token,模型能感知到隔开的数据是不相关的,注意力会集中在自己的数据里。

明白了,感谢大佬回答!

han508 commented 11 months ago

在数据预处理的时候,《for batch_cnt, batch in train_dataloader_iterator:》从这里开始执行类似于packing的操作,如果不满足最长长度就继续补,那么这会导致之前按比例sampler的一个batch缩减,比如256-》128,在训练的时候是sequence sampler的,就不能按照预处理的batch size训练了吧,请问如何设置训练的batchsize呢