ymcui / Chinese-LLaMA-Alpaca

中文LLaMA&Alpaca大语言模型+本地CPU/GPU训练部署 (Chinese LLaMA & Alpaca LLMs)

Home Page:https://github.com/ymcui/Chinese-LLaMA-Alpaca/wiki

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Windows本地部署经过量化的模型貌似无法理解中文Prompt?

LainNya opened this issue · comments

你好,我在推理时遇到了问题,在尝试输入中文Prompt时,模型给出的输出经常是答非所问,但输入英文Prompt就正常输出了,请问是什么问题?我启动模型的命令是完全按照Steps3输入的。而且模型的回复也不是中文的?
image

从回复内容和风格看,似乎不是我们这一版模型。因为合并过程中涉及的的权重文件比较多,请确认下中间转换过程用的权重是否弄混淆了?

我的操作如下
1.把原版llama转换成HF格式
2.从谷歌网盘下载了Chinese-Alpaca-7B的Lora
3.对中文词表扩充, llama_model的路径为原版转换后的模型, tokenizer的路径为Chinese-Alpaca-7B的路径
4.合并权重 base_model为第三步扩充后的模型,lora_model为Chinese-Alpaca-7B的路径
我觉得我操作应该没有混淆吧 :( 我的朋友尝试了下也得出了这样的结果

我的操作如下
1.把原版llama转换成HF格式
2.从谷歌网盘下载了Chinese-Alpaca-7B的Lora
3.对中文词表扩充, llama_model的路径为原版转换后的模型, tokenizer的路径为Chinese-Alpaca-7B的路径
4.合并权重 base_model为第三步扩充后的模型,lora_model为Chinese-Alpaca-7B的路径
我觉得我操作应该没有混淆吧 :( 我的朋友尝试了下也得出了这样的结果

可以把./main运行后马上输出出来的log贴一下吗(到提示符>之前)?

你好,我在推理时遇到了问题,在尝试输入中文Prompt时,模型给出的输出经常是答非所问,但输入英文Prompt就正常输出了,请问是什么问题?我启动模型的命令是完全按照Steps3输入的。而且模型的回复也不是中文的?
image

可以检查一下几个中间文件的SHA256 是否一致:
adapter_model.bin: 0d9b6ed8e4a7d1ae590a16c89a452a488d66ff07e45487972f61c2b6e46e36de
合并后的consolidated.00.pth: fbfccc91183169842aac8d093379f0a449b5a26c5ee7a298baf0d556f1499b90

我的操作如下
1.把原版llama转换成HF格式
2.从谷歌网盘下载了Chinese-Alpaca-7B的Lora
3.对中文词表扩充, llama_model的路径为原版转换后的模型, tokenizer的路径为Chinese-Alpaca-7B的路径
4.合并权重 base_model为第三步扩充后的模型,lora_model为Chinese-Alpaca-7B的路径
我觉得我操作应该没有混淆吧 :( 我的朋友尝试了下也得出了这样的结果

可以把运行后马上输出出来的log贴一下吗(到提示符之前)?./main``>

image
这是我的log日志

你好,我在推理时遇到了问题,在尝试输入中文Prompt时,模型给出的输出经常是答非所问,但输入英文Prompt就正常输出了,请问是什么问题?我启动模型的命令是完全按照Steps3输入的。而且模型的回复也不是中文的?
image

可以检查一下几个中间文件的SHA256 是否一致: adapter_model.bin: 0d9b6ed8e4a7d1ae590a16c89a452a488d66ff07e45487972f61c2b6e46e36de 合并后的consolidated.00.pth: fbfccc91183169842aac8d093379f0a449b5a26c5ee7a298baf0d556f1499b90

貌似我的consolidated.00.pth与你的不一致

我尝试重新合并和量化了下模型,这次使用的是Huggingface内的lora,但依旧是同样的结果 :(
我所使用的原版llama来源:https://github.com/facebookresearch/llama/pull/73/files
Chinese-alpaca来源:https://huggingface.co/ziqingyang/chinese-alpaca-lora-7b

你好,我在推理时遇到了问题,在尝试输入中文Prompt时,模型给出的输出经常是答非所问,但输入英文Prompt就正常输出了,请问是什么问题?我启动模型的命令是完全按照Steps3输入的。而且模型的回复也不是中文的?
image

可以检查一下几个中间文件的SHA256 是否一致: adapter_model.bin: 0d9b6ed8e4a7d1ae590a16c89a452a488d66ff07e45487972f61c2b6e46e36de 合并后的consolidated.00.pth: fbfccc91183169842aac8d093379f0a449b5a26c5ee7a298baf0d556f1499b90

貌似我的consolidated.00.pth与你的不一致

peft版本是0.2.0吗?同时用最新的export_state_dict_checkpoint.py试试?

最新的export_state_dict_checkpoint.py生成的consolidated.00.pth sha256一致了,可以正常中文推理了:D

抱歉,我结束的太早了,貌似还是不能正常?

image
这是我的量化后模型的sha256 f19503385fb3ab92ec96f2b6a2d733f07e368c836ba7a1d575699159156ac0e6

合并后的全量模型权重的SHA256
image

image 这是我的量化后模型的sha256 f19503385fb3ab92ec96f2b6a2d733f07e368c836ba7a1d575699159156ac0e6

合并后的全量模型权重的SHA256 image

我q4量化后模型的sha256的和你是一致的

那请问我这是什么问题呢?我现在完全不回答我的问题
image

那请问我这是什么问题呢?我现在完全不回答我的问题
image

你试试用llama.cpp加载原版llama看有没有问题

那请问我这是什么问题呢?我现在完全不回答我的问题
image

你试试用llama.cpp加载原版llama看有没有问题

我将原版llama进行了q4量化,这是它的回答,难道是llama.cpp的问题?
image

commented

我也是类似问题,会不会跟这个有关,protobuf版本太低了,因为安装过程要求只能使用3.20.x
Screenshot 2023-03-31 at 08 25 33

我也是类似问题,会不会跟这个有关,protobuf版本太低了,因为安装过程要求只能使用3.20.x Screenshot 2023-03-31 at 08 25 33

低版本也会导致这个问题吗?我的是3.19.0

image
尝试打印了下main.exe获取的值,貌似中文就没获取到,我的cpp基础很差,不知道怎么更改.
应该是在这行
image

大概就是这个原因,我将关闭这个提问

@LainNya #20 这个或许对你有帮助。

@LainNya #20 这个或许对你有帮助。

我也已经发现这个问题了,Windows 平台下cmd和poweshell有问题,但我在git bash内执行就没问题了

ggerganov/llama.cpp#646
llama.cpp 项目下对应的讨论,总之先用git-bash或WSL吧。

@ymcui 打扰下,方便把这个知识加进README吗?

ggerganov/llama.cpp#646 llama.cpp 项目下对应的讨论,总之先用git-bash或WSL吧。

@ymcui 打扰下,方便把这个知识加进README吗?

感谢提供信息,我先把这个issue PIN起来,后续加到合适的位置。

看看readline之后有没有编码转换?CMD和PowerShell默认是GBK(CP936)编码,而Linux Shell默认是UTF-8,可能是这个问题。可以试试先chcp 65001再使用llama.cpp。

为什么我在git bash中也不支持中文prompt。有大佬能看看吗?
1680604452647

@LainNya #20 这个或许对你有帮助。

我也已经发现这个问题了,Windows 平台下cmd和poweshell有问题,但我在git bash内执行就没问题了

我在git bash 中也不支持中文,什么原因
1680604605304

看看readline之后有没有编码转换?CMD和PowerShell默认是GBK(CP936)编码,而Linux Shell默认是UTF-8,可能是这个问题。可以试试先chcp 65001再使用llama.cpp。

已经尝试过了,依然无法正常获取

我改了一下实现, 现在可以支持中文输入了, 配置开箱即用: https://github.com/josStorer/llama.cpp-unicode-windows

_getwch手动实现了unicode兼容的getline, 目前实现了输入, 退格, 左右移动光标, 以及回车, 足够常规使用 (不确定是不是最佳的解决方案, 但能解决问题)

O%BKDC3SM}TZQ8ZKQBPG4FE

我改了一下实现, 现在可以支持中文输入了, 配置开箱即用: https://github.com/josStorer/llama.cpp-unicode-windows

_getwch手动实现了unicode兼容的getline, 目前实现了输入, 退格, 左右移动光标, 以及回车, 足够常规使用 (不确定是不是最佳的解决方案, 但能解决问题)

O%BKDC3SM}TZQ8ZKQBPG4FE

感谢,已添加到README中。

我改了一下实现, 现在可以支持中文输入了, 配置开箱即用: https://github.com/josStorer/llama.cpp-unicode-windows

Nice work!

原llama.cpp 项目中已合并了 ggerganov/llama.cpp#420
解决了输入问题但没解决输出问题:

it is currently not possible to insert or display utf-8 characters at moment.
ggerganov/llama.cpp#646 (comment)

我不确定你是否方便提个pr,让原llama.cpp也支持输出UTF-8(和对UTF-8的修改)?...

@boholder 我的改动不是跨平台的, 并且并不是完全兼容getline, 对于一些依赖命令行输入输出的API服务有兼容问题, 所以我觉得不适合提到官方仓库, 适合直接作为命令行体验

我在原项目问题下也提了我的解决方案, 我想仓库维护者也看到了

@boholder 我的改动不是跨平台的, 并且并不是完全兼容getline, 对于一些依赖命令行输入输出的API服务有兼容问题, 所以我觉得不适合提到官方仓库, 适合直接作为命令行体验

我在原项目问题下也提了我的解决方案, 我想仓库维护者也看到了

原来是这样,不好意思我没了解情况。。再次谢谢你提供了解决方案。

@boholder 我目前正在针对指令模式把llama做成api服务, 这个方案可以配合应用落地, 并且能够使用中文

https://github.com/josStorer/selfhostedAI 现在已经可用, 但是我还没更新使用说明

这里是一个应用API调用的示例
64J_YRL$9TRUDH0PQWG8{8

是否考虑换用python版的llama.cpp?
python输出或许可以解决cpp版的中文支持问题

@boholder 我目前正在针对指令模式把llama做成api服务, 这个方案可以配合应用落地, 并且能够使用中文

https://github.com/josStorer/selfhostedAI 现在已经可用, 但是我还没更新使用说明

这里是一个应用API调用的示例 64J_YRL$9TRUDH0PQWG8{8

我想请问一下 可以支持llamacpp 结合的chinesellamaaplaca模型吗?

@wwwwwuxueyu 截图里用的就是这个仓库的中文模型效果, 简单问题体验还不错

最新的 llama.cpp 已经解决了这个问题。