Open cmpute opened 4 months ago
补充下,我这里第一轮输入图+问,后续轮次使用纯文字输出正常,但是点击reset以后,重新上传图片提问,也会报同样的错误
似乎gradio使用了不同的event loop,pytorch backend 应该也会有类似的问题。
gradio 4.0 后引入了好几个问题了。https://github.com/InternLM/lmdeploy/pull/2103 reset 改成用新session就没问题了。
@iWasOmen 试试可以先用起来
gradio 4.0 后引入了好几个问题了。#2103 reset 改成用新session就没问题了。
@iWasOmen 试试可以先用起来
我在internlm-xcomposer2d5-7b-4bit使用这个方法问题没有改善
我试了下是OK的,你是怎么操作的。 @yaaisinile
我试了下是OK的,你是怎么操作的。 @yaaisinile
按你提交的修改内容修改了文件,然后执行命令python gradio_demo/gradio_demo_chat.py --code_path /home/ai/Documents/InternLM-XComposer/internlm-xcomposer2d5-7b-4bit/ 打开demo 127.0.0.1:6006,第一轮上传图片后提问正常,再传一张图片后就报错误了
好像 pip uninstall uvloop
,代码就都能跑了
uvloop
,代码就都能跑了
我把engine.py第 101 行 asyncio.set_event_loop(self._loop) 改为 asyncio.set_event_loop(asyncio.new_event_loop()) 后可以多轮对话不报错了
好像
pip uninstall uvloop
,代码就都能跑了
感谢回复,实测卸载uvloop也有效
gradio 4.0 后引入了好几个问题了。#2103 reset 改成用新session就没问题了。
@iWasOmen 试试可以先用起来
这个pr能修复多轮多图对话的问题吗?我卸载uvloop后多轮多图对话还是会报错
gradio 4.0 后引入了好几个问题了。#2103 reset 改成用新session就没问题了。 @iWasOmen 试试可以先用起来
这个pr能修复多轮多图对话的问题吗?我卸载uvloop后多轮多图对话还是会报错
试下把 engine.py第 101 行 asyncio.set_event_loop(self._loop) 改为 asyncio.set_event_loop(asyncio.new_event_loop())
gradio 4.0 后引入了好几个问题了。#2103 reset 改成用新session就没问题了。 @iWasOmen 试试可以先用起来
这个pr能修复多轮多图对话的问题吗?我卸载uvloop后多轮多图对话还是会报错
试下把 engine.py第 101 行 asyncio.set_event_loop(self._loop) 改为 asyncio.set_event_loop(asyncio.new_event_loop())
这个也不行,还是报错
报错内容呢?
报错是一样的
会跟Python版本有关吗?我看asyncio.Queue的构造函数在3.10有变化
gradio 4.0 后引入了好几个问题了。#2103 reset 改成用新session就没问题了。 @iWasOmen 试试可以先用起来
这个pr能修复多轮多图对话的问题吗?我卸载uvloop后多轮多图对话还是会报错
试下把 engine.py第 101 行 asyncio.set_event_loop(self._loop) 改为 asyncio.set_event_loop(asyncio.new_event_loop())
这个也不行,还是报错
我试完卸载uvloop后也不行了,再装uvloop都不行
gradio 4.0 后引入了好几个问题了。#2103 reset 改成用新session就没问题了。 @iWasOmen 试试可以先用起来
这个pr能修复多轮多图对话的问题吗?我卸载uvloop后多轮多图对话还是会报错
试下把 engine.py第 101 行 asyncio.set_event_loop(self._loop) 改为 asyncio.set_event_loop(asyncio.new_event_loop())
这个也不行,还是报错
修改engine.py文件,把128-129行屏蔽掉加一行self._create_event_loop_task()可以暂时避免,不知道会影响多用户使用不
同样的错误,把InternVL2-4B 部署成服务上线的时候,会报 Current event loop is different from the one bound to loop task! 错误
一劳永逸的方法是 https://github.com/InternLM/lmdeploy/pull/1930 修改的内容改回去,用低版本的 gradio。
一劳永逸的方法是 #1930 修改的内容改回去,用低版本的 gradio。
改回去了,用gradio 3.50.2,还是报“RuntimeError: Current event loop is different from the one bound to loop task!”
@irexyc 帮忙看下?
没有用到gradio,利用lmdeploy去推InternVL2的模型,无论backend设置成torch或者turbomind,部署成服务,调用的时候都会遇到这个报错,请问是否是lmdeploy某个版本更新之后导致的错误?目前尝试了最新的0.5.2 0.5.2.post 都有这个问题
@77h2l 如果说不是用的lmdeploy本身的服务功能,而是将pipeline接口封装为服务的话。
需要在创建pipeline的时候,增加参数 pipe = pipeline('...', vision_config=VisonConfig(thread_safe=True)), pytorch backend也会有类似的问题。
另外如果调用的是 call、stream_infer 接口的话,因为目前没有提供session_id的参数,多个请求可能并不会有迸发。
@77h2l 如果说不是用的lmdeploy本身的服务功能,而是将pipeline接口封装为服务的话。
需要在创建pipeline的时候,增加参数 pipe = pipeline('...', vision_config=VisonConfig(thread_safe=True)), pytorch backend也会有类似的问题。
另外如果调用的是 call、stream_infer 接口的话,因为目前没有提供session_id的参数,多个请求可能并不会有迸发。
对的,目前的应用场景就是使用pipeline的接口,然后在外层通过其他专门的serving框架用来部署服务,尝试了几个版本都有这个问题,我试一下您说的这个参数,另外降低lmdeploy到更低的版本能解决这个问题吗?
@77h2l 就针对event_loop 来讲,PytorchEngineConfig / VisionConfig 都需要设置这个参数,降版本没意义,因为这个参数就是之前的功能。
出现这个问题应该是你多线程使用了。如果你能用协程的话,可以直接用 pipeline.generate 这个入口。
@irexyc 您好,self.pipe = pipeline(self.model, model_name=self.model_name, chat_template_config=self.chat_template_config, backend_config=self.backend_config, vision_config=VisionConfig(thread_safe=True)) vision_config这个参数设置了以后,重新部署的服务接口,推理部分直接超时不返回结果了,请问在类似多线程的环境下,报错和超时这两个问题该如何避免呢?
同样的问题,期待下一个版本能解决这个问题
同遇到这个问题,就是本地模拟用python双线程去调用pipeline预测,就会出现这个问题同样的报错,试了上面的都不行,大佬们现在有解决办法吗?
@ltt-gddxz 可以给个最小复现脚本。
@AllentDan 抱歉,我这不好提供完整代码,这里给出主程序部分,inference函数就是基于lmdeploy的pipeline进行预测(用的InternVL2-1B, 可参考官方推理代码),大佬这边应该可以复现。
if __name__ == '__main__':
thread_num = 2
threads = []
for i in range(thread_num):
thread = threading.Thread(target=inference)
threads.append(thread)
thread.start()
for thread in threads:
thread.join()
print("Main finished.")
torch==2.3.1
transformers==4.46.3
lmdeploy==0.6.3
File "/usr/local/lib/python3.8/dist-packages/lmdeploy/vl/engine.py", line 129, in req_que
raise RuntimeError('Current event loop is different from'
RuntimeError: Current event loop is different from the one bound to loop task!
VL 这里的代码不建议多线程,最好用协程。调用 generate 接口函数,效率也高
Checklist
Describe the bug
在gradio上使用VLM的时候,第一轮图文对话可以正常完成,但是第二轮(也是图文)就会报错,试了几次都是这样。貌似是多轮对话中输入多次图片会有问题。
Reproduction
lmdeploy 0.5.1从wheel安装,使用的模型是InternVL2-2B-AWQ
Environment
Error traceback