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

使用Java语言编写冒泡排序,出现问题 #29

Open
Zz-dong opened this issue Jul 29, 2023 · 9 comments
Open

使用Java语言编写冒泡排序,出现问题 #29

Zz-dong opened this issue Jul 29, 2023 · 9 comments

Comments

@Zz-dong
Copy link

Zz-dong commented Jul 29, 2023

我尝试使用Python、Java、Javascript、Ruby、Go、PHP语言编写冒泡排序。我按照README使用每个语言各自注释风格编写prompt。只有Java语言出现问题,其他语言正常。代码如下:

from transformers import AutoTokenizer, AutoModel
tokenizer = AutoTokenizer.from_pretrained("THUDM/codegeex2-6b", trust_remote_code=True)
model = AutoModel.from_pretrained("THUDM/codegeex2-6b", trust_remote_code=True, device='cuda')
model = model.eval()

# remember adding a language tag for better performance
prompt = "// language: Java\n//write a bubble sort function\n"
inputs = tokenizer.encode(prompt, return_tensors="pt").to(model.device)
outputs = model.generate(inputs, max_length=256, top_k=1)
response = tokenizer.decode(outputs[0])

print(response)

结果为没有任何输出

[2023-07-29 03:42:17,286] [INFO] [real_accelerator.py:110:get_accelerator] Setting ds_accelerator to cuda (auto detect)
Loading checkpoint shards: 100%|██████████████████████████████████████████████████████████████████████| 7/7 [00:28<00:00,  4.03s/it]
The attention mask and the pad token id were not set. As a consequence, you may observe unexpected behavior. Please pass your input's `attention_mask` to obtain reliable results.
Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.
// language: Java
//write a bubble sort function



此处省略几十行空格

不知道有人是否遇到相同的问题

@yug2023
Copy link

yug2023 commented Jul 30, 2023

prompt = "// language: Java\n#write a bubble sort function\n" 你的prompt改错了,用这个可以正常返回

@Zz-dong
Copy link
Author

Zz-dong commented Jul 30, 2023

@yug2023 我个人的想法是这个prompt是写了两行注释 然后通过注释生成代码 所以我认为 prompt 应该是 "// language: Java\n //write a bubble sort function\n" 而且其他语言的prompt我也是按照这一想法修改的 都没有问题。 所以我不太清楚prompt的正确格式应该是什么样的。 你有尝试过其他语言只修改最前面的注释字符token。 @Stanislas0 您好,请问可以在这方面详细说明一下吗?

@Stanislas0
Copy link
Contributor

@yug2023 我个人的想法是这个prompt是写了两行注释 然后通过注释生成代码 所以我认为 prompt 应该是 "// language: Java\n //write a bubble sort function\n" 而且其他语言的prompt我也是按照这一想法修改的 都没有问题。 所以我不太清楚prompt的正确格式应该是什么样的。 你有尝试过其他语言只修改最前面的注释字符token。 @Stanislas0 您好,请问可以在这方面详细说明一下吗?

你的prompt没有写错,CodeGeeX2是一个基座模型,prompt格式就是按照正常编程习惯来写。这里出现空行比较奇怪,我试了是可以正常出东西的,估计是精度原因导致,不知道你的模型是否经过了量化。如果要更好的引导模型生成函数体,只需要再加上一些关键字就行了,比如“public”,模型就会继续完成函数体。

@toufunao
Copy link

toufunao commented Aug 7, 2023

你好,我也是用java生成冒泡排序失败。两种prompt都尝试过,“// language: Java\n //write a bubble sort function\n”,“prompt = "// language: Java\n#write a bubble sort function\n"”。都是打印大量空行,没有任何内容。使用的是单卡32G V100,模型没有经过量化。

@Zz-dong
Copy link
Author

Zz-dong commented Aug 7, 2023

@toufunao Stanislas0 提到可能是模型精度问题。

你的prompt没有写错,CodeGeeX2是一个基座模型,prompt格式就是按照正常编程习惯来写。这里出现空行比较奇怪,我试了是可以正常出东西的,估计是精度原因导致,不知道你的模型是否经过了量化。如果要更好的引导模型生成函数体,只需要再加上一些关键字就行了,比如“public”,模型就会继续完成函数体。

V100机器不支持bfloat16,所以需要按照README中的教程修改代码

如果显卡不支持bfloat16格式,将会输出错误的内容,需要将模型转换成float16格式:

model = AutoModel.from_pretrained("THUDM/codegeex2-6b", trust_remote_code=True).half().cuda()

我没有进行尝试,如果你成功了希望你可以回复一下

@toufunao
Copy link

toufunao commented Aug 7, 2023

@Zz-dong 你好,我刚刚尝试过了,可以输出Java代码,但仍存在大量的空行。
而且还会出现以下提示:“The attention mask and the pad token id were not set. As a sequence, you may observe unexpected behavior. Please pass your inputs's 'attention_mask' to obtain reliable results. Setting 'pad_token_id' to 'eos_token_id':2 for open-ended generation. ”

ps:
我下一步会考虑进行微调,有相关微调数据预处理的教程吗?

@Zz-dong
Copy link
Author

Zz-dong commented Aug 7, 2023

@toufunao 我似乎也遇到过这样的warning,或许这就是空行存在的原因,可以请教一下@Stanislas0#47#16 中都有提到微调的需求但是官方似乎没有提供相应的教程,这也是我的需求。希望官方可以更新一下,期待 !

@zhouenxian
Copy link

我也出现了大量空行,还有warning提示
The attention mask and the pad token id were not set. As a consequence, you may observe unexpected behavior. Please pass your input's attention_mask to obtain reliable results.
Setting pad_token_id to eos_token_id:2 for open-end generation.
并且原封不动的吧Prompt的内容打印出来,最奇怪的是代码一个字也没生成。我没有对模型进行量化。
image

@AnitaSherry
Copy link

我的显卡不支持bfloat16,也出现了大量空行,输出的啥也不是

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

6 participants