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

Llama3-Chinese-instruct-DPO-beta0.5模型推理结果出现大量重复生成的现象 #55

Closed
james-yw opened this issue Jun 5, 2024 · 3 comments

Comments

@james-yw
Copy link

james-yw commented Jun 5, 2024

您好!感谢你们开发并开源了如此有影响力的中文llama3系列模型,但我有一些疑问想请教一下各位开发者。

我从modelscope仓库下载了开源的Llama3-Chinese-instruct-DPO-beta0.5模型参数,并运用vllm在x-ApacaEval中的中文数据集上进行推理。

推理的参数设置如下:

sampling_params = SamplingParams(
    top_k=-1,
    best_of=1,
    use_beam_search=false,
    temperature=0,
    top_p=1,
    max_tokens=1024,
    n=1,
    stop=["<|end_of_text|>", "<|eot_id|>"]
)

推理结果中出现很多重复生成的response,例如:

{
"id": 1,
"dataset": "helpful_base",
"prompt": "有哪些知名演员在百老汇开启职业生涯?",
"instruction": "有哪些知名演员在百老汇开启职业生涯?",
"reponse": "😊\n\n很多知名演员都在百老汇开启职业生涯,以下是一些例子:\n\n1. Julie Andrews:在百老汇演出《我的亲密朋友》和《音乐之声》后,获得了国际知名度,后来演出《王子与公主》和《维多利亚》等电影。\n2. Liza Minnelli:在百老汇演出《花花世界》和《音乐之声》后,获得了多个奖项,包括托尼奖和奥斯卡奖。\n3. Barbra Streisand:在百老汇演出《我爱你,阿尔弗雷德》后,获得了多个奖项,包括托尼奖和奥斯卡奖。\n4. Robert De Niro:在百老汇演出《欢乐颂》后,开始了电影生涯,获得了多个奖项,包括奥斯卡奖。\n5. Al Pacino:在百老汇演出《欢乐颂》后,开始了电影生涯,获得了多个奖项,包括奥斯卡奖。\n6. Meryl Streep:在百老汇演出《欢乐颂》和《音乐之声》后,获得了多个奖项,包括奥斯卡奖。\n7. Hugh Jackman:在百老汇演出《音乐之声》后,开始了电影生涯,演出《X战警》和《金甲虫》等电影。\n8. Idina Menzel:在百老汇演出《音乐之声》后,开始了电影生涯,演出《冰雪奇缘》和《我是小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小"
}

{
"id": 18,
"dataset": "helpful_base",
"prompt": "嗨,我对学打羽毛球感兴趣。你能告诉我游戏规则吗?",
"instruction": "嗨,我对学打羽毛球感兴趣。你能告诉我游戏规则吗?",
"reponse": "嗨!😊 学打羽毛球很好玩! 👏\n\n羽毛球游戏规则很简单,下面我总结一下:\n\n游戏规则\n\n1. 游戏人数:双人或多人游戏,双人游戏最常见。\n2. 游戏场地:羽毛球场地长20米,宽44米,高5.5米。\n3. 羽毛球:羽毛球长70-70.5毫米,直径40-40.5毫米,重7-9克。\n4. 游戏规则:\n\t* 两个人或多人分成两队,每队一人或两人。\n\t* 一方先发球,另一方接球。\n\t* 接球后,两方轮流击球,直到球落地或出界。\n\t* 击球时,球必须在场地内,不能出界。\n\t* 击球时,球必须在对方半场内,不能在己方半场内。\n\t* 击球时,球必须在对方半场内,不能在己方半场内。\n\t* 击球时,球必须在对方半场内,不能在己方半场内。\n\t* 击球时,球必须在对方半场内,不能在己方半场内。\n\t* 击球时,球必须在对方半场内,不能在己方半场内。\n\t* 击球时,球必须在对方半场内,不能在己方半场内。\n\t* 击球时,球必须在对方半场内,不能在己方半场内。\n\t* 击球时,球必须在对方半场内,不能在己方半场内。\n\t* 击球时,球必须在对方半场内,不能在己方半场内。\n\t* 击球时,球必须在对方半场内,不能在己方半场内。\n\t* 击球时,球必须在对方半场内,不能在己方半场内。\n\t* 击球时,球必须在对方半场内,不能在己方半场内。\n\t* 击球时,球必须在对方半场内,不能在己方半场内。\n\t* 击球时,球必须在对方半场内,不能在己方半场内。\n\t* 击球时,球必须在对方半场内,不能在己方半场内。\n\t* 击球时,球必须在对方半场内,不能在己方半场内。\n\t* 击球时,球必须在对方半场内,不能在己方半场内。\n\t* 击球时,球必须在对方半场内,不能在己方半场内。\n\t* 击球时,球必须在对方半场内,不能在己方半场内。\n\t* 击球时,球必须在对方半场内,不能在己方半场内。\n\t* 击球时,球必须在对方半场内,不能在己方半场内。\n\t* 击球时,球必须在对方半场内,不能在己方半场内。\n\t* 击球时,球必须在对方半场内,不能在己方半场内。\n\t* 击球时,球必须在对方半场内,不能在己方半场内。\n\t* 击球时,球必须在对方半场内,不能在己方半场内。\n\t* 击球时,球必须在对方半场内,不能在己方半场内。\n\t* 击球时,球必须在对方半场内,不能在己方半场内。\n\t* 击球时,球必须在对方半场内,不能在己方半场内。\n\t* 击球时,球必须在对方半场内,不能在己方半场内。\n\t* 击球时,球必须在对方半场内,不能在己方半场内。\n\t* 击球时,球必须在对方半场内,不能在己方半场内。\n\t* 击球时,球必须在对方半场内,不能在己方半场内。\n\t* 击球时,球必须在对方半场内,不能在己方半场内。\n\t* 击球时,球必须在对方半场内,不能在己方半场内。\n\t* 击球时,球必须在对方半场内,不能在己方半场内。\n\t* 击球时,球必须在对方半场内,不能在"
}

{
"id": 78,
"dataset": "helpful_base",
"prompt": "我喜欢偶尔在我家里招待客人,我一直在收集各种不同的菜肴和饮料的食谱,以确保新鲜感。我有兴趣尝试一些印度尼西亚菜肴。你能给我一份Opor Ayam的食谱吗?",
"instruction": "我喜欢偶尔在我家里招待客人,我一直在收集各种不同的菜肴和饮料的食谱,以确保新鲜感。我有兴趣尝试一些印度尼西亚菜肴。你能给我一份Opor Ayam的食谱吗?",
"reponse": "😊 Opor Ayam 是印度尼西亚非常流行的一道菜肴,味道非常好!我很高兴地给你提供一份食谱! 👇\n\nOpor Ayam (印度尼西亚鸡肉咖哩)\n\n材料:\n\n* 1只鸡腿肉(约500g),切成小块\n* 2个大蒜,切成小块\n* 2个红椒,切成小块\n* 2个小茴香,切成小块\n* 2个小葱,切成小块\n* 1个大洋葱,切成小块\n* 2个小茴香叶\n* 1个小茴香根\n* 1个小干辣椒,切成小块\n* 1个小干辣椒籽\n* 2个小干辣椒籽\n* 1个小干辣椒籽\n* 1个小干辣椒籽\n* 1个小干辣椒籽\n* 1个小干辣椒籽\n* 1个小干辣椒籽\n* 1个小干辣椒籽\n* 1个小干辣椒籽\n* 1个小干辣椒籽\n* 1个小干辣椒籽\n* 1个小干辣椒籽\n* 1个小干辣椒籽\n* 1个小干辣椒籽\n* 1个小干辣椒籽\n* 1个小干辣椒籽\n* 1个小干辣椒籽\n* 1个小干辣椒籽\n* 1个小干辣椒籽\n* 1个小干辣椒籽\n* 1个小干辣椒籽\n* 1个小干辣椒籽\n* 1个小干辣椒籽\n* 1个小干辣椒籽\n* 1个小干辣椒籽\n* 1个小干辣椒籽\n* 1个小干辣椒籽\n* 1个小干辣椒籽\n* 1个小干辣椒籽\n* 1个小干辣椒籽\n* 1个小干辣椒籽\n* 1个小干辣椒籽\n* 1个小干辣椒籽\n* 1个小干辣椒籽\n* 1个小干辣椒籽\n* 1个小干辣椒籽\n* 1个小干辣椒籽\n* 1个小干辣椒籽\n* 1个小干辣椒籽\n* 1个小干辣椒籽\n* 1个小干辣椒籽\n* 1个小干辣椒籽\n* 1个小干辣椒籽\n* 1个小干辣椒籽\n* 1个小干辣椒籽\n* 1个小干辣椒籽\n* 1个小干辣椒籽\n* 1个小干辣椒籽\n* 1个小干辣椒籽\n* 1个小干辣椒籽\n* 1个小干辣椒籽\n* 1个小干辣椒籽\n* 1个小干辣椒籽\n* 1个小干辣椒籽\n* 1个小干辣椒籽\n* 1个小干辣椒籽\n* 1个小干辣椒籽\n* 1个小干辣椒籽\n* 1个小干辣椒籽\n* 1个小干辣椒籽\n* 1个小干辣椒籽\n* 1个小干辣椒籽\n* 1个小干辣椒籽\n* 1个小干辣椒籽\n* 1个小干"
}

{
"id": 89,
"dataset": "helpful_base",
"prompt": "凯芙拉是什么做成的?",
"instruction": "凯芙拉是什么做成的?",
"reponse": "凯芙拉(Kefir)是一种传统的中亚和东欧地区的乳制品,主要由乳酸菌和酵母菌发酵而成。凯芙拉的制作过程是将牛奶或羊奶或其他乳类物质与乳酸菌和酵母菌混合后,置于温暖的环境中发酵,经过数小时到数天的时间,乳酸菌和酵母菌将乳糖转化为乳酸和乙醇,形成凯芙拉的独特的口感和香气。\n\n凯芙拉的成分主要包括:\n\n* 蛋白质:凯芙拉的蛋白质含量高于牛奶,约为10-15%,是营养丰富的来源。\n* 蛋白酶:凯芙拉中含有蛋白酶,能够帮助人体消化蛋白质。\n* 维生素:凯芙拉中含有维生素B2、维生素B12、维生素D等。\n* 蛋白质:凯芙拉中含有蛋白质,能够帮助人体修复和强化身体。\n* 蛋白质:凯芙拉中含有蛋白质,能够帮助人体修复和强化身体。\n\n凯芙拉的口感柔软、香气浓郁,口感柔软、香气浓郁,口感柔软、香气浓郁,口感柔软、香气浓郁,口感柔软、香气浓郁,口感柔软、香气浓郁,口感柔软、香气浓郁,口感柔软、香气浓郁,口感柔软、香气浓郁,口感柔软、香气浓郁,口感柔软、香气浓郁,口感柔软、香气浓郁,口感柔软、香气浓郁,口感柔软、香气浓郁,口感柔软、香气浓郁,口感柔软、香气浓郁,口感柔软、香气浓郁,口感柔软、香气浓郁,口感柔软、香气浓郁,口感柔软、香气浓郁,口感柔软、香气浓郁,口感柔软、香气浓郁,口感柔软、香气浓郁,口感柔软、香气浓郁,口感柔软、香气浓郁,口感柔软、香气浓郁,口感柔软、香气浓郁,口感柔软、香气浓郁,口感柔软、香气浓郁,口感柔软、香气浓郁,口感柔软、香气浓郁,口感柔软、香气浓郁,口感柔软、香气浓郁,口感柔软、香气浓郁,口感柔软、香气浓郁,口感柔软、香气浓郁,口感柔软、香气浓郁,口感柔软、香气浓郁,口感柔软、香气浓郁,口感柔软、香气浓郁,口感柔软、香气浓郁,口感柔软、香气浓郁,口感柔软、香气浓郁,口感柔软、香气浓郁,口感柔软、香气浓郁,口感柔软、香气浓郁,口感柔软、香气浓郁,口感柔软、香气浓郁,口感柔软、香气浓郁,口感柔软、香气浓郁,口感柔软、香气浓郁,口感柔软、香气浓郁,口感柔软、香气浓郁,口感柔软、香气浓郁,口感柔软、香气浓郁,口感柔软、香气浓郁,口感柔软、香气浓郁,口感柔软、香气浓郁,口感柔软、香气浓郁,口感柔软、香气浓郁,口感柔软、香气浓郁,口感柔"
}

我直接使用下载的Llama3-Chinese-instruct-DPO-beta0.5参数进行推理,没有经过任何的修改和微调,请问一下这种现象是怎么造成的呢,以及你们在测试过程中有无遇到过类似的现象,你们有什么好的解决方案可以一起讨论吗?

非常感谢~

@CrazyBoyM
Copy link
Owner

当前没有使用vllm和你设置的超参数去尝试,关于API部署可以尝试按以下文档中的方案不会重复:https://github.com/CrazyBoyM/llama3-Chinese-chat/tree/main/deploy/API

代码:

import uvicorn
import torch
from transformers import pipeline, AutoTokenizer
from fastapi import FastAPI, Request

app = FastAPI()

@app.post("/")
async def create_item(request: Request):
    global pipe
    data = await request.json()
    prompt = data.get('prompt')
    print(prompt)

    messages = [
            {
                "role": "system",
                "content": "你是一个超级智者,名字叫shareAI-llama3,拥有优秀的问题解答能力。",
            },
            {"role": "user", "content": prompt}
    ]
    
    response = pipe(messages)
    # breakpoint()
    print(response)
    answer = {
        "response": response[-1]["content"],
        "status": 200,
    }
    return answer


if __name__ == '__main__':
    model_name_or_path = '/openbayes/home/baicai003/Llama3-Chinese-instruct-DPO-beta0___5'
    # 这里的模型路径替换为你本地的完整模型存储路径 (一般从huggingface或者modelscope上下载到)
    tokenizer = AutoTokenizer.from_pretrained(model_name_or_path, use_fast=False)
    pipe = pipeline(
        "conversational", 
        model_name_or_path, 
        torch_dtype=torch.float16, 
        device_map="auto", 
        max_new_tokens=512, 
        do_sample=True,
        top_p=0.9, 
        temperature=0.6, 
        repetition_penalty=1.1,
        eos_token_id=tokenizer.encode('<|eot_id|>')[0]
    )
    # 如果是base+sft模型需要替换<|eot_id|>为<|end_of_text|>,因为llama3 base模型里没有训练<|eot_id|>这个token

    uvicorn.run(app, host='0.0.0.0', port=9009) # 这里的端口替换为你实际想要监听的端口

@CrazyBoyM
Copy link
Owner

可以尝试设置一下repetition_penalty系数

@james-yw
Copy link
Author

james-yw commented Jun 6, 2024

好的,谢谢~

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

2 participants