卷卷卷!新的开源多模态大模型王者来啦,从量化到部署用 lmdeploy 把它运行起来吧

这是视频 卷卷卷!新的开源多模态大模型王者来啦,从量化到部署用 lmdeploy 把它运行起来吧 的笔记,请结合视频观看。

大纲

  1. 安装 modelscope 下载 internvl2 8b 的模型
  2. 安装最新的 lmdeploy
  3. 部署原始模型
  4. 模型量化
  5. 部署量化后的模型
  6. 测试 lmdeploy 的效果
  7. 使用 openai api 的方式部署并进行推理

安装 modelscope 下载 internvl2 8b 的模型

pip install modelscope
from modelscope.hub.snapshot_download import snapshot_download
model_dir = snapshot_download('OpenGVLab/InternVL2-8B', cache_dir='autodl-tmp', revision='master')

安装最新的 lmdeploy

pip install lmdeploy[all] timm
pip install transformers==4.37.2

如果想要支持 flash attention 则需要安装 flash-attn

pip install packaging
pip uninstall -y ninja && pip install ninja
pip install flash-attn --no-build-isolation

注意这里不要直接使用 pip install flash-attn 来安装,否则会非常非常的慢。

使用 lmdeploy 部署原始模型

目前 lmdeploy 还没来得及更新对 internvl2 的支持,不过在未来的 0.5.1 应该就会支持。看了目前主分支上的代码,我草率的觉得只要修改下文件夹名称就能解决目前的问题。

ln -s /root/autodl-tmp/OpenGVLab/InternVL2-8B /root/autodl-tmp/OpenGVLab/InternVL-Chat-V1-5

这里可以理解为把新的模型假装是 internvl 1.5 的模型,然后进行部署。

下一步可以进行模型的部署了:

lmdeploy serve gradio \
    /root/autodl-tmp/OpenGVLab/InternVL-Chat-V1-5 \
    --server-port 8080 \
    --server-name 0.0.0.0

目前 autodl 已经不支持暴露外部端口了,但是还是可以使用我自己的 gradio-tunneling 或者直接使用 gradio 自己的内网穿透访问。

pip install gradio-tunneling

gradio-tunneling 是我写的一个小工具,就是使用 huggingface 的 gradio share 的功能进行内网穿透(即使你没有在使用 gradio 也可以!)。

gradio-tunneling 8080

模型量化

使用 awq 量化,首先需要准备校准数据集。

pip install datasets

这里需要从 hf 下载几个文件。

source /etc/network_turbo # autodl 特有的,开启学术加速
export HF_HOME=/root/huggingface # 设定 huggingface 的目录
python -c "
from datasets import load_dataset

load_dataset('ptb_text_only', 'penn_treebank', split='train', trust_remote_code=True)
load_dataset('ptb_text_only', 'penn_treebank', split='validation', trust_remote_code=True)
"

使用下面的命令进行模型量化:

export HF_HOME=/root/huggingface
export HF_DATASETS_OFFLINE=1
lmdeploy lite auto_awq /root/autodl-tmp/OpenGVLab/InternVL-Chat-V1-5 --work-dir /root/autodl-tmp/OpenGVLab/InternVL-Chat-V1-5-AWQ

注意这里的目录名称不能随便给,加载模型的时候会依据文件夹名称加载模型。添加参数 HF_DATASETS_OFFLINE 是为了让 datasets 直接读取本地缓存,不必每次都去 huggingface 检查是否有更新。

部署量化后的模型

lmdeploy lite auto_awq \
    /root/autodl-tmp/OpenGVLab/InternVL-Chat-V1-5 \
    --work-dir /root/autodl-tmp/OpenGVLab/InternVL-Chat-V1-5-AWQ

awq 模型量化需要进行一些模型推理,这个过程是需要 gpu 的支持的。

测试

再次部署量化后的模型:

lmdeploy serve gradio \
    /root/autodl-tmp/OpenGVLab/InternVL-Chat-V1-5-AWQ \
    --model-format awq \
    --server-port 8080 \
    --server-name 0.0.0.0

使用 openai api 的方式部署并进行推理

lmdeploy 也能支持 openai 兼容的 api 方式部署,这里我们先安装 openai 的包。

pip install openai

然后修改 gradioapi_server ,并设定这个模型的名称为 internvl-2 方便后续的模型调用。

lmdeploy serve api_server \
    /root/autodl-tmp/OpenGVLab/InternVL-Chat-V1-5-AWQ \
    --model-format awq \
    --server-port 8080 \
    --server-name 0.0.0.0 \
    --model-name internvl-2

下面是一段 python 代码,按照 openai 官方的例子修改而来:

import base64
from openai import OpenAI

client = OpenAI(base_url='http://localhost:8080/v1', api_key='xxx')

# Function to encode the image
def encode_image(image_path):
  with open(image_path, "rb") as image_file:
    return base64.b64encode(image_file.read()).decode('utf-8')

image_path = "/root/WechatIMG390.jpg"
base64_image = encode_image(image_path)


response = client.chat.completions.create(
  model="internvl-2",
  messages=[
    {
      "role": "user",
      "content": [
        {"type": "text", "text": "描述这张图片"},
        {
          "type": "image_url",
          "image_url": {
            "url": f"data:image/jpeg;base64,{base64_image}"
          }
        },
      ],
    }
  ],
  max_tokens=300,
)

print(response.choices[0].message.content)

openai 兼容服务的好处不必多说,我们可以只修改点点代码就能适配 internvl 了呢!

  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值