Ascend-SACT/blip2
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

适配环境信息

NPU硬件:A2/910B

操作系统:ARM

部署方式:单卡

1模型介绍

BLIP-2 是一个在多模态人工智能领域具有突破性意义的模型,它巧妙地解决了训练大规模视觉-语言模型成本高昂的难题。 BLIP-2 的核心目标是高效地连接一个强大的预训练视觉编码器(负责理解图像)和一个强大的预训练大语言模型(负责生成文本),而无需对它们进行端到端的全面微调。 一、核心思想:轻量级连接器 想象一下,你有两个顶尖专家:一位是视觉大师(如CLIP的视觉编码器),他只懂“看”图;另一位是语言大师(如LLaMA、OPT等大语言模型),他只懂“读”和“写”文字。BLIP-2 就像一个聪明的翻译官,它学会了如何将视觉大师看到的图像内容,转换成语言大师能理解的语言提示,从而让两位专家能够协作完成任务。 这个“翻译官”就是BLIP-2的核心创新——Q-Former。 二、关键创新:Q-Former Q-Former 是 Querying Transformer 的缩写,它是一个相对轻量的神经网络模块,其设计非常精巧: 桥梁作用:它的一端连接着被冻结的视觉编码器,另一端连接着被冻结的大语言模型。 可学习的查询向量:Q-Former 内部包含一组可学习的查询向量。这些查询向量就像“提问者”,它们会与图像特征进行交互,从图像中提取出与文本最相关的信息。 两阶段预训练:为了训练这个“翻译官”,BLIP-2 采用了两个高效的阶段: 第一阶段:视觉-语言表示学习:使用大量的图像-文本对,训练Q-Former理解图像内容并生成与文本对齐的视觉表示。 第二阶段:视觉-语言生成学习:将Q-Former提取的视觉表示输入给冻结的大语言模型,训练它如何基于这些视觉信息来生成文本。 “冻结”意味着什么? 这意味着在训练BLIP-2时,庞大的视觉编码器和语言模型的参数保持不变,只更新Q-Former这个小型连接器的参数。这带来了巨大的优势:训练成本极低,效率极高。 三、主要优势 计算效率极高:由于不需要端到端训练巨大的模型,BLIP-2的训练成本仅为从头训练或全参数微调类似规模模型的一个零头。 即插即用:它可以灵活地与任何预训练的视觉编码器和任何预训练的大语言模型组合,模块化程度非常高。 零样本能力强大:得益于强大的预训练组件,BLIP-2在未见过的任务上表现出出色的零样本能力。 支持多种任务:能够处理多种视觉-语言任务。 四、应用场景 BLIP-2 可以实现以下多种功能: 视觉问答:给一张图,问“图片里的人在做什么?”,BLIP-2能生成答案。 图像描述:为给定的图像生成准确、详细的文字描述。 多轮对话:基于一张图片,与用户进行多轮对话。 零样本图像-文本检索:用文字搜索图片,或用图片搜索文字。

2 背景

旨在将前沿的多模态连接器架构BLIP-2成功迁移到昇腾NPU平台,验证其视觉-语言理解能力。这是NPU生态向大模型时代多模态AI迈进的关键一步。 背景需求包括: 大模型时代的多模态需求:随着LLM的爆发,如何高效连接视觉与语言成为关键,BLIP-2的代表性迁移具有战略意义 参数高效微调技术验证:BLIP-2的Q-Former架构代表了最先进的PEFT技术,验证其在NPU上的运行对生态建设至关重要 AIGC多模态应用:BLIP-2是构建多模态对话系统、智能内容理解等AIGC应用的核心组件 将BLIP-2这样的复杂多模态连接器模型迁移到NPU面临独特挑战: 三重架构复杂性:BLIP-2包含视觉编码器、Q-Former和语言模型三个组件,需要协调不同架构的计算模式 跨模态特征对齐:Q-Former需要精确对齐视觉和语言特征空间,这对NPU的数值计算精度提出极高要求 混合精度支持:如验证脚本所示,需要同时处理FP16的图像特征和INT32的文本输入,混合精度计算的稳定性是关键 大语言模型集成:BLIP-2集成了27亿参数的OPT模型,对NPU的大模型推理能力是严峻考验 生成式对话能力:模型需要支持多轮对话和开放式生成,这对自回归解码的稳定性要求很高

3 解决方案

3.1 模型获取

模型链接:https://hf-mirror.com/Salesforce/blip2-opt-2.7b 下载命令:

HF_ENDPOINT=https://hf-mirror.com \
huggingface-cli download Salesforce/blip2-opt-2.7b \
  --local-dir /root/autodl-tmp/blip2/blip2-opt-2.7b \
  --local-dir-use-symlinks False

3.2 基础环境准备

pip install \
  transformers==4.30.2 \
  huggingface_hub==0.16.4

3.3 推理验证

验证脚本:

import torch
import torch_npu
from torch_npu.contrib import transfer_to_npu

from PIL import Image
from transformers import Blip2Processor, Blip2ForConditionalGeneration

device = torch.device("npu")
model_path = "/root/autodl-tmp/blip2/blip2-opt-2.7b"

# 加载 processor
processor = Blip2Processor.from_pretrained(model_path, use_fast=False)

# 加载模型 FP16
model = Blip2ForConditionalGeneration.from_pretrained(
    model_path,
    torch_dtype=torch.float16
)
model = model.to(device)
model.eval()

# 图片
raw_image = Image.open("demo.jpg").convert("RGB")
question = "how many dogs are in the picture?"

# tokenizer
inputs = processor(raw_image, question, return_tensors="pt")

# 放到 NPU,区分类型
inputs_npu = {}
for k, v in inputs.items():
    if k == "input_ids" or k == "attention_mask":
        # 保持整数类型
        inputs_npu[k] = v.to(device)
    else:
        # 图像张量用 FP16
        inputs_npu[k] = v.to(device, dtype=torch.float16)

# 推理
with torch.no_grad():
    out = model.generate(
        **inputs_npu,
        max_new_tokens=20,
        do_sample=True,         # 允许采样
        top_p=0.9,              # nucleus sampling
        top_k=50,
        num_beams=1             # 保证生成
    )

print("生成 token:", out)
print("生成文本:", processor.decode(out[0], skip_special_tokens=True))

3.4验证结果

输入动物图片可以推理动物名称

迁移的价值与成功意义

一、技术价值:突破多模态连接器技术壁垒 Q-Former架构验证:成功运行BLIP-2验证了NPU对创新性连接器架构的支持能力,为其他PEFT方法迁移提供了技术参考 大模型集成能力:证明NPU能够有效集成和推理数十亿参数的大型语言模型,具备处理现代大模型工作负载的能力 混合精度计算稳定性:成功处理FP16和INT32的混合输入,展示了NPU在复杂数据类型场景下的稳定性 二、应用价值:开启多模态AIGC新可能 智能视觉问答系统:为构建基于国产硬件的视觉问答、图像描述生成等应用提供了技术基础 多模态对话助手:BLIP-2的成功迁移为开发类似GPT-4V的多模态对话助手奠定了硬件基础 内容理解与生成:在媒体、电商、教育等领域的内容理解和自动生成场景具有广泛应用前景