InternLM / lmdeploy

LMDeploy is a toolkit for compressing, deploying, and serving LLMs.
https://lmdeploy.readthedocs.io/en/latest/
Apache License 2.0
4.61k stars 422 forks source link

[Bug] lora 输出乱码 #2491

Closed EvoNexusX closed 1 month ago

EvoNexusX commented 1 month ago

Checklist

Describe the bug

我采用qwen2.5 32b 4bit-awq并进行了微调,通过测试,能够正常通过transformer推理,lmdeploy也可以正常推理。但是我在进行批量推理的时候,比如说prompts数量变多的时候,就会出现只生成感叹号!的情况,我不清楚是什么原因 即

Response(text='!', generate_token_len=1, input_token_len=287, session_id=0, finish_reason=None, token_ids=[0], logprobs=None, index=0)
Response(text='!', generate_token_len=1, input_token_len=284, session_id=1, finish_reason=None, token_ids=[0], logprobs=None, index=1)
Response(text='!', generate_token_len=1, input_token_len=287, session_id=2, finish_reason=None, token_ids=[0], logprobs=None, index=2)
Response(text='!', generate_token_len=1, input_token_len=284, session_id=3, finish_reason=None, token_ids=[0], logprobs=None, index=3)
Response(text='!', generate_token_len=1, input_token_len=287, session_id=4, finish_reason=None, token_ids=[0], logprobs=None, index=4)
........
        if self.TYPE == "lmdeploy":
            prompts = [[{'role': 'system',
                         'content': '你是一个逻辑推理专家,擅长解决逻辑推理问题。现在你被委派解决下列逻辑推理问题,奖金$50。推理答案基于闭世界假设(closed-world assumption),即未观测事实或者无法推断的事实为假。'},
                        {'role': 'user',
                         'content': '### 题目:\n有一个英文到法文的词汇表,包含以下对应词汇:\n\n1. the -> le\n2. cat -> chat\n3. jumps -> sauts\n4. over -> sur\n5. moon -> lune\n6. cow -> vache\n7. plays -> jouer\n8. fiddle -> violon\n9. egg -> bougre\n10. falls -> des chutes\n11. off -> de\n12. wall -> mur\n\n根据这个词汇表,翻译以下英文句子成法文:\n### 问题\n选择题 1:\n英文句子 "the cat jumps over the moon" 翻译成法文是:\nA. le chat saute sur la lune\nB. le chat sauts sur le lune\nC. le sauts chat sur le lune\nD. le chat sauts sur le lune\n### 指令\n请结合题目,一步一步推理,反思,然后得出答案,严格按照$\\boxed{}$格式输出答案,例如$\\boxed{A}$。\n'}],
                       [{'role': 'system',
                         'content': '你是一个逻辑推理专家,擅长解决逻辑推理问题。现在你被委派解决下列逻辑推理问题,奖金$50。推理答案基于闭世界假设(closed-world assumption),即未观测事实或者无法推断的事实为假。'},
                        {'role': 'user',
                         'content': '### 题目:\n有一个英文到法文的词汇表,包含以下对应词汇:\n\n1. the -> le\n2. cat -> chat\n3. jumps -> sauts\n4. over -> sur\n5. moon -> lune\n6. cow -> vache\n7. plays -> jouer\n8. fiddle -> violon\n9. egg -> bougre\n10. falls -> des chutes\n11. off -> de\n12. wall -> mur\n\n根据这个词汇表,翻译以下英文句子成法文:\n### 问题\n选择题 2:\n英文句子 "the cow plays the fiddle" 翻译成法文是:\nA. le vache jouer le violon\nB. le jouer vache le violon\nC. le vache jouer la vièle\nD. la vache joue le violon\n### 指令\n请结合题目,一步一步推理,反思,然后得出答案,严格按照$\\boxed{}$格式输出答案,例如$\\boxed{A}$。\n'}],

                       ]
            gen_config = GenerationConfig(top_p=0.8,
                                          top_k=40,
                                          temperature=0.8,
                                          max_new_tokens=1024)

            # gen_config = GenerationConfig(temperature=1.0,
            #
            #                               max_new_tokens=1024, repetition_penalty=1,top_p=0.95)
            for item in self.LLM.stream_infer(prompts, gen_config=gen_config):
                print(item)

Reproduction

1

Environment

1

Error traceback

1
EvoNexusX commented 1 month ago

我加载模型的代码是这样的: if self.TYPE == "lmdeploy" or "internlm" in self.MODEL_NAME: self.TYPE = "lmdeploy" lora_path = '/media/xpl/046f618a-eb06-418b-8a93-d21606fd30c2/tianchi_docker/app/models/llms/Qwen2.5-32B-Instruct-AWQ-lora/checkpoint-354' # 这里改称你的 lora 输出对应 checkpoint 地址

        backend_config = PytorchEngineConfig(session_len=2048,
                                             adapters=dict(lora_name_1=lora_path))
        # backend_config = PytorchEngineConfig(tp=1, block_size=32, cache_max_entry_count=0.2)
        self.LLM = pipeline(self.MODEL_PATH, backend_config=backend_config)