THUDM / CogVLM2

GPT4V-level open-source multi-modal model based on Llama3-8B
Apache License 2.0
1.42k stars 77 forks source link

本地部署模型的输出与在线样例不一致, 本地效果较差且不稳定 #113

Closed liuky74 closed 1 week ago

liuky74 commented 1 week ago

System Info / 系統信息

cuda版本: 12.1 pytorch版本: 2.3

Who can help? / 谁可以帮助到您?

No response

Information / 问题信息

Reproduction / 复现过程

完全按照官网给出的流程, 从魔塔下载cogvlm2-llama3-chinese-chat-19B后调用本地cli_demo_multi_gpus.py脚本启动, 模型被加载到3张3090显卡上 或者是采用4B量化后加载都存在识别结果不如web demo的问题, 比如对于如下输入: image 模型返回 image 该内容不完整, 并且与web demo返回的内容差别很大(web demo的识别结果非常精确) image image 请问这是什么原因导致的? 目前web demo的模型有进一步优化但是没有放出吗?

Expected behavior / 期待表现

希望能告诉我以下导致这类情况发生的原因可能是什么?

Sleepychord commented 1 week ago

web demo就是这个模型,没有其他的优化。我们观察到可能和cuda版本有关

liuky74 commented 1 week ago

web demo就是这个模型,没有其他的优化。我们观察到可能和cuda版本有关

非常感谢, 如果是这样的话, 能否提供以下web demo使用的cuda, cudnn以及pytorch的版本号? 以便于我构造一个一致的环境, 谢谢

如果允许的话, 能将两个requirements.txt中涉及到的库均提供一个固定版本就更好了, respect!

iyuge2 commented 1 week ago

@liuky74 hi,方便发一下原图吗?我这边尝试复现一下这个问题,谢谢。

iyuge2 commented 1 week ago

@liuky74 另外,可以尝试改一下 cli_demo_multi_gpus.py 中的默认参数配置。现在这个脚本中没有设置 top_k 值,跟 web demo 的生成参数有差异。

gen_kwargs = {
            "top_k": 1,
            "top_p": 0.6,
            "temperature": 0.8,
            "max_new_tokens": 2048,
            "pad_token_id": 128002,
        }
zRzRzRzRzRzRzR commented 1 week ago

已经补上了top_k,其他参数可以自己调整, "top_k": 1 比较合理

liuky74 commented 1 week ago

@liuky74 另外,可以尝试改一下 cli_demo_multi_gpus.py 中的默认参数配置。现在这个脚本中没有设置 top_k 值,跟 web demo 的生成参数有差异。

gen_kwargs = {
            "top_k": 1,
            "top_p": 0.6,
            "temperature": 0.8,
            "max_new_tokens": 2048,
            "pad_token_id": 128002,
        }

这个参数我也已经加了, 但是效果差异还是挺大, 从目前测试原图是属于电网内部的资料, 我不能直接发出来, 能否给一个邮箱我发给您

liuky74 commented 1 week ago

@liuky74 另外,可以尝试改一下 cli_demo_multi_gpus.py 中的默认参数配置。现在这个脚本中没有设置 top_k 值,跟 web demo 的生成参数有差异。

gen_kwargs = {
            "top_k": 1,
            "top_p": 0.6,
            "temperature": 0.8,
            "max_new_tokens": 2048,
            "pad_token_id": 128002,
        }

或者iyuge2@qq.com这个qq邮箱就可以?

iyuge2 commented 1 week ago

@liuky74 可以的

liuky74 commented 1 week ago

@liuky74 可以的

我用cogvlm2-llama3-chat-19B模型, 这个应该就是en英文模型吧? 复现了问题, 然后把测试图片和复现过程发送给您了, 请查收, 谢谢

iyuge2 commented 1 week ago

@liuky74 用的是英文模型吗?英文模型下中文图片的问答能力比较弱,建议用中文模型 cogvlm2-llama3-chinese-chat-19B。推荐 prompt:基于 json 格式提取图中所有关键信息。若是需要更精确的 json 提取信息功能,可以在prompt中指定需要提取的字段内容,这样输出会更加稳定。比如下面的 prompt:

基于json格式提取所有关键信息,以如下json列表格式返回: [ { "凭证摘要": ***, "科目名称": ***, "核算对象": ***, "借方金额": ***, "贷方金额": *** } ]

至于复现过程中的问题,本地跑英文模型结果和 web demo 会有差异,我这边复现失败了。下面是我们本地的 cuda 环境,你可以尝试一下。

nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2023 NVIDIA Corporation
Built on Tue_Jun_13_19:16:58_PDT_2023
Cuda compilation tools, release 12.2, V12.2.91
Build cuda_12.2.r12.2/compiler.32965470_0

不过,这个问题比较复杂,除了cuda 版本外,其他python包的版本差异(比如 torch,transformer 等)也可能会有影响。根据我们之前经验,这些差异在个例上可能会有显著影响,但对整体效果影响不大。

liuky74 commented 1 week ago

@liuky74 用的是英文模型吗?英文模型下中文图片的问答能力比较弱,建议用中文模型 cogvlm2-llama3-chinese-chat-19B。推荐 prompt:基于 json 格式提取图中所有关键信息。若是需要更精确的 json 提取信息功能,可以在prompt中指定需要提取的字段内容,这样输出会更加稳定。比如下面的 prompt:

基于json格式提取所有关键信息,以如下json列表格式返回: [ { "凭证摘要": ***, "科目名称": ***, "核算对象": ***, "借方金额": ***, "贷方金额": *** } ]

至于复现过程中的问题,本地跑英文模型结果和 web demo 会有差异,我这边复现失败了。下面是我们本地的 cuda 环境,你可以尝试一下。

nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2023 NVIDIA Corporation
Built on Tue_Jun_13_19:16:58_PDT_2023
Cuda compilation tools, release 12.2, V12.2.91
Build cuda_12.2.r12.2/compiler.32965470_0

不过,这个问题比较复杂,除了cuda 版本外,其他python包的版本差异(比如 torch,transformer 等)也可能会有影响。根据我们之前经验,这些差异在个例上可能会有显著影响,但对整体效果影响不大。

非常感谢您的帮忙, 我们这边是针对审计做非标的各类数据识别, 会进一步进行微调训练, 如果有进一步的疑问再来请教, respect!