当前位置:   article > 正文

6行代码,1行命令!轻松实现多模态(视觉)模型离线推理 & 在线服务_多模态模型前端代码

多模态模型前端代码

早在去年年底,LMDeploy 已经悄悄地支持了多模态(视觉)模型(下文简称 VLM)推理,只不过它静静地躺在仓库的 examples/vl 角落里,未曾与大家正式照面。

LMDeploy 开源链接:

https://github.com/InternLM/lmdeploy

经过一段时间的迭代,LMDeploy 在 VLM 推理和服务方面,发生了翻天覆地的变化,于 v0.2.6 版本中正式发布。和去年相比,已有云泥之别,可以接受大家的检阅啦。

LMDeploy 的 VLM 推理,主打简单、好用。6行代码完成推理,一行命令搭建服务。

目前,已支持了以下模型:

  • Qwen/Qwen-VL-Chat

  • LLaVA 系列 v1.5,v1.6

  • 01-ai/Yi-VL-6B

准备工作

在使用之前,请先安装 LMDeploy 最新版。如果系统的 cuda 版本是 11+,可以直接安装 pypi 包:

pip install lmdeploy

如果 cuda 版本是 12+,请参考如下命令安装:

  1. export LMDEPLOY_VERSION=0.2.6
  2. export PYTHON_VERSION=38
  3. pip install https://github.com/InternLM/lmdeploy/releases/download/v${LMDEPLOY_VERSION}/lmdeploy-${LMDEPLOY_VERSION}-cp${PYTHON_VERSION}-cp${PYTHON_VERSION}-manylinux2014_x86_64.whl

LMDeploy 支持 Linux、Windows 操作系统。对 cuda 的最低要求是 11.4。显卡架构最低为 sm70,也就是 Volta 架构及以上。显卡内存最好在 20G 以上。

离线推理

使用 LMDeploy pipeline 接口推理 VL 模型仅需 6 行代码,这得益于 LMDeploy 把 VL 模型中的视觉部分,和 LLM 模型都封装到推理 pipeline。以 Qwen-VL-Chat 模型为例:

  1. from lmdeploy import pipeline
  2. from lmdeploy.vl import load_image
  3. pipe = pipeline('Qwen/Qwen-VL-Chat')
  4. image = load_image('https://raw.githubusercontent.com/QwenLM/Qwen-VL/master/assets/mm_tutorial/Shanghai_Small.jpeg')
  5. response = pipe(('这是哪里', image))
  6. print(response)

在这段代码中,

  • 1, 2 两行加载必要的包

  • 第 3 行,输入模型路径,创建推理 pipeline。模型路径可以是huggingface hub 上的模型仓库名,也可以是模型的本地路径,亦可以是 modelscope hub 上的模型仓库名。当选择 modelscope hub 上的模型时,需要先设置环境变量 export LMDEPLOY_USE_MODELSCOPE=True

  • 第 4 行,读取图片。接口 load_image 除了支持 web url 外,还支持本地路径

  • 5,6 两行进行推理,并显示结果。LMDeploy pipeline 支持多种输入模式:

  1. 第一种:单提示图,单图像。(prompt, image)
  2. 第二种:单提示图,多图像。(prompt,[image_1, image_2, ..., image_n])
  3. 第三种:批量数据。[(prompt_1, image_1), (prompt_2, image_2)]
  4. 第四种:openai message 格式
  5. prompts = [
  6. {
  7. 'role': 'user',
  8. 'content': [
  9. {'type': 'text', 'text': '这是哪里'},
  10. {'type': 'image_url', 'image_url': {'url': 'https://raw.githubusercontent.com/QwenLM/Qwen-VL/master/assets/mm_tutorial/Shanghai_Small.jpeg'}}
  11. ]
  12. }

pipeline 还提供了多轮对话接口,用法也很简单:

  1. from lmdeploy import pipeline
  2. from lmdeploy.vl import load_image
  3. pipe = pipeline('Qwen/Qwen-VL-Chat')
  4. image = load_image('https://raw.githubusercontent.com/QwenLM/Qwen-VL/master/assets/demo.jpeg')
  5. sess = pipe.chat(('make a story about this picture', image))
  6. print(sess.response.text)
  7. sess = pipe.chat('make the story focusing on the dog', sess)
  8. print(sess.response.text)

在线服务

LMDeploy 提供了一键式把 VL 模型封装为服务的工具。这里的服务可以是类似 OpenAI 的服务,也可以是 gradio 服务。相信总有一款适合你!

lmdeploy serve api_server Qwen/Qwen-VL-Chat --server-port 8000
lmdeploy serve gradio Qwen/Qwen-VL-Chat --server-port 8000

如搭建 OpenAI 服务,可以无缝对接 OpenAI 应用接口:

  1. from openai import OpenAI
  2. client = OpenAI(api_key='YOUR_API_KEY', base_url='http://0.0.0.0:8000/v1')
  3. model_name = client.models.list().data[0].id
  4. response = client.chat.completions.create(
  5. model=model_name,
  6. messages=[{
  7. 'role':
  8. 'user',
  9. 'content': [{
  10. 'type': 'text',
  11. 'text': 'Describe the image please',
  12. }, {
  13. 'type': 'image_url',
  14. 'image_url': {
  15. 'url':
  16. 'https://raw.githubusercontent.com/QwenLM/Qwen-VL/master/assets/mm_tutorial/Shanghai_Small.jpeg',
  17. },
  18. }],
  19. }],
  20. temperature=0.8,
  21. top_p=0.8)
  22. print(response)

如搭建 gradio 服务,在浏览器中打开 http://0.0.0.0:8000,就可以通过 WebUI 与模型在线交流啦

gradio 服务

引擎配置

在用户的既往反馈中,我们经常收到关于如何做多卡并行、为什么内存占用高、如何支持更大序列长度等问题。大家应用 VLM 模型时,可能也遇到类似的问题。我们在这个章节一并说明下。

其实,很简单,设置推理引擎参数即可。

使用 pipeline 接口的时候,传入TurbomindEngineConfig 配置相关的参数。而在启动 api_server 前,通过 lmdeploy serve api_server --help查阅相关的参数说明,按需传入就好。

这里,我们将重点介绍通过 pipeline 设置一些比较重要的参数的方法。完整的参数列表,大家可以参考 https://github.com/InternLM/lmdeploy/blob/main/lmdeploy/messages.py#L103

设置显卡内存使用量

LMDeploy 的内存分配策略是,在加载完模型权重后,从空闲内存中,按一定比例为 k/v cache 开辟空间。比例值默认为 0.8。这个比例值适用于 A100-80G 这样的大内存,而对于 24G 内的显卡来说,0.4 更加适合。

具体设置方式如下:

  1. from lmdeploy import pipeline, TurbomindEngineConfig
  2. pipe = pipeline('Qwen/Qwen-VL-Chat',
  3. backend_config=TurbomindEngineConfig(cache_max_entry_count=0.4))

设置张量并行

当单卡无法支持 LLM 或者 VLM 时,多卡推理成为很自然的选择。此时,只要为引擎配置 tp 就好:

  1. from lmdeploy import pipeline, TurbomindEngineConfig
  2. pipe = pipeline('Qwen/Qwen-VL-Chat',
  3. backend_config=TurbomindEngineConfig(tp=2))

设置上下文窗口大小

多图、多轮对话场景,通常需要比较长的推理上下文窗口。这可以通过引擎的 session_len 设置:

  1. from lmdeploy import pipeline, TurbomindEngineConfig
  2. pipe = pipeline('Qwen/Qwen-VL-Chat',
  3. backend_config=TurbomindEngineConfig(session_len=9000))

结束语

LMDeploy VLM 模型推理和服务就简单介绍到这里啦。大家在使用中,遇到任何问题或者需求,都可以来我们的社群或者代码仓库反馈。后续,我们将推出 在 LMDeploy 中添加 VLM 模型的方法,诚邀大家参与,贡献自己的力量!

最后的最后,欢迎大家关注我们的项目 https://github.com/InternLM/lmdeploy,动态资讯第一时间掌握!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/991090
推荐阅读
相关标签
  

闽ICP备14008679号