大模型多模态人工智能微调模型推理服务Qwen【免费下载链接】Qwen-VLThe official repo of Qwen-VL (通义千问-VL) chat pretrained large vision language model proposed by Alibaba Cloud.项目地址https://gitcode.com/gh_mirrors/qw/Qwen-VL点击查看免费下载本指南基于通义千问开源多模态大模型Qwen-VL-Chat的官方教程TUTORIAL_zh.md展开系统讲解如何初始化模型并通过可复现的代码示例完成多轮视觉问答、密集文字理解、图表数学推理、多图对比与中文输入、以及根据指令输出目标包围框Grounding等核心任务。读完本文你将掌握tokenizer.from_list_format、model.chat、tokenizer.draw_bbox_on_latest_picture三个核心 API 的完整用法能够把 Qwen-VL-Chat 直接接入自己的视觉语言应用。Qwen-VL-Chat 是通用多模态大规模语言模型能够完成多种视觉语言任务。教程中展示的例子远非其能力极限更换不同的输入图像与提示词Prompt可以进一步挖掘模型潜力本文也会结合仓库源码给出更底层的机制说明与进阶使用建议。准备环境与依赖在运行教程代码前需要先确认机器满足项目要求。根据 README.md 中的说明Qwen-VL 系列的建议运行环境为Python3.8 及以上PyTorch1.12 及以上推荐 2.0 及以上CUDA11.4 及以上GPU 用户。随后安装依赖库pip install -r requirements.txt仓库根目录下的 requirements.txt 中锁定或声明了以下关键依赖transformers4.32.0 accelerate tiktoken einops transformers_stream_generator0.0.4 scipy torchvision pillow tensorboard matplotlib其中transformers_stream_generator用于流式解码einops服务于视觉编码器中的张量重排tiktoken用于分词。加载模型时需要trust_remote_codeTrue因为 Qwen-VL-Chat 的模型结构与分词逻辑以远程代码形式随模型权重一起下发。初始化 Qwen-VL-Chat 模型使用 Qwen-VL-Chat 之前首先初始化它的分词器Tokenizer和模型本体import torch from transformers import AutoModelForCausalLM, AutoTokenizer from transformers.generation import GenerationConfig # 如果您希望结果可复现可以设置随机数种子。 # torch.manual_seed(1234) tokenizer AutoTokenizer.from_pretrained(Qwen/Qwen-VL-Chat, trust_remote_codeTrue) model AutoModelForCausalLM.from_pretrained(Qwen/Qwen-VL-Chat, device_mapcuda, trust_remote_codeTrue).eval() model.generation_config GenerationConfig.from_pretrained(Qwen/Qwen-VL-Chat, trust_remote_codeTrue)执行完上述代码后tokenizer对应 Qwen-VL-Chat 使用的分词器负责对图文混排输入进行分词与预处理model是 Qwen-VL-Chat 模型本身model.chat是其对话入口model.generation_config从模型仓库加载默认生成超参数温度、采样策略等保证输出风格与官方一致。根据 README.md 中的快速开始示例模型加载还可以按硬件条件灵活切换# 使用 bf16 # model AutoModelForCausalLM.from_pretrained(Qwen/Qwen-VL-Chat, device_mapauto, trust_remote_codeTrue, bf16True).eval() # 使用 fp16 # model AutoModelForCausalLM.from_pretrained(Qwen/Qwen-VL-Chat, device_mapauto, trust_remote_codeTrue, fp16True).eval() # 纯 CPU 推理 # model AutoModelForCausalLM.from_pretrained(Qwen/Qwen-VL-Chat, device_mapcpu, trust_remote_codeTrue).eval() # CUDA 设备 model AutoModelForCausalLM.from_pretrained(Qwen/Qwen-VL-Chat, device_mapcuda, trust_remote_codeTrue).eval()此外仓库还提供了 Int4 量化版本Qwen/Qwen-VL-Chat-Int4在显存受限的场景下可显著降低内存占用并提升推理速度详见 README.md 的量化章节。使用 Qwen-VL-Chat五类典型任务实战多轮视觉问答第一个问题识别海报电影名以仓库示例图片 assets/mm_tutorial/Rebecca_(1939_poster).jpeg.jpeg) 为例它是 1940 年电影Rebecca于 1939 年发布的海报Rebecca 电影海报用于测试 Qwen-VL-Chat 的视觉问答能力_Small.jpeg)使用tokenizer.from_list_format可以对图文混排输入进行分词与处理它接收一个由字典组成的列表每个字典通过image键声明图片路径、通过text键声明文本query tokenizer.from_list_format([ {image: assets/mm_tutorial/Rebecca_(1939_poster).jpeg}, {text: What is the name of the movie in the poster?}, ])随后调用model.chat向模型提问。注意第一次提问时对话历史为空传入historyNoneresponse, history model.chat(tokenizer, queryquery, historyNone) print(response)您应该会得到类似下列的输出结果The name of the movie in the poster is Rebecca.这说明模型正确回答了问题——根据海报该电影的名称的确是Rebecca。多轮问答追问导演Qwen-VL-Chat 支持多轮对话。继续追问电影的导演是谁时对话历史已不为空需要把上一轮返回的history传回model.chatquery tokenizer.from_list_format([ {text: Who directed this movie?}, ]) response, history model.chat(tokenizer, queryquery, historyhistory) print(response)您应该会得到类似下列的输出结果The movie Rebecca was directed by Alfred Hitchcock.模型再次正确回答——该电影的导演是 Alfred Hitchcock。多轮能力的核心在于history参数的传递model.chat返回的(response, history)二元组中history累积了当前对话的上下文后续轮次必须原样回传模型才能记住之前的图片与问答。文字理解密集文字图片的阅读Qwen-VL-Chat 具有一定针对包含密集文字图片的理解能力。仓库示例 assets/mm_tutorial/Hospital.jpg 是一张包含密集文字的医院指示牌可以用它来询问各个科室所在楼层query tokenizer.from_list_format([ {image: assets/mm_tutorial/Hospital.jpg}, {text: Based on the photo, which floor is the Department of Otorhinolaryngology on?}, ]) response, history model.chat(tokenizer, queryquery, historyNone) print(response)您应该会得到类似下列的输出结果The Department of Otorhinolaryngology is located on the 4th floor.同样可以继续追问此时需要使用historyhistory传递之前的对话历史query tokenizer.from_list_format([ {text: Based on the photo, which floor is the Department of Surgery on?}, ]) response, history model.chat(tokenizer, queryquery, historyhistory) print(response)您应该会得到类似下列的输出结果The Department of Surgery is located on the 3rd floor.这类任务对应了 Qwen-VL 系列在 README.md 中提到的 Text-based VQA 能力——模型以 448×448 的高分辨率端到端处理图像无需外部 OCR 管线即可识别图中文字README 中报告的 DocVQA、ChartQA、TextVQA 等评测均基于仅像素输入完成。图表数学推理结合图像的计算题利用模型的图表理解与数学推理能力Qwen-VL-Chat 还可以完成更复杂的任务。示例图片 assets/mm_tutorial/Menu.jpeg 展示了一家餐厅的菜单现在想知道购买两个 Salmon Burger 和三个 Meat Lovers Pizza 需要花多少钱query tokenizer.from_list_format([ {image: assets/mm_tutorial/Menu.jpeg}, {text: How much would I pay if I want to order two Salmon Burger and three Meat Lover\s Pizza? Think carefully step by step.}, ]) response, history model.chat(tokenizer, queryquery, historyNone) print(response)Think carefully step by step.是引导模型分步处理复杂任务的常见提示词——如果任务较为复杂可以尝试用它来提高准确率。您应该会得到类似下列的输出结果To order two Salmon Burgers and three Meat Lovers Pizzas, you would need to pay the following:For two Salmon Burgers: x2 Salmon Burgers at $10 each $20For three Meat Lovers Pizzas: x3 Meat Lovers Pizzas at $12 each $36Therefore, the total cost would be $56.模型不仅读出了单价还展示了逐步推理过程这体现了其在图像理解 数学计算复合任务上的能力。多图理解与中文输入前几个例子主要展示单张图像与英文问答。实际上Qwen-VL-Chat 是支持中文输入的多语言模型且支持一次输入多张图片。下面的例子用中文让模型比较重庆assets/mm_tutorial/Chongqing.jpeg和北京assets/mm_tutorial/Beijing.jpeg两座城市的照片query tokenizer.from_list_format([ {image: assets/mm_tutorial/Chongqing.jpeg}, {image: assets/mm_tutorial/Beijing.jpeg}, {text: 上面两张图片分别是哪两个城市请对它们进行对比。}, ]) torch.manual_seed(5678) response, history model.chat(tokenizer, queryquery, historyNone) print(response)您应该会得到类似下列的输出结果第一张图片是重庆的城市天际线它反映了现代都市的繁华与喧嚣。第二张图片是北京的天际线它象征着中国首都的现代化和国际化。两座城市都是中国的重要城市拥有独特的文化和发展历史。请注意城市间的比较是一个具有相当主观性的问题模型回复可能具有相当高的随机性。若不使用torch.manual_seed(5678)设置随机数种子每次的输出结果会不一样即使设置了种子由于软硬件环境的差异得到的结果也可能与本文档有所不同。这一说明同样适用于 Grounding 部分的示例。多图输入正是 Qwen-VL 的核心特性之一README.md 将其概括为 Multi-image interleaved conversations——支持多张图片的输入与对比以及针对图片的多图叙述。Grounding指代定位与包围框输出最后展示 Qwen-VL-Chat 产生包围框Bounding Box的能力它可以根据语言描述在图像中用矩形框框出指定区域。示例图片 assets/mm_tutorial/Shanghai.jpg 是上海的一张照片先用常规提示词询问图中有什么torch.manual_seed(1234) query tokenizer.from_list_format([ {image: assets/mm_tutorial/Shanghai.jpg}, {text: 图里有啥}, ]) response, history model.chat(tokenizer, queryquery, historyNone) print(response)您应该会得到类似下列的输出结果图中是中国上海的天际线包括了上海塔、金茂大厦、上海环球金融中心、海洋大厦等著名建筑。接下来通过提示词请给我框出图中上海环球金融中心和东方明珠继续对话注意此时需使用historyhistory传递之前的对话历史query tokenizer.from_list_format([ {text: 请给我框出图中上海环球金融中心和东方明珠}, ]) response, history model.chat(tokenizer, queryquery, historyhistory) print(response)您应该会得到类似下列的输出结果ref上海环球金融中心/refbox(667,437),(760,874)/box和ref东方明珠/refbox(506,75),(582,946)/box模型没有手但也没有拒绝请求——它以标记语言的形式给出了上海环球金融中心和东方明珠在图中的具体位置。ref内是被框物体的文字描述box内的两组坐标是矩形框的左上角与右下角。根据 README.md 对数据格式的说明坐标是归一化到[0, 1000)区间的值。可以使用tokenizer.draw_bbox_on_latest_picture将结果可视化image tokenizer.draw_bbox_on_latest_picture(response, history) image.save(Shanghai_Output.jpg)保存下来的Shanghai_Output.jpg结果将类似于下面的截图在此之后还可以继续照常与 Qwen-VL-Chat 对话例如让其撰写旅游计划query tokenizer.from_list_format([ {text: 帮我写个这座城市的旅游计划}, ]) response, history model.chat(tokenizer, queryquery, historyhistory) print(response)您应该会得到类似下列的输出结果好的以下是一个简单的上海旅游计划第一天 上午抵达上海前往酒店办理入住手续。 中午享用午餐后前往外滩欣赏黄浦江畔的美景游览上海地标性建筑如浦发银行大楼、汇丰银行大楼等。 下午游览南京路步行街购买特色礼品或品尝当地美食。 晚上在南京路附近的餐厅享用晚餐然后去看上海的夜景。第二天 上午前往上海科技馆了解科技发展历史观看各种科技展览。 中午在科技馆附近的餐厅享用午餐。 下午游览世纪公园欣赏美景并放松身心。 晚上在南京路或附近的陆家嘴地区享用晚餐然后去看上海的夜景。第三天 上午游览上海迪士尼乐园或上海海昌海洋公园与各种迪士尼角色互动或者在海洋公园观看海洋生物表演。 中午在迪士尼乐园或海洋公园附近的餐厅享用午餐。 下午自由活动可以去购物、品尝当地美食或者去博物馆等。 晚上在酒店附近享用晚餐然后离开上海。当然以上只是一个简单的计划上海有许多其他景点和活动例如参观上海博物馆、游览田子坊、观看上海话剧等。具体计划可以根据个人兴趣和时间进行调整。请注意旅游计划同样具有主观性模型回复可能具有相当高的随机性。若不使用torch.manual_seed(1234)设置随机数种子每次输出会不一样即使设置了种子由于软硬件环境差异结果也可能与本文档不同。Grounding 能力在 README.md 中有更系统的评测支撑Qwen-VL 在 RefCOCO、RefCOCO、RefCOCOg 等指代理解基准上表现优异并且尽管未使用中文 Grounding 数据训练仍可通过中文描述数据与英文 Grounding 数据实现中文指代定位的零样本泛化。深入理解三个核心 API 的底层机制为了让读者不仅会用还能理解其原理这里结合仓库源码补充三点机制说明。tokenizer.from_list_format图文混排的标准化输入from_list_format接收一个字典列表将image与text交错排列的内容转换成模型可读的输入序列。其底层会把图片路径包裹为img图片路径/img形式。事实上在 README.md 的 ModelScope 快速开始中同样支持直接手写这种字符串格式image_path https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen-VL/assets/demo.jpeg response, history model.chat(tokenizer, queryfimg{image_path}/img这是什么, historyNone)可见from_list_format只是这种图文混排约定的结构化封装。在 README.md 的微调数据说明中模型使用的特殊 token 包括img /img ref /ref box /boximg_path既可以是本地路径也可以是网络链接。model.chat对话历史与多轮上下文model.chat(tokenizer, queryquery, historyhistory)的返回值为(response, history)query是经from_list_format处理后的图文混排输入history累积对话上下文首轮传None后续轮次回传上一轮返回值该机制在 Web 演示源码 web_demo_mm.py 中也有体现——代码将每轮(message, response)追加进history后再调用model.chat并同时提供chat_stream流式变体web_demo_mm.py用于逐 token 流式输出。tokenizer.draw_bbox_on_latest_picture从标记语言到可视化当模型输出包含ref与box标记时draw_bbox_on_latest_picture(response, history)会从响应中解析出指代文本与坐标在最近一张图片上绘制矩形框并返回 PIL Image。Web 演示源码 web_demo_mm.py 中正是用它把检测框结果渲染成图片展示给用户若响应中没有包围框该函数返回None此时if image:判断会走空分支因此调用前建议对返回值做判空处理。进阶玩法与更多资源直接体验 Web 交互 Demo仓库提供了基于 Gradio 的图形化交互 Demo web_demo_mm.py支持上传图片、多轮对话、清除历史与重新生成。启动方式如下python web_demo_mm.py --server-name 127.0.0.1 --server-port 8000常用参数定义于 web_demo_mm.py参数默认值说明-c / --checkpoint-pathqwen/Qwen-VL-Chat模型仓库名或本地路径--cpu-onlyFalse仅使用 CPU 推理--shareFalse生成可公开访问的分享链接--inbrowserFalse自动在浏览器打开界面--server-port8000服务端口--server-name127.0.0.1服务监听地址该 Demo 还展示了两个实用细节chat_stream的流式输出web_demo_mm.py以及_remove_image_special对ref、box标记的剥离web_demo_mm.py可帮助理解如何在应用层处理模型输出。更多玩法教程强调示例远非 Qwen-VL-Chat 能力的极限更换输入图像与提示词海报识别、菜单计算、城市对比、框选地标都只是模板你可以换成文档、票据、截图、流程图等任何图像组合使用多模态格式一张图 一段文字、多张图 一段文字、纯文字追问等输入模式自由组合结合量化与微调显存受限时可换用 Int4 量化版有特定领域需求时可参考仓库的 finetune/ 目录full-parameter / LoRA / Q-LoRA 三种方式做下游微调深入模型细节模型架构、训练细节与评测结果详见 README.md 及论文中文读者可对照 README_CN.md。最后再次强调多模态对话的输出天然带有随机性在需要稳定复现结果的场景中请务必设置随机数种子如torch.manual_seed并理解不同软硬件环境下输出可能存在的差异。赞分享大模型多模态人工智能微调模型推理服务Qwen【免费下载链接】Qwen-VLThe official repo of Qwen-VL (通义千问-VL) chat pretrained large vision language model proposed by Alibaba Cloud.项目地址https://gitcode.com/gh_mirrors/qw/Qwen-VL点击查看免费下载相关推荐Gitpod CI 漏洞扫描管线深度解析基于 leeway SBOM 与 Trivy 的双层 CVE 检测体系Gitpod CI 漏洞扫描管线深度解析基于 leeway SBOM 与 Trivy 的双层 CVE 检测体系 本文以 Gitpod 开源仓库monorep大模型多模态人工智能微调模型推理服务QwenSwift 正则表达式 Unicode 支持全解析SE-0363 的字符类、匹配语义与选项体系Swift 正则表达式 Unicode 支持全解析SE 0363 的字符类、匹配语义与选项体系 Swift 5.7 通过 Regex 为字符串处理引入了全面、大模型多模态人工智能微调模型推理服务QwenMinimal Mistakes 图片对齐实战指南Kramdown 对齐类与 figure 图文混排完整解析Minimal Mistakes 图片对齐实战指南Kramdown 对齐类与 figure 图文混排完整解析 导读 在 Jekyll 博客或文档站中图片的摆前端静态站点上一篇CANN指数分布随机数生成算子下一篇ImDisk完整使用手册轻松掌握Windows虚拟磁盘核心技术创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考