
示例工程【免费下载链接】Transformers-TutorialsThis repository contains demos I made with the Transformers library by HuggingFace.项目地址https://gitcode.com/GitHub_Trending/tr/Transformers-Tutorials点击查看免费下载本篇技术指南以 Transformers-Tutorials 仓库中的 Chat_with_BLIP_2.ipynb 及其 int8 量化变体 Chat_with_BLIP_2_[int8_bitsandbytes].ipynb 为主体系统讲解如何在 Transformers 中加载 Salesforce 的 BLIP-2 模型并落地图像描述image captioning、带提示的图像描述、视觉问答VQA以及类 ChatGPT 的多轮对话。读完本文你将掌握Blip2ForConditionalGenerationAutoProcessor的完整推理链路以及从 float16 到 int8 量化的显存优化方案并了解仓库作者推荐的微调与部署路线。一、BLIP-2 是什么开源视觉-语言模型的轻量级多任务方案BLIP-2 是 Salesforce 提出的视觉-语言模型在 Transformers 生态中可通过标准的Blip2ForConditionalGeneration类使用。仓库的 BLIP-2 README 明确归纳了它的定位一个模型同时具备三种能力——为图像生成描述caption images、回答与图像相关的问题answer questions related to images、以及与用户进行类似 ChatGPT 风格的对话式交互chat in a conversational manner。与 DeepMind 的 Flamingo 等同类视觉-语言模型相比BLIP-2 的显著特点是参数规模小得多并且直接复用开源大语言模型作为文本解码器典型配置包括 Meta AI 的 OPT 与 Google 的 Flan-T5。这意味着视觉编码与语言生成两大能力可以由不同来源的预训练组件组合而来无需从头训练整个多模态模型。值得注意的是README 中还提及 BLIP-2 在多个基准上超越了 Flamingo但这类结论的适用前提是尽管模型小得多读者在引用时应以原论文与官方 benchmark 为准。1.1 从 README 看能力边界与上下文约束一个容易被忽略的工程细节是BLIP-2 的上下文长度受其语言模型OPT / T5限制通常为 512 token。这一点在对话式提示一节中被作者反复强调多轮对话本质上是把历史问答逐条拼接成文本后重新喂给模型因此上下文不能太长否则会超出模型窗口。这直接影响了对话策略的设计见本文第五节。1.2 微调路线全量微调与 PEFT/LoRAREADME 指出仓库中的两个 notebook 面向推理inference场景如果你需要在自己的数据上微调作者推荐两条路线全量微调full fine-tuning更新模型所有参数适合算力与显存充足、追求最高下游精度的场景。参数高效微调PEFT / LoRA借助 PEFT 库冻结预训练权重仅训练少量低秩LoRA适配层大幅降低显存与存储开销是目前在消费级 GPU 上微调多模态大模型的更务实选择。这两条路线在 README 中被并列推荐读者可依据自身硬件条件二选一。二、环境准备从源码安装 Transformers 并确认硬件要求主 notebook 在写作时点BLIP-2 尚属较新的模型因此建议从源码安装 Transformers而不是只依赖 PyPI 的稳定版!pip install -q gitgitgithub.com:huggingface/transformers.gitint8 变体在此基础上额外安装了accelerate与bitsandbytes!pip install -q gitgitgithub.com:huggingface/transformers.git accelerate bitsandbytes其中bitsandbytes提供 int8 量化算子accelerate则配合device_mapauto自动完成跨设备CPU/GPU/多 GPU的权重分发。硬件方面作者明确提示建议在 GPU 环境、高内存high RAM环境下运行本 notebook。原因有二其一Salesforce/blip2-opt-2.7b以 OPT-2.7B 作为语言解码器权重体积大其二float16 加载与推理均需要足够显存承载视觉塔、Q-Former 与语言模型三部分。若你的环境显存有限请直接跳到本文第四节的 int8 方案。三、数据准备加载一张测试图像推理的第一步是准备输入图像。notebook 使用requests直接下载一张新加坡鱼尾狮merlion喷泉照片并用 PIL 转换为 RGB 模式import requests from PIL import Image url https://storage.googleapis.com/sfr-vision-language-research/LAVIS/assets/merlion.png image Image.open(requests.get(url, streamTrue).raw).convert(RGB) display(image.resize((596, 437)))这里使用了一张与文本提示强相关的真实场景图后续所有演示描述、天气、城市识别、多轮问答都围绕这张图展开便于读者直观对照输入图像 输入文本 → 输出文本的映射关系。四、加载模型与处理器float16 与 int8 的显存优化对比BLIP-2 在 Transformers 中的标准加载方式由两部分组成AutoProcessor负责图像预处理与文本 tokenize和Blip2ForConditionalGeneration负责前向推理。4.1 float16 加载主 notebookfrom transformers import AutoProcessor, Blip2ForConditionalGeneration import torch processor AutoProcessor.from_pretrained(Salesforce/blip2-opt-2.7b) # 默认 from_pretrained 以 float32 加载权重这里改用 float16 节省显存 model Blip2ForConditionalGeneration.from_pretrained(Salesforce/blip2-opt-2.7b, torch_dtypetorch.float16) device cuda if torch.cuda.is_available() else cpu model.to(device)注释中给出了三种加载档位的完整对照是理解显存优化的关键加载方式关键参数适用场景float32默认不加参数精度基准、权重对齐调试float16torch_dtypetorch.float16在 GPU 上平衡精度与显存notebook 主推方案int8 量化device_mapauto, load_in_8bitTrue显存严重受限追求能跑起来4.2 int8 量化加载int8 变体 notebookint8 变体把三种方式并排注释展示其中激活的正是 bitsandbytes 的 int8 量化方案# model Blip2ForConditionalGeneration.from_pretrained(Salesforce/blip2-opt-2.7b) # float32 # model Blip2ForConditionalGeneration.from_pretrained(Salesforce/blip2-opt-2.7b, torch_dtypetorch.float16) # float16 model Blip2ForConditionalGeneration.from_pretrained(Salesforce/blip2-opt-2.7b, device_mapauto, load_in_8bitTrue) # int8int8 方案的核心价值正如该 notebook 开篇所述bitsandbytes 的 int8 量化算法让庞大模型也能在像 Google Colab 这样的常见硬件上运行。load_in_8bitTrue会把线性层权重量化为 8-bit配合device_mapauto由 accelerate 自动决定每层放置位置从而将 OPT-2.7B 级别的语言模型压进消费级显存。下载日志中显示的约 10GB 分片model.bin 00001-of-00002 等也从侧面说明了该 checkpoint 的体积量级以及量化加载的必要性。4.3 从打印结构看模型组成notebook 输出了模型结构摘要从源码层面揭示了 BLIP-2 的三段式架构可作为理解内部调用的直接证据vision_modelBlip2VisionModel视觉骨干patch_embedding为Conv2d(3, 1408, kernel_size(14,14), stride(14,14))即以 14×14 的 patch 切分图像并将 RGB 三通道映射到 1408 维隐状态语言模型主干示例 checkpoint 使用 OPT-2.7Blm_headLinear(in_features2560, out_features50272, biasFalse)将语言模型隐状态映射到 OPT 的 50272 词表。这一结构印证了 BLIP-2 的设计哲学视觉塔负责图像理解Q-Former 在两者之间建立桥梁而语言生成完全交给开源 LLM 完成。五、三大推理场景的完整代码以下四个示例均使用同一段固定推理模板processor(image, ...)构造输入 →model.generate(...)自回归生成 →batch_decode解码输出。max_new_tokens控制生成长度是唯一的超参数。5.1 图像描述无文本提示若不提供任何文本提示模型默认从 BOSbeginning-of-sequence标记开始生成即自动为图像生成一句话描述inputs processor(image, return_tensorspt).to(device, torch.float16) generated_ids model.generate(**inputs, max_new_tokens20) generated_text processor.batch_decode(generated_ids, skip_special_tokensTrue)[0].strip() print(generated_text) # singapore merlion fountain5.2 带提示的图像描述prompted captioning你可以提供一个文本前缀让模型在图像约束下续写该前缀prompt this is a picture of inputs processor(image, textprompt, return_tensorspt).to(device, torch.float16) generated_ids model.generate(**inputs, max_new_tokens20) print(processor.batch_decode(generated_ids, skip_special_tokensTrue)[0].strip()) # a statue in front of a water fountain换个前缀再试prompt the weather looks # ... 同一段模板 ... # great for a sunset两个例子展示了同一个模型的指哪打哪能力文本提示把生成方向从描述主体切换为评价天气体现了视觉-语言提示工程的基本玩法。5.3 视觉问答VQAVQA 本质上是带结构化提示的图像描述使用Question: ... Answer:模板即可prompt Question: which city is this? Answer: inputs processor(image, textprompt, return_tensorspt).to(device, torch.float16) generated_ids model.generate(**inputs, max_new_tokens10) print(processor.batch_decode(generated_ids, skip_special_tokensTrue)[0].strip()) # singapore注意这里max_new_tokens从 20 降为 10因为答案是短实体城市名更短的生成窗口能降低无意义续写的概率。5.4 类 ChatGPT 的多轮对话拼接上下文即可作者提供了一个极简而精巧的对话方案不维护任何状态只把历史问答按模板拼接成新提示。这也是仓库标题 Chat with BLIP-2 的直接实现。构造多轮上下文的代码context [ (which city is this?, singapore), (why?, it has a statue of a merlion), ] question where is the name merlion coming from? template Question: {} Answer: {}. prompt .join([template.format(context[i][0], context[i][1]) for i in range(len(context))]) Question: question Answer: print(prompt) # Question: which city is this? Answer: singapore. Question: why? Answer: it has a statue of a merlion. Question: where is the name merlion coming from? Answer:随后照常送入模型inputs processor(image, textprompt, return_tensorspt).to(device, torch.float16) generated_ids model.generate(**inputs, max_new_tokens10) print(processor.batch_decode(generated_ids, skip_special_tokensTrue)[0].strip()) # merlion is a mythical creature from malays从输出可见模型确实记住了前两轮问答城市、鱼尾狮雕像并在第三轮借助图像上下文给出了合理解释。工程上需要特别注意作者的两点提醒每次对话都把图像 全部历史文本重新输入模型没有真正的对话状态上下文长度受 OPT/T5 的 512 token 限制长会话需自行截断或摘要历史否则会丢失前缀信息。六、部署参考与后续路径仓库 README 的 Deployment 一节指出BLIP-2 已有面向生产环境的部署范例例如借助 AWS 相关示例将 BLIP-2 部署到 Amazon SageMaker 用于生成式 AI 内容审核等场景。本文不展开外部链接读者可按BLIP-2 SageMaker 内容审核关键词检索官方示例仓库获得完整 notebook。结合整个 BLIP-2 目录 的定位合理的后续路径是推理验证无误后若下游任务为图像描述生成可参考 README 推荐的全量微调 notebookimage_captioning_blip在自有数据集上训练若显存与算力有限则采用PEFT 路线用 LoRA 冻结主干、训练少量适配层直接复用本文第 4.2 节的 int8 加载技巧进一步压内存。七、小结从 Chat_with_BLIP_2.ipynb 到 int8 变体仓库给出了 BLIP-2 在 Transformers 中从零到对话的最小可用闭环AutoProcessorBlip2ForConditionalGeneration提供统一的接口四种推理模式无提示描述、前缀续写、VQA、对话拼接共享同一套生成模板float16 / int8 两种加载档位则分别覆盖追求精度与显存受限两类硬件场景。掌握这套模式后你可以将其迁移到任意Blip2系列 checkpoint如 Flan-T5 变体或在此基础上叠加 LoRA 微调把多模态生成能力落到自己的业务数据上。赞分享示例工程【免费下载链接】Transformers-TutorialsThis repository contains demos I made with the Transformers library by HuggingFace.项目地址https://gitcode.com/GitHub_Trending/tr/Transformers-Tutorials点击查看免费下载相关推荐【亲测免费】 使用BLIP-2与OPT-2.7b模型提升图像描述与视觉问答任务的效率使用BLIP 2与OPT 2.7b模型提升图像描述与视觉问答任务的效率 在当今数据驱动的世界里图像与文本的结合已经变得日益重要。图像描述Image CaptNotepad-- 上手指南编辑、批量替换、文件对比一次搞定的跨平台文本编辑器Notepad 上手指南编辑、批量替换、文件对比一次搞定的跨平台文本编辑器 Notepad 是一款免费开源的跨平台文本编辑器Windows、Linux、ma桌面应用mistral.rs Responses API 视觉输入实战图像理解与多轮对话指南mistral.rs Responses API 视觉输入实战图像理解与多轮对话指南 本篇指南讲解如何在 mistral.rs 的 OpenAI 兼容 HTT推理引擎模型推理服务AI Agent多模态上一篇Windows10Debloater如何在 Windows 10 上移除预装应用并关闭遥测下一篇OpenModScan免费又完整的 Modbus 协议测试工具快速搞定从站调试创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考