Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

基座模型和chat模型vllm推理异常 #10

Open
2 tasks
DragonFive opened this issue Nov 11, 2024 · 16 comments
Open
2 tasks

基座模型和chat模型vllm推理异常 #10

DragonFive opened this issue Nov 11, 2024 · 16 comments

Comments

@DragonFive
Copy link

DragonFive commented Nov 11, 2024

我们使用huggingface 里的混元基座模型和 chat模型 https://huggingface.co/tencent/Tencent-Hunyuan-Large/tree/main
并使用 这个vllm 混元分支:https://github.com/quinnrong94/vllm/commits/dev_hunyuan/
发现不管基座模型还是 chat模型,都出现续写的情况然后回答模型自己提的问题的情况,
比如问“你是谁”,回答:
"
你关于大模型技术的最新进展有哪些了解?
我本身不是研究大模型技术的专家,但我可以为你提供一些关于大模型技术最新进展的信息。

  1. 模型规模持续增长:随着计算能力和数据量的不断增长,大型语言模型的规模也在不断扩大。这些模型具有更多的参数和更强的表示能力,可以更好地理解和生成自然语言文本。

  2. 预训练与微调的优化:预训练和微调是大型语言模型的重要技术。近年来,研究者们提出了许多优化方法,如改进的预训练目标函数、更好的微调策略等,以提高模型的性能和泛化能力。

  3. 多模态大模型的发展:除了文本数据外,图像、声音等多种模态的数据也被广泛应用于大型语言模型中。多模态大模型可以实现跨模态的理解和生成,如将图像转换为描述它的文本,或者根据文本生成相应的图像等。

  4. 迁移学习和领域适应:大型语言模型在特定任务上的性能可以通过迁移学习和领域适应技术进一步提高。这些技术可以利用预训练模型的知识来提高特定任务的性能,或者使模型适应新的领域和任务。

  5. 可解释性和可靠性研究:随着大型语言模型在各个领域的广泛应用,其可解释性和可靠性问题也受到了广泛关注。研究者们正在探索各种方法来提高大型语言模型的可解释性和可靠性。

  6. 增量学习与持续学习:为了使大型语言模型能够适应不断变化的语言现象和任务需求,增量学习和持续学习技术受到了关注。这些技术可以使模型在学习过程中不断更新和改进,以适应新的数据和任务。

  7. 节能与效率优化:随着模型规模的增大,其计算和存储需求也急剧增加。因此,节能与效率优化成为了大型语言模型发展的重要方向。研究者们正在探索各种方法来降低模型的计算和存储需求,同时保持或提高其性能。

  8. 对话系统与交互式应用:大型语言模型在对话系统和交互式应用中展现出了巨大的潜力。通过理解和生成自然语言文本,这些模型可以与用户进行流畅的对话和交互,为用户提供更加智能和个性化的服务。

  9. 隐私保护与安全研究:随着大型语言模型在各个领域的广泛应用,隐私保护和安全问题也日益突出。研究者们正在探索各种方法来保护用户的隐私和数据安全,如使用差分隐私、联邦学习等技术来保护用户数据的安全性和隐私性。

  10. 低资源语言与跨语言应用:大型语言模型在处理高资源语言(如英语、中文等)方面取得了显著成果。然而,对于低资源语言(如一些少数民族语言、濒危语言等),由于缺乏足够的数据和资源,模型的性能往往受到限制。因此,如何利用大型语言模型处理低资源语言以及实现跨语言应用成为了当前研究
    的热点之一。

以上信息仅供参考,如需了解更多信息,建议查阅相关文献或咨询专业人士。
"

Tasks

@mayihehou
Copy link
Collaborator

mayihehou commented Nov 12, 2024

部署使用的gpu型号、卡数信息麻烦提供下,服务启动脚本用的是哪个?我这边做下同步验证

@DragonFive
Copy link
Author

16张A100-80G,通过ray做 pp, pp=2,tp=8, 脚本为

          args = AsyncEngineArgs(path)
          args.worker_use_ray = pp > 1
          args.engine_use_ray = False
          args.tokenizer = path
          args.tensor_parallel_size = tp
          args.pipeline_parallel_size = pp
          args.trust_remote_code = True

          args.gpu_memory_utilization = 0.98
          args.enforce_eager = True

          args.dtype=self._dtype
          args.max_model_len = 10240
          args.disable_custom_all_reduce = True
          args.disable_log_stats = False
          args.enable_chunked_prefill = self._enable_chunked_prefill
          args.enable_prefix_caching = self._enable_prefix_caching
          args.max_num_batched_tokens = self._num_batched
          args.disable_log_requests = True
          args.swap_space = self._swap_space
          args.num_scheduler_steps = self.get_num_schedule_steps(False)
          llm = AsyncLLMEngine.from_engine_args(args)

prompts = ["你是谁?"]

sampling_params = SamplingParams(
    temperature=0.7, top_p=0.6, max_tokens=200, top_k=20, repetition_penalty=1.05)

outputs = llm.generate(prompts, sampling_params)

@mayihehou
Copy link
Collaborator

16张A100-80G,通过ray做 pp, pp=2,tp=8, 脚本为

          args = AsyncEngineArgs(path)
          args.worker_use_ray = pp > 1
          args.engine_use_ray = False
          args.tokenizer = path
          args.tensor_parallel_size = tp
          args.pipeline_parallel_size = pp
          args.trust_remote_code = True

          args.gpu_memory_utilization = 0.98
          args.enforce_eager = True

          args.dtype=self._dtype
          args.max_model_len = 10240
          args.disable_custom_all_reduce = True
          args.disable_log_stats = False
          args.enable_chunked_prefill = self._enable_chunked_prefill
          args.enable_prefix_caching = self._enable_prefix_caching
          args.max_num_batched_tokens = self._num_batched
          args.disable_log_requests = True
          args.swap_space = self._swap_space
          args.num_scheduler_steps = self.get_num_schedule_steps(False)
          llm = AsyncLLMEngine.from_engine_args(args)

prompts = ["你是谁?"]

sampling_params = SamplingParams(
    temperature=0.7, top_p=0.6, max_tokens=200, top_k=20, repetition_penalty=1.05)

outputs = llm.generate(prompts, sampling_params)

感谢反馈,我按照这个配置复现下

@mayihehou
Copy link
Collaborator

16张A100-80G,通过ray做 pp, pp=2,tp=8, 脚本为

          args = AsyncEngineArgs(path)
          args.worker_use_ray = pp > 1
          args.engine_use_ray = False
          args.tokenizer = path
          args.tensor_parallel_size = tp
          args.pipeline_parallel_size = pp
          args.trust_remote_code = True

          args.gpu_memory_utilization = 0.98
          args.enforce_eager = True

          args.dtype=self._dtype
          args.max_model_len = 10240
          args.disable_custom_all_reduce = True
          args.disable_log_stats = False
          args.enable_chunked_prefill = self._enable_chunked_prefill
          args.enable_prefix_caching = self._enable_prefix_caching
          args.max_num_batched_tokens = self._num_batched
          args.disable_log_requests = True
          args.swap_space = self._swap_space
          args.num_scheduler_steps = self.get_num_schedule_steps(False)
          llm = AsyncLLMEngine.from_engine_args(args)

prompts = ["你是谁?"]

sampling_params = SamplingParams(
    temperature=0.7, top_p=0.6, max_tokens=200, top_k=20, repetition_penalty=1.05)

outputs = llm.generate(prompts, sampling_params)

dtype是哪种数据类型?enable_prefix_caching,enable_prefix_caching分别配置的是True还是False?

@DragonFive
Copy link
Author

dtype='auto',
enable_prefix_caching=True, enable_prefix_caching=False
或 enable_prefix_caching=False, enable_prefix_caching=False
或 enable_prefix_caching=False, enable_prefix_caching=True
都一样

@mayihehou
Copy link
Collaborator

https://huggingface.co/tencent/Tencent-Hunyuan-Large/tree/main/Hunyuan-A52B-Instruct
用的是这个模型吗?

dtype='auto', enable_prefix_caching=True, enable_prefix_caching=False 或 enable_prefix_caching=False, enable_prefix_caching=False 或 enable_prefix_caching=False, enable_prefix_caching=True 都一样

@DragonFive
Copy link
Author

@mayihehou
Copy link
Collaborator

用的这个基座模型 https://huggingface.co/tencent/Tencent-Hunyuan-Large/tree/main/Hunyuan-A52B-Pretrain

试下instruct模型,pretrain模型的输入需要特定的format,确认后我发出来。

@DragonFive
Copy link
Author

instruct模型基于前面的脚本做以下修改的

                promptx = [
                          {"role": "user", "content": prompt}
                ]
                inputs =tokenizer.apply_chat_template(promptx, tokenize=False, add_generation_prompt=True)
                sampling_params = SamplingParams(
temperature=0.7, top_p=0.6, max_tokens=200, top_k=20, repetition_penalty=1.05)
               outputs = llm.generate(prompts, sampling_params)

将脚本结果与 api 结果进行对比,有的问题两者回答基本一致,有大多数问题脚本返回空字符串。

当 prompt 为

"监狱里人犯罪率那么高,为什么国家还要建造监狱?"

时,脚本返回空字符串,api 的结果为

“监狱里人犯罪率高的说法存在误解,实际上,监狱中的人已经犯罪并被判刑,因此他们不再处于犯罪状态。国家建造监狱的原因是为
了执行刑罚、惩罚罪犯,并通过教育和改造帮助他们重新回归社会。以下是建造监狱的主要原因:\n\n### 监狱的本质与职能\n\n- 惩罚与改造:监狱是国家刑罚执行机关,其主要职能是对被判处死刑缓期二年执行、无期徒刑、有期徒刑的罪犯进行监管、改造和教育,使他们成为守法公民。\n- 维护社会秩序:通过对罪犯的惩罚和改造,监狱有助于减少犯罪行为的发生,维护社会的安全和稳定。\n\n### 监狱的社会效益\n\n- 减少犯罪:监狱的存在和执行刑罚,对于预防犯罪具有一定的威慑作用,尤其是在短期内。\n- 促进罪犯改造:通过教育和劳动,监狱帮助罪犯提高文化素质和职业技能,为他们的重新回归社会打下基础。\n\n### 与国外私营监狱的对比\n\n- 中国监狱的公益性:中国的监狱是国家所有,不存在盈利动机,与国外私营监狱有本质区别,后者可能为了盈利而过度收容罪犯。\n\n### 监狱改革的必要性\n\n- 改革方向:中国监狱改革的目标是改善监狱的结构和功能,提高罪犯改造的效果,确保监狱的运作更加符合法治和社会公正的要求。\n\n综上所述,国家建造监狱是为了维护法律秩序、惩罚犯罪行为,并通过教育和改造促进罪犯的社会重新融入。同时,监狱也是社会安全体系的重要组成部分,对于预防犯罪具有积极作用。 ”

@mayihehou
Copy link
Collaborator

instruct模型基于前面的脚本做以下修改的

                promptx = [
                          {"role": "user", "content": prompt}
                ]
                inputs =tokenizer.apply_chat_template(promptx, tokenize=False, add_generation_prompt=True)
                sampling_params = SamplingParams(
temperature=0.7, top_p=0.6, max_tokens=200, top_k=20, repetition_penalty=1.05)
               outputs = llm.generate(prompts, sampling_params)

将脚本结果与 api 结果进行对比,有的问题两者回答基本一致,有大多数问题脚本返回空字符串。

当 prompt 为

"监狱里人犯罪率那么高,为什么国家还要建造监狱?"

时,脚本返回空字符串,api 的结果为

“监狱里人犯罪率高的说法存在误解,实际上,监狱中的人已经犯罪并被判刑,因此他们不再处于犯罪状态。国家建造监狱的原因是为 了执行刑罚、惩罚罪犯,并通过教育和改造帮助他们重新回归社会。以下是建造监狱的主要原因:\n\n### 监狱的本质与职能\n\n- 惩罚与改造:监狱是国家刑罚执行机关,其主要职能是对被判处死刑缓期二年执行、无期徒刑、有期徒刑的罪犯进行监管、改造和教育,使他们成为守法公民。\n- 维护社会秩序:通过对罪犯的惩罚和改造,监狱有助于减少犯罪行为的发生,维护社会的安全和稳定。\n\n### 监狱的社会效益\n\n- 减少犯罪:监狱的存在和执行刑罚,对于预防犯罪具有一定的威慑作用,尤其是在短期内。\n- 促进罪犯改造:通过教育和劳动,监狱帮助罪犯提高文化素质和职业技能,为他们的重新回归社会打下基础。\n\n### 与国外私营监狱的对比\n\n- 中国监狱的公益性:中国的监狱是国家所有,不存在盈利动机,与国外私营监狱有本质区别,后者可能为了盈利而过度收容罪犯。\n\n### 监狱改革的必要性\n\n- 改革方向:中国监狱改革的目标是改善监狱的结构和功能,提高罪犯改造的效果,确保监狱的运作更加符合法治和社会公正的要求。\n\n综上所述,国家建造监狱是为了维护法律秩序、惩罚犯罪行为,并通过教育和改造促进罪犯的社会重新融入。同时,监狱也是社会安全体系的重要组成部分,对于预防犯罪具有积极作用。 ”

你提供脚本中的 llm.generate 第一个参数是 prompts,似乎和inputspromptx没关系?
上述问题修正后,可以试下将promptx改为如下试试:

                promptx = [
                          {"role": "system", "content": "You are a helpful assistant."},    
                          {"role": "user", "content": prompt}     
                ]

@DragonFive
Copy link
Author

promptx = [
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": prompt}
]

使用这个prompt ,instruct 可以正常输出内容了 👍,temperature=0.7, top_p=0.6, max_tokens=200, top_k=20, repetition_penalty=1.05 的情况下输出内容会与API 访问存在一些差异。

另外前面提到的

pretrain模型的输入需要特定的format,确认后我发出来。

这个pretrain模型需要的format,确认了么,谢谢

@mayihehou
Copy link
Collaborator

promptx = [
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": prompt}
]

使用这个prompt ,instruct 可以正常输出内容了 👍,temperature=0.7, top_p=0.6, max_tokens=200, top_k=20, repetition_penalty=1.05 的情况下输出内容会与API 访问存在一些差异。

另外前面提到的

pretrain模型的输入需要特定的format,确认后我发出来。

这个pretrain模型需要的format,确认了么,谢谢

输出内容有差异的原因是卡型和random seed的原因。
pretrain模型输入的format是

# chinese question
# one format
问题:
prompt
答案:
# another format
问:
prompt
答:

# english question
Problem:
prompt
Solution:

pretrain模型有可能无法正常结束,存在续写现象,这种情况是符合预期的

@dickzhu2012
Copy link

pretrain模型未经过指令微调,可以续写,这块是正常的,可以按照实际需求基于pretrain再加入自定义指令数据进行微调。

@DragonFive
Copy link
Author

还有两个问题
1、instruct模型基于上述修改,还是有些问题无法回答,比如

请完成下列单项选择题,直接给出答案选项。\n完成以下关于金融领域分析的选择题,只需要输出选项。\n\n在G20峰会上,印度总理莫迪身前桌签上的国家英文名写着“BHARAT”(婆罗多),而不是“INDIA”(印度),再度引发对印度要改国名的猜测。“印度”和“婆罗多”两个名字均是印度宪法规定的> 正式名称。“婆罗多”出自史诗《摩诃婆罗多》,上古部落和许多传说人物都以此为名,源远流长。而“印度”确立于英国殖民时期,被部分印度人认为是被殖民的象征。\n\n请问,若印度改名成功,将对印度的本土民族企业造成何种影响?\nA. 本土企业不会受到明显影响\nB. 无法预测\nC. 外资投资热情> 降低,导致整体经济形势变差,本土企业也受到影响\nD. 印度民族情绪高涨,本土企业发展态势良好\n

instruct 模型回答空字符串

2、pretrain 模型提问内容:

'问题:\n你是谁??\n答案:'

回答了一段 cpp 代码,内含辱骂文字 😓,配置为 temperature=0.7, top_p=0.6, max_tokens=200, top_k=20, repetition_penalty=1.05

\n\n#include <iostream>\nusing namespace std;\nint main() {\n cout << "我是你爹" << endl;\n return 0;\n}\n

@DragonFive
Copy link
Author

chinese question

one format

问题:
prompt
答案:

another format

问:
prompt
答:

english question

Problem:
prompt
Solution:

@mayihehou 这个对于基座模型没什么帮助,模型还是在乱答,有什么线索吗,我看huggingface 上 instruct模型已经更新了,pretrain模型也会更新吗

@mayihehou
Copy link
Collaborator

chinese question

one format

问题: prompt 答案:

another format

问: prompt 答:

english question

Problem: prompt Solution:

@mayihehou 这个对于基座模型没什么帮助,模型还是在乱答,有什么线索吗,我看huggingface 上 instruct模型已经更新了,pretrain模型也会更新吗

算法在确认这个问题

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants