项目介绍:llava-interleave-qwen-0.5b-hf
项目背景
LLaVA Interleave 是一个开源的聊天机器人模型,基于 Transformer 架构并经过改进,使其能够处理多模态指令数据。模型的基础语言模型是 Qwen/Qwen1.5-7B-Chat,旨在在大型多模态模型和聊天机器人方面进行研究,其应用范围仅限于研究和探索,不支持商业用途。
目标用户
该模型主要面向在计算机视觉、自然语言处理、机器学习和人工智能领域的研究人员和爱好者。这些用户可以利用模型进行深入的探索和实验以推动相关技术的发展。
使用指南
要使用该模型,用户需确保安装了 transformers
库,版本不低于 4.35.3。该模型支持多图像和多提示生成,可以在提示中传入多个图像。提示使用的格式应遵循特定模板(例如 USER: xxx\nASSISTANT:
)并在查询图像的位置添加令牌 <image>
。
使用 pipeline
进行操作
以下代码示例展示了如何使用 llava-hf/llava-interleave-qwen-0.5b-hf
检查点来生成图像到文本的转换:
from transformers import pipeline, AutoProcessor
from PIL import Image
import requests
model_id = "llava-hf/llava-interleave-qwen-0.5b-hf"
pipe = pipeline("image-to-text", model=model_id)
processor = AutoProcessor.from_pretrained(model_id)
url = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/tasks/ai2d-demo.jpg"
image = Image.open(requests.get(url, stream=True).raw)
conversation = [
{
"role": "user",
"content": [
{"type": "text", "text": "What does the label 15 represent? (1) lava (2) core (3) tunnel (4) ash cloud"},
{"type": "image"},
],
},
]
prompt = processor.apply_chat_template(conversation, add_generation_prompt=True)
outputs = pipe(image, prompt=prompt, generate_kwargs={"max_new_tokens": 200})
print(outputs)
使用纯 transformers
进行操作
以下示例展示如何在 GPU 设备上以 float16
精度运行生成:
import requests
from PIL import Image
import torch
from transformers import AutoProcessor, LlavaForConditionalGeneration
model_id = "llava-hf/llava-interleave-qwen-0.5b-hf"
model = LlavaForConditionalGeneration.from_pretrained(
model_id,
torch_dtype=torch.float16,
low_cpu_mem_usage=True,
).to(0)
processor = AutoProcessor.from_pretrained(model_id)
conversation = [
{
"role": "user",
"content": [
{"type": "text", "text": "What are these?"},
{"type": "image"},
],
},
]
prompt = processor.apply_chat_template(conversation, add_generation_prompt=True)
image_file = "http://images.cocodataset.org/val2017/000000039769.jpg"
raw_image = Image.open(requests.get(image_file, stream=True).raw)
inputs = processor(images=raw_image, text=prompt, return_tensors='pt').to(0, torch.float16)
output = model.generate(**inputs, max_new_tokens=200, do_sample=False)
print(processor.decode(output[0][2:], skip_special_tokens=True))
模型优化
使用 bitsandbytes
库进行 4-bit 量化
若要实施 4-bit 量化,请确认安装了 bitsandbytes
软件包并有 CUDA 兼容的 GPU 设备。需要对代码进行简单修改:
model = LlavaForConditionalGeneration.from_pretrained(
model_id,
torch_dtype=torch.float16,
low_cpu_mem_usage=True,
+ load_in_4bit=True
)
通过 Flash-Attention 2 提升生成速度
若要进一步加速生成过程,需安装 flash-attn
。可参考 Flash Attention 官方仓库的安装说明。代码调整如下:
model = LlavaForConditionalGeneration.from_pretrained(
model_id,
torch_dtype=torch.float16,
low_cpu_mem_usage=True,
+ use_flash_attention_2=True
).to(0)
许可证声明
该项目使用了一些原始数据集和检查点,这些资源受到各自原始许可证的约束。用户必须遵守这些原始许可证的所有条款和条件,其中包括但不限于 OpenAI 的使用条款以及类似的其他适用法律和法规。用户须确保其使用符合所有适用的法律和法规。