lightllm icon indicating copy to clipboard operation
lightllm copied to clipboard

[BUG]Qwen模型加载后NTK未生效

Open xyfZzz opened this issue 2 years ago • 12 comments
trafficstars

Qwen模型加载后NTK未生效,超过长度后就开始重复生成了,请问能帮忙解决一下吗?

xyfZzz avatar Sep 13 '23 08:09 xyfZzz

+1 发现超过2048长度之后效果就下降很多

sunxichen avatar Sep 14 '23 02:09 sunxichen

@sunxichen qwen 目前没有支持 完整的 动态 ntk 和 logn_att, 所以太长的句子可能性能会有下降。 而且不同模型的 config.json 在描述和使用 ntk 特性的时候,感觉很多都有一些魔改,实在是很难对齐所有实现 。而且这个小模型的长句能力感觉也不能抱太大的期望。

hiworldwzj avatar Sep 14 '23 06:09 hiworldwzj

@sunxichen qwen 目前没有支持 完整的 动态 ntk 和 logn_att, 所以太长的句子可能性能会有下降。 而且不同模型的 config.json 在描述和使用 ntk 特性的时候,感觉很多都有一些魔改,实在是很难对齐所有实现 。而且这个小模型的长句能力感觉也不能抱太大的期望。

大佬有计划解决一下Qwen的ntk长度扩展吗?

xyfZzz avatar Sep 14 '23 07:09 xyfZzz

@xyfZzz 其实实现过一个版本,但是魔改版本太多了,很多模型的 config.json 参数名称也是改来改去的,搞得很无语。下周定制修改一个 Qwen-7B 的版本吧,不过我尝试的效果来看,这种 7b 规模的小模型,其长句能力也就那样吧。

hiworldwzj avatar Sep 14 '23 08:09 hiworldwzj

@xyfZzz 其实实现过一个版本,但是魔改版本太多了,很多模型的 config.json 参数名称也是改来改去的,搞得很无语。下周定制修改一个 Qwen-7B 的版本吧,不过我尝试的效果来看,这种 7b 规模的小模型,其长句能力也就那样吧。

不固定的参数是不是可以不使用config里的内容,而是从外部传呢?

xyfZzz avatar Sep 14 '23 09:09 xyfZzz

@xyfZzz 好主意,但是当初接口没有设计好,参数越来越多了,参数要爆炸了。

hiworldwzj avatar Sep 14 '23 09:09 hiworldwzj

@xyfZzz #139 已经在这个PR中定制支持了 8k 长度的qwen7b模型,简单测试了下超过 2k 长度的,还是ok可用的。

hiworldwzj avatar Sep 20 '23 10:09 hiworldwzj

@xyfZzz #139 已经在这个PR中定制支持了 8k 长度的qwen7b模型,简单测试了下超过 2k 长度的,还是ok可用的。

太强了,大佬流皮,我过会试试

xyfZzz avatar Sep 20 '23 11:09 xyfZzz

I should say it might be quite difficult to incorporate our NTK method with continuous batching I guess. Sorry for the inconvenience...

JustinLin610 avatar Oct 19 '23 17:10 JustinLin610

@JustinLin610 Yes,you are right. I have already implemented a version of NTK that can work with continuous batching, but it is not exactly the same as Qwen's. However, the performance is decent.

hiworldwzj avatar Oct 20 '23 02:10 hiworldwzj

@xyfZzz #139 已经在这个PR中定制支持了 8k 长度的qwen7b模型,简单测试了下超过 2k 长度的,还是ok可用的。

大佬你好,我看了下你的代码,想问下,当前实现是一个固定非dynamic的ntk实现对么?然后scale的设置相当于是通过配置max_position_embeddings来实现的,相当于max_position_embeddings是固定设置的一个最大外推后长度,然后seq_length相当于模型原生长度,通过max_position_embeddings/seq_length来获取scale,然后计算对应的ntk_alpha。这样子的话,不管输入长短,都基于这个ntk_alpha来获取扩展后的位置编码。这样理解对么?

xyfZzz avatar Nov 01 '23 01:11 xyfZzz

@xyfZzz 是的,基本上如你述,因为实在没有办法简单的在拼接batch的时候,让不同请求的长短句中保存和使用不同的ntk position_emb(其实也能做,但是代价过高,需要每个请求都保存单独的position_emb, 然后再实现一个专用的kernel来补充一些细节), 既然长上下文本身能支持,那就统一大家都用长上下文对应的ntk position_emb,实际实验效果也还挺ok的,当然我觉得那个logn乘的特性也很关键。

hiworldwzj avatar Nov 01 '23 02:11 hiworldwzj