QwenLM / Qwen

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

输入文本较长时无输出结果 #50

Closed Cescfangs closed 1 year ago

Cescfangs commented 1 year ago

首先感谢开源qwen-7B大模型! 我在使用chat版本时遇到输入文本较长时无输出结果的问题,输入指令的文字长度为4722,该指令经过tokenizer编码后的input_ids长度为3172,我修改了generation_config.json中关于输入长度的配置:

  "max_context_size": 4096

但是模型的 response 是一个空字符串,我通过单步调试确认没有因为token过长等原因提前结束,而是进入了正常的自回归解码过程,输出的前两个token刚好是 stop_words_ids中的两个 token,我看了下readme中应该是能支持8k规模的context:

Support of 8K Context Length. Both Qwen-7B and Qwen-7B-Chat support the context length of 8K, which allows inputs with long contexts.

我尝试将指令输入截断至3265个字这时又能正常输出结果,想问下这是什么原因呢?单纯是输入过长导致性能不好还是我的使用方式存在问题?

logicwong commented 1 year ago

感谢反馈。这个问题比较奇怪,我们这边测试8K左右的长度都没啥问题的,上下文长度扩到10000以上才会出现不输出的情况。你那边方便share一下代码吗?我们这边测试一下

Cescfangs commented 1 year ago

ok, 我把代码贴一下

#!/usr/bin/env python
# coding: utf-8

import torch
from transformers import AutoTokenizer, AutoModelForCausalLM
from transformers.generation import GenerationConfig

tokenizer = AutoTokenizer.from_pretrained("../qwen-7b-chat/", trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained("../qwen-7b-chat/", trust_remote_code=True, device_map="cuda:0", torch_dtype=torch.bfloat16)
model.generation_config = GenerationConfig.from_pretrained("../qwen-7b-chat/", trust_remote_code=True)
model = model.eval()
text = """
1、什么是“LLM”?
LL.M.(法学硕士)是一个一年制(部分地区为两年制)的法学进阶课程,类似于中国的法学硕士学位但又有所区别,全称是 Master of Laws,主要在英、美等普通法系国家和地区开设,属于普通法系法学教育体系中的硕士阶段。

能够申请LLM的学生,本科必须是法学专业,法律硕士以及在职律师,法务人员,也就是说,没有法学背景的学生,是没有办法申请的。

通常读LLM的主要有两类人。一是有工作经验的律师。由于在外资所,没有外国律师执照,基本上不可能从法律助理升到Associate。而英国执照相对于美国执照要困难很多,需要2年的intern+PCLL考试,所以很多律师都选择去美国镀金,用最快速、经济的方法获得外国律师执照。二是一些本科刚毕业的学生。

2、什么是“JD”?
Juris Doctor(以下简称JD)是广泛存在于美国、加拿大、澳大利亚等国 [1] 的一种法律职业类文凭证书。

攻读一般需要三年时间,申请人通常为物理、化学、生物、会计、管理、新闻、社会学等基础学科背景的学生。美国本国非法学背景学生基本上以读职业法律博士JD(Juris Doctor)为主。这也就意味着“JD”在美国是第一法学位。

任何专业任何背景的学生都要获得学士学位都可以申请JD。美国前总统克林顿和前任总统奥巴马分别为耶鲁和哈佛的JD,前总统克林顿的妻子希拉里·克林顿也拥有耶鲁的JD学位。法律博士(JD)和医学博士(MD)也被认为是美国学费较为昂贵和工资待遇较高的两个学位。

3、“LLM”和“JD”的对比
(1)申请条件

申请LLM,只需要提供托福成绩即可,而申请JD,必须提交LSAT成绩。

LSAT考试共分四个部分:

Logic Games:比较容易拿分;

Reading Comprehension :阅读理解部分包括 4 篇文章,其中每篇文章大约为 400 至 600 个单词。有 6 至 8 个问题, 4 篇文章共有 28 个问题;

Logic reasoning :注意归纳与总结;

Writing: 时间为30 分钟,其内容是就给定的题目中的两种观点选择一个,并加以阐述。写作部分不计人总分,只作为参考。

(2)奖学金申请

LLM:对于国际学生来说,LLM基本没有奖学金,所以每一个申请人必须抱定自费的打算。LLM的学费一年在3万5-4万6美金不等,加上各地的生活费不等(以纽约和洛杉矶最贵)。总共的花费估计在50万人民币左右。LLM费用每年都在增长,每年的增长率约为10%。

JD:JD的奖学金则分两种,一种是 merit-based 。这种是看申请时你的软硬件条件好不好,好的话,会直接给你发奖,这种是不需要申请的, T14的奖学金发的比较少,但近两年申请者骤降,也会发一点。T20 或 T50 附近的学校,给奖还是比较多的, LSAT 考到 160 左右, T50 左右的学校都会给些奖;T30 , LSAT 考到 165 以上也会给奖。还有一种的家里条件不太好,可以申请 need-based奖学金。申请后,需要提交一些材料。JD读完三年大概需要 100-150 万的花费。但 T14 法学院毕业后, 3 年基本就可以赚回这些投入。

(3)是否可以考取bar

原则上来说,只有JD可以考取bar,LLM是不允许的,但是美国加州(CA)和纽约州(CA)可以考取bar。

(4)含金量

JD的含金量明显要高于LLM,因为JD的要求很高,所以,在美国“JD”的含金量毋庸置疑。但是,因为“JD”在美国是第一法学位,回到国内,原先被认证为“法律博士”,教育部留学服务中心开始出现了松动。

(5)就业前景

国外读LLM的同学,一般毕业后都会直接回国,且进入红圈所的薪资基础都不低,这也就是这么多人愿意去读LLM了。

如果 LL.M毕业去外所的话,优势会比去内所更高一些。在美国读 LL.M 的这一年,会遇到两个 Job Fair, 其中一个是在 NY 举办的 Job Fair ,这个是大多数人会去的,有很多国内的律所,还有一些在国内有 office 的外所,这时候通过国内的司法考试还是很重要的,进了面试的很多都是通过司法考试的,所以回国的话,司法考试还是很重要的,最好大四上学期就把司法考试过了。

读 JD的同学则多半会选择留美工作。读JD第一年的成绩是找工作的一个考量,第一年读的都是必修课,比如 Berkeley 前 20% 会 给 High Honor , 20%-40% 给 Honor ,剩下的 60% 都是 Pass ,第一年的成绩能决定第一年的 Summer 能申到什么样的 Internship ,然后第一年的 Internship 加上第一年的成绩能决定第二年能找到什么样的 Internship ,找二年级的 Summer 的时候,二年级的成绩还没有全部出来,所以要看一年级的,如果二年级的 Summer 干的好的话,这个律所会直接签你做 Associate ,所以第一年的成绩真的很重要。

5、什么是“JSD”?
JSD(Doctor of Justice Science)即为法学博士,是法律专业的高级学位,申请者必须有LLM学位或者JD学位,以及有从事法学研究的职业目标才能够申请。

对于JSD来说,一般是具有LLM学位的学生,如果希望在某一法律领域有更深的研究,或者其职业目标是成为法学院的高级教员,可以在完成硕士阶段的学习后申请继续攻读JSD学位。

对于中国申请者来说,如果你打算一辈子留在美国,那么读JD是迟早的事;单纯的LLM不可能长期留在美国。如果你打算回国,那么千万不要读JD,LLM更实惠,更经济,而且LLM学的知识在中国绝对够用了。

关于中天国子大学:

中天国子大学,始于2013年,由北大、清华、人大、法大等多名校友联合创办,是一所专业提供个性化教育服务的在线大学。 中天国子大学依托中国青年博士联盟与985/211名校优质顶尖的教育资源,深度结合大数据与AI技术,独创个性化学习体系,重新定义学习,为用户提供个性、深度、高效的在线教育服务。教学品类涵盖法硕、法考、公考、艺考、教师招考、职场教育、中小学辅导等领域。 中天国子大学希望帮助用户通过高效的学习延长生命的长度,通过共享的教育资源推进教育公平。
关于长风师兄法硕:

长风师兄教育始于2013年。品牌创始人魏来,中国政法大学法硕研究生,2013年以389分考入中国政法大学(初试第5名);2014年以401分通过司考;2015年以150+高分进入北京市政府面试。 2013至2016年,魏来联同北大、人大、清华等法硕名校的研究生同学,反复总结学霸备考经验,不断创新教学辅导,一套量体裁衣、因材施教、个性化的教育方案“长风师兄全程复习规划”应运而生,成功帮助多名师弟师妹考入法律硕士名校、通过国家司法考试、考上国家公务员,获得大家的认可。 2016至2017年,长风师兄教育独创新产品——导师班,正式进入内部测试,采用N+1+1+2的专业教研团队,即根据需要有N个授课老师, 1个班主任管理班级;1个助教协助老师教学辅导;2个法硕名校在读师兄师姐答疑。导师班内测班共20人,10人考上名校法硕,8人考上985/211法硕,2人通过国家A线。 2018年,与中国青年博士联盟达成战略合作,奠定长风师兄教育师资智库新的基础。 2019年 ,获得某投资公司的投资。长风师兄教育将从法硕考研、法律职业资格考试、公务员考试拓展到其他领域,为更多考生提供优质的教育产品。
不要忘了下单的时候再备注一下凹凸颠簸这四个字。更多的活动详情和细节,我们都放在了我们的公众号凹凸电波和本期节目对应的那篇推送里面。我建议大家这期一定要去看一下,真的很漂亮。而且我说句实话,就是我写三体的稿子,能写出这么多字儿,全靠这个键盘了。好,推荐大家先去看一下这个视频,真的美爆了。那后面我们再慢慢介绍他的产品。

ok我现在给大家讲一下这个人神共愤的故事是怎么事。就是呢我曾经有一个大学同学,他跟我关系不算特别的亲密,但是在大学期间算得上是普通朋友的关系。那咱们节目不是最近几年有一点风生水起了。对,然后偶尔会在我的朋友圈分享一下我更新的一些节目等等的。这个姐妹儿她突然有一天就来私聊我,她说taco你在做那个电台是吧?我说对对对,是有这么一个节目,有什么事儿吗。

有什么合作?

好笑吗?对我一开始还以为是什么商务合作,你知道吧?结果他接下来跟我说,现在还有人在听电台,我说倒也是有,你到底。

是来干嘛的?

凑合整个尬剧,我说还是有的,他就说,那你这个电台做的怎么样?我你知道这个时候让我很尴尬,我也不能直接就上来就王婆卖瓜,自卖自夸,对不对?我就说还可以,然后他就跟我说,我听说我们大学那个谁谁谁好像都上过你的节目,对不对?对,就是我们之前的一些嘉宾,我说对对对,他们都上过怎么了?他们都认识是吧?对,都认识。然后接下来跟我来了一句,那我觉得我就没必要上了。

当然行了。什么我真的。

窒息诸路,因为我从头到尾都没有想过要让这位姐来上节目。

突然冒出来。对。

我不知道他在想什么,不是我甚至开始怀疑是不是他真的很想上我们的节目。然后想通过这样一个戏谑的方式,让我注意到他。

他说,质疑现在没有人在盯波哥这档子事。

对,然后他发了这句话之后,我都不知道该怎么办了。我就说好。

那就不用麻烦您来了。

不要忘了下单的时候再备注一下凹凸颠簸这四个字。更多的活动详情和细节,我们都放在了我们的公众号凹凸电波和本期节目对应的那篇推送里面。我建议大家这期一定要去看一下,真的很漂亮。而且我说句实话,就是我写三体的稿子,能写出这么多字儿,全靠这个键盘了。好,推荐大家先去看一下这个视频,真的美爆了。那后面我们再慢慢介绍他的产品。

ok我现在给大家讲一下这个人神共愤的故事是怎么事。就是呢我曾经有一个大学同学,他跟我关系不算特别的亲密,但是在大学期间算得上是普通朋友的关系。那咱们节目不是最近几年有一点风生水起了。对,然后偶尔会在我的朋友圈分享一下我更新的一些节目等等的。这个姐妹儿她突然有一天就来私聊我,她说taco你在做那个电台是吧?我说对对对,是有这么一个节目,有什么事儿吗。

有什么合作?

好笑吗?对我一开始还以为是什么商务合作,你知道吧?结果他接下来跟我说,现在还有人在听电台,我说倒也是有,你到底。

是来干嘛的?

"""
instruct2 = "(以下是文章内容)\n" + text + "\n---------------------\n请用100字以内完成内容摘要"
response, history = model.chat(tokenizer, instruct2, history=[])
# response 为 ''

instruct2 = "(以下是文章内容)\n" + text[:3500] + "\n---------------------\n请用100字以内完成内容摘要"
response, history = model.chat(tokenizer, instruct2, history=[])
# response 为 '这篇文章介绍了LLM和JD的区别,包括申请条件、奖学金、是否可以考取bar、含金量和就业前景等方面。同时,文章提到了中天国子大学和长风师兄法硕两个教育品牌,分别提供了个性化教育服务和专业的法学教育。最后,文章以一个故事的形式总结了LLM和JD的区别。'
logicwong commented 1 year ago

@Cescfangs 感谢分享。我这边测试是完全没问题的,我怀疑你可能用的是旧代码,use_dynamic_ntk和use_logn_attn没有开启,所以导致长序列输出不了结果。最新版本的已经默认开启这两个参数了,可以同步下代码再试试

B0058E94-E528-4DA6-A251-3E3CD753E001

Cescfangs commented 1 year ago

不好意思回复的晚了点 ,我来确认开启use_dynamic_ntk和use_logn_attn之后确实没问题了

dkw-wkd commented 1 year ago

首先感谢开源qwen-7B大模型! 我在使用chat版本时遇到输入文本较长时无输出结果的问题,输入指令的文字长度为4722,该指令经过tokenizer编码后的input_ids长度为3172,我修改了generation_config.json中关于输入长度的配置:

  "max_context_size": 4096

但是模型的 response 是一个空字符串,我通过单步调试确认没有因为token过长等原因提前结束,而是进入了正常的自回归解码过程,输出的前两个token刚好是 stop_words_ids中的两个 token,我看了下readme中应该是能支持8k规模的context:

Support of 8K Context Length. Both Qwen-7B and Qwen-7B-Chat support the context length of 8K, which allows inputs with long contexts.

我尝试将指令输入截断至3265个字这时又能正常输出结果,想问下这是什么原因呢?单纯是输入过长导致性能不好还是我的使用方式存在问题?

你是在什么设备上测试的啊?

Kk1984up commented 11 months ago

我也出现了这个问题,你后面是怎么解决的,很奇怪

Cescfangs commented 11 months ago

我也出现了这个问题,你后面是怎么解决的,很奇怪

你好 我是按照下面的参数设置解决的

@Cescfangs 感谢分享。我这边测试是完全没问题的,我怀疑你可能用的是旧代码,use_dynamic_ntk和use_logn_attn没有开启,所以导致长序列输出不了结果。最新版本的已经默认开启这两个参数了,可以同步下代码再试试

B0058E94-E528-4DA6-A251-3E3CD753E001