整理完多模态大模型的理论知识(详细可指向多模态大模型的渐进之路),我们来初步体验一下多模态大模型的威力。

以下从如何下载大模型,到部署体验一步一步说明。

1 LLAVA下载

LLAVA下载我们借助hf-mirror镜像网站,该网站主页也有配置说明。

设置环境变量的两种方式:

  • 1 在bash中执行,export HF_ENDPOINT=https://hf-mirror.com
  • 2 将环境变量写入用户配置文件,直接写入~/.bashrc,之后执行source service reload。

如何下载模型和数据集请看下图(图片来自hf-mirror主页):

2 LLAVA部署

2.1 简易部署

LLAVA的部署我们可以直接移步huggingface的案例,此处我们移步hf-mirror的案例

与大语言模型载入一个Tokenizer不同,多模态大模型需要载入一个Processor,Processor接收不同模态的信息,并编码成向量。

  • 1 文本
    • tokenizer = AutoTokenizer.from_pretrained(“xxx”)
    • input_ids = tokenizer(input, return_tensors=”pt”).input_ids.cuda()
  • 2 多模态
    • processor = LlavaNextProcessor(“xxx”)
    • inputs = processor(prompt, image, return_tensors=”pt”).cuda()

2.2 持久化部署

我想要实现一个多文本对话,而不是一次性对话,故需要加入一个while循环,同时维护一下历史数据。

2.2.1 LlavaNextProcessor

先查看一下这个LlavaNextProcessor编码出来的特征长啥样,官方示例无法读取图片,所以我借助了BytesIO来讲requests的返回内容转化为IO流:

 

inputs为一个字典,包含了input_ids, attention_mask, pixel_values(5维), image_sizes(2维)。

2.2.2 单次会话

报错,报错信息显示cuDNN和CUDA版本冲突,需要更新runtime api(CUDA Toolkit),至于什么是runtime api请移步:runtime api、CUDA、cuDNN傻傻分不清?

由于服务器不是个人使用,更新Toolkit会导致他人环境错误,这个坑先到这里。