lightllm
lightllm copied to clipboard
[BUG]Qwen模型加载后NTK未生效
Qwen模型加载后NTK未生效,超过长度后就开始重复生成了,请问能帮忙解决一下吗?
+1 发现超过2048长度之后效果就下降很多
@sunxichen qwen 目前没有支持 完整的 动态 ntk 和 logn_att, 所以太长的句子可能性能会有下降。 而且不同模型的 config.json 在描述和使用 ntk 特性的时候,感觉很多都有一些魔改,实在是很难对齐所有实现 。而且这个小模型的长句能力感觉也不能抱太大的期望。
@sunxichen qwen 目前没有支持 完整的 动态 ntk 和 logn_att, 所以太长的句子可能性能会有下降。 而且不同模型的 config.json 在描述和使用 ntk 特性的时候,感觉很多都有一些魔改,实在是很难对齐所有实现 。而且这个小模型的长句能力感觉也不能抱太大的期望。
大佬有计划解决一下Qwen的ntk长度扩展吗?
@xyfZzz 其实实现过一个版本,但是魔改版本太多了,很多模型的 config.json 参数名称也是改来改去的,搞得很无语。下周定制修改一个 Qwen-7B 的版本吧,不过我尝试的效果来看,这种 7b 规模的小模型,其长句能力也就那样吧。
@xyfZzz 其实实现过一个版本,但是魔改版本太多了,很多模型的 config.json 参数名称也是改来改去的,搞得很无语。下周定制修改一个 Qwen-7B 的版本吧,不过我尝试的效果来看,这种 7b 规模的小模型,其长句能力也就那样吧。
不固定的参数是不是可以不使用config里的内容,而是从外部传呢?
@xyfZzz 好主意,但是当初接口没有设计好,参数越来越多了,参数要爆炸了。
@xyfZzz #139 已经在这个PR中定制支持了 8k 长度的qwen7b模型,简单测试了下超过 2k 长度的,还是ok可用的。
@xyfZzz #139 已经在这个PR中定制支持了 8k 长度的qwen7b模型,简单测试了下超过 2k 长度的,还是ok可用的。
太强了,大佬流皮,我过会试试
I should say it might be quite difficult to incorporate our NTK method with continuous batching I guess. Sorry for the inconvenience...
@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.
@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 是的,基本上如你述,因为实在没有办法简单的在拼接batch的时候,让不同请求的长短句中保存和使用不同的ntk position_emb(其实也能做,但是代价过高,需要每个请求都保存单独的position_emb, 然后再实现一个专用的kernel来补充一些细节), 既然长上下文本身能支持,那就统一大家都用长上下文对应的ntk position_emb,实际实验效果也还挺ok的,当然我觉得那个logn乘的特性也很关键。