QwenLM / Qwen

The official repo of Qwen (通义千问) chat & pretrained large language model proposed by Alibaba Cloud.
Apache License 2.0
12.78k stars 1.03k forks source link

window-attn 默认是否开启? #422

Closed ShadowTeamCN closed 9 months ago

ShadowTeamCN commented 9 months ago

是否已有关于该错误的issue或讨论? | Is there an existing issue / discussion for this?

该问题是否在FAQ中有解答? | Is there an existing answer for this in FAQ?

当前行为 | Current Behavior

image 在标准文档中提到过存在window-attn 但是在config.json 里面却不存在这个开关 image 我想知道这个策略是默认实现的还是没有实现的. 如果已经实现能否手动关闭?

logicwong commented 9 months ago

开源代码还没有实现window attention。主要是现在的这个写法一开始就把ntk的值给定死了,导致每个层不能自适应的分配窗口大小和ntk。后面需要改一下cache和rope的位置才能把window引进来跟ntk相结合

ShadowTeamCN commented 9 months ago

开源代码还没有实现window attention。主要是现在的这个写法一开始就把ntk的值给定死了,导致每个层不能自适应的分配窗口大小和ntk。后面需要改一下cache和rope的位置才能把window引进来跟ntk相结合

了解了,还有一点疑惑就是窗口注意力是否有必要加, 也就是如果generate需要的信息正好是window-attn所排除的,那么回答必然不正确,加入window看似更低的ppl其实意义不大?

logicwong commented 9 months ago

window-attn能看到范围并不局限于所设置的窗口大小,它的感受野可以依靠层数堆叠上去,理论上每个token能看到的最大序列长度为window_size * num_layers。

logicwong commented 9 months ago

再补充一点,我们在加入window-attn时并不会简单的限制每层的窗口大小,而是底层用比较小的窗口,越往上窗口越大(配合上ntk)。比如前4层窗口大小为2048,后面4层为4096,再往上为8192...

ShadowTeamCN commented 9 months ago

window-attn能看到范围并不局限于所设置的窗口大小,它的感受野可以依靠层数堆叠上去,理论上每个token能看到的最大序列长度为window_size * num_layers。

这一点是知道的,不过还是有点疑虑会不会降低结果质量

logicwong commented 9 months ago

@ShadowTeamCN 单加window-attn可能是会降低结果质量的,我们在ppl上的实验显示其值会高于ntk+logn。但是通过结合ntk+logn+window_attn,模型不光能取得更低的ppl,在一些长文本测试集上的效果也要更优,详见 https://github.com/QwenLM/Qwen/issues/61#issuecomment-1665982366

ShadowTeamCN commented 9 months ago

@ShadowTeamCN 单加window-attn可能是会降低结果质量的,我们在ppl上的实验显示其值会高于ntk+logn。但是通过结合ntk+logn+window_attn,模型不光能取得更低的ppl,在一些长文本测试集上的效果也要更优,详见 #61 (comment)

PPL在这种超长场景是意义有限吧 , 我这里面有一个测试场景, 给一串数组,让模型生成数组的第一个数字, 这个任务baichuan-13B,即ALiBi的方案在 8k上下文 场景的训练loss完全不下降,即感受野完全感知不到开头的token, 而随便换一个标准attention,几个step loss就变成0

ShadowTeamCN commented 9 months ago

@ShadowTeamCN 单加window-attn可能是会降低结果质量的,我们在ppl上的实验显示其值会高于ntk+logn。但是通过结合ntk+logn+window_attn,模型不光能取得更低的ppl,在一些长文本测试集上的效果也要更优,详见 #61 (comment)

PPL在这种超长场景是意义有限吧 , 我这里面有一个测试场景, 给一串数组,让模型生成数组的第一个数字, 这个任务baichuan-13B,即ALiBi的方案在 8k上下文 场景的训练loss完全不下降,即感受野完全感知不到开头的token, 而随便换一个标准attention,几个step loss就变成0

@logicwong 我自己还没有测过window-attn 在这个场景下的性能, 还有一点是根据 LM-infinite 和StreamingLLM的研究,window-attn最好加上头部的token,效果会更好一点,这个建议你们也关注下

logicwong commented 9 months ago

@ShadowTeamCN 嗯,LM-infinite,StreamingLLM还有更早的空门那篇知乎我们也都看过,但还没实践。后面有时间了再对比下吧

ShadowTeamCN commented 9 months ago

@ShadowTeamCN 嗯,LM-infinite,StreamingLLM还有更早的空门那篇知乎我们也都看过,但还没实践。后面有时间了再对比下吧

ok,我先把issue close掉