在人类的思维中,语言和视觉紧密交织,塑造着我们感知和理解世界的方式。我们的推理能力深深植根于语言思维和视觉记忆之中。那么,当我们将这些能力赋予人工智能时,会发生什么呢?如今的大语言模型已经展现出卓越的推理能力,但我们不禁思考:它们能否通过掌握视觉理解的力量,攀登认知能力的新高峰?

设想一下,一个人工智能能够像物理学大师一样,面对复杂的物理问题,沉着冷静地通过逻辑推理找到解决方案。正是这样的愿景激发Qwen团队创造了 QVQ —— 一个基于 Qwen2-VL-72B 构建的开源多模态推理模型。QVQ 在人工智能的视觉理解和复杂问题解决能力方面实现了重大突破。在 MMMU 评测中,QVQ 取得了 70.3 的优异成绩,并且在各项数学相关基准测试中相比 Qwen2-VL-72B-Instruct 都有显著提升。通过细致的逐步推理,QVQ 在视觉推理任务中展现出增强的能力,尤其在需要复杂分析思维的领域表现出色。

模型链接:

https://modelscope.cn/models/Qwen/QVQ-72B-Preview

01 .模型局限性

QvQ-72B-Preview 是由 Qwen 团队开发的实验性研究模型,专注于增强视觉推理能力。尽管它的表现超出了预期,但仍有几个限制需要注意:

  1. 语言混合和代码切换:模型可能会意外地混合语言或在语言之间切换,从而影响响应的清晰度。

  2. 递归推理:模型可能会陷入循环逻辑模式,产生冗长的响应而无法得出结论。

  3. 安全和伦理考虑:模型需要增强安全措施,以确保可靠和安全的性能,用户在部署时应保持谨慎。

  4. 性能和基准限制:尽管模型在视觉推理方面有所改善,但它无法完全替代 Qwen2-VL-72B 的能力。此外,在多步骤视觉推理过程中,模型可能会逐渐失去对图像内容的关注,导致幻觉。

02 .模型表现

Qwen团队在 4 个数据集上评估 QVQ-72B-Preview,包括:

  • MMMU:一个大学级别的多学科多模态评测集,旨在考察模型视觉相关的综合理解和推理能力。

  • MathVista:一个数学相关的视觉推理测试集,评估拼图测试图形的逻辑推理、函数图的代数推理和学术论文图形的科学推理等能力。

  • MathVision:一个高质量多模态数学推理测试集,来自于真实的数学竞赛,相比于MathVista具有更多的问题多样性和学科广度。

  • OlympiadBench:一个奥林匹克竞赛级别的双语多模态科学基准测试集,包含来自奥林匹克数学和物理竞赛的8,476个问题,包括中国高考。每个问题都附有专家级别的注释,详细说明了逐步推理的过程。

QVQ-72B-Preview 在 MMMU 基准测试中取得了 70.3 的分数,显著超越了 Qwen2-VL-72B-Instruct。此外,在剩下的三个专注于数学和科学问题的基准测试中,该模型表现出色,有效缩小了与领先的最先进的 o1 模型之间的差距。

03 .示例效果

以下,将展示几个示例,以说明该新模型在视觉推理任务中的应用。

上下滑动,查看完整示例

上下滑动,查看完整示例

04 .模型应用最佳实践

模型推理

transformers推理代码:

from modelscope import Qwen2VLForConditionalGeneration, AutoTokenizer, AutoProcessor``from qwen_vl_utils import process_vision_info``   ``# default: Load the model on the available device(s)``model = Qwen2VLForConditionalGeneration.from_pretrained(`    `"Qwen/QVQ-72B-Preview", torch_dtype="auto", device_map="auto"``)``   ``# default processer``processor = AutoProcessor.from_pretrained("Qwen/QVQ-72B-Preview")``   ``# The default range for the number of visual tokens per image in the model is 4-16384. You can set min_pixels and max_pixels according to your needs, such as a token count range of 256-1280, to balance speed and memory usage.``# min_pixels = 256*28*28``# max_pixels = 1280*28*28``# processor = AutoProcessor.from_pretrained("Qwen/QVQ-72B-Preview", min_pixels=min_pixels, max_pixels=max_pixels)``   ``messages = [`    `{`        `"role": "system",`        `"content": [`            `{"type": "text", "text": "You are a helpful and harmless assistant. You are Qwen developed by Alibaba. Answer in the language of the question. You should think step-by-step."}`        `],`    `},`    `{`        `"role": "user",`        `"content": [`            `{`                `"type": "image",`                `"image": "https://qianwen-res.oss-accelerate-overseas.aliyuncs.com/QVQ/demo.png",`            `},`            `{"type": "text", "text": "What value should be filled in the blank space?"},`        `],`    `}``]``   ``# Preparation for inference``text = processor.apply_chat_template(`    `messages, tokenize=False, add_generation_prompt=True``)``image_inputs, video_inputs = process_vision_info(messages)``inputs = processor(`    `text=[text],`    `images=image_inputs,`    `videos=video_inputs,`    `padding=True,`    `return_tensors="pt",``)``inputs = inputs.to("cuda")``   ``# Inference: Generation of the output``generated_ids = model.generate(**inputs, max_new_tokens=8192)``generated_ids_trimmed = [`    `out_ids[len(in_ids) :] for in_ids, out_ids in zip(inputs.input_ids, generated_ids)``]``output_text = processor.batch_decode(`    `generated_ids_trimmed, skip_special_tokens=True, clean_up_tokenization_spaces=False``)``print(output_text)

使用魔搭API-Inference直接调用

魔搭平台的API-Inference,也第一时间为QVQ-72B-Preview模型提供了支持,魔搭的用户可通过API调用的方式直接使用该模型。具体API-Inference的使用方式可参见文档:https://www.modelscope.cn/docs/model-service/API-Inference/intro

import os``from openai import OpenAI``   ``client = OpenAI(`    `api_key=os.getenv("MODELSCOPE_ACCESS_TOKEN"),`    `base_url="https://api-inference.modelscope.cn/v1"``)``   ``response = client.chat.completions.create(`    `model="Qwen/QVQ-72B-Preview",`    `messages = [`        `{`            `"role": "system",`            `"content": [`                `{"type": "text", "text": "You are a helpful and harmless assistant. You are Qwen developed by Alibaba. You should think step-by-step."}`            `],`        `},`        `{`            `"role": "user",`            `"content": [`                `{`                    `"type": "image_url",`                    `"image_url": {"url": "https://qianwen-res.oss-cn-beijing.aliyuncs.com/QVQ/demo.png"}`                `},`                `{"type": "text", "text": "What value should be filled in the blank space?"},`            `],`        `}`    `],`    `stream=True`    `)``   ``   ``for chunk in response:`    `print(chunk.choices[0].delta.content, end='', flush=True)

感谢阿里云百炼平台提供背后算力支持。

模型微调

我们使用ms-swift对QVQ-72B-Preview进行微调。ms-swift是魔搭社区官方提供的大模型与多模态大模型微调部署框架。

ms-swift开源地址:https://github.com/modelscope/ms-swift

在这里,我们将展示可直接运行的demo,并给出自定义数据集的格式。

在开始微调之前,请确保您的环境已准备妥当。

git clone https://github.com/modelscope/ms-swift.git``cd ms-swift``pip install -e .[llm]

图像OCR微调脚本如下:

# 实验环境:2*80GiB A100``MAX_PIXELS=1003520 \``CUDA_VISIBLE_DEVICES=0,1 \``swift sft \`    `--model Qwen/QVQ-72B-Preview \`    `--dataset AI-ModelScope/LaTeX_OCR:human_handwrite#20000 \`    `--train_type lora \`    `--torch_dtype bfloat16 \`    `--num_train_epochs 1 \`    `--per_device_train_batch_size 1 \`    `--per_device_eval_batch_size 1 \`    `--learning_rate 1e-4 \`    `--lora_rank 8 \`    `--lora_alpha 32 \`    `--target_modules all-linear \`    `--freeze_vit true \`    `--gradient_accumulation_steps 16 \`    `--eval_steps 50 \`    `--save_steps 50 \`    `--save_total_limit 5 \`    `--logging_steps 5 \`    `--max_length 2048 \`    `--output_dir output \`    `--warmup_ratio 0.05 \`    `--dataloader_num_workers 4

训练显存资源:

视频微调脚本如下:

# 实验环境:4*80GiB A100```# You can refer to `https://github.com/QwenLM/Qwen2-VL` for the meaning of the `VIDEO_MAX_PIXELS` parameter.```nproc_per_node=4``   ``CUDA_VISIBLE_DEVICES=0,1,2,3 \``NPROC_PER_NODE=$nproc_per_node \``VIDEO_MAX_PIXELS=50176 \``FPS_MAX_FRAMES=12 \``swift sft \`    `--model Qwen/QVQ-72B-Preview \`    `--dataset swift/VideoChatGPT:all \`    `--train_type lora \`    `--torch_dtype bfloat16 \`    `--num_train_epochs 1 \`    `--per_device_train_batch_size 1 \`    `--per_device_eval_batch_size 1 \`    `--learning_rate 1e-4 \`    `--lora_rank 8 \`    `--lora_alpha 32 \`    `--target_modules all-linear \`    `--freeze_vit true \`    `--gradient_accumulation_steps $(expr 16 / $nproc_per_node) \`    `--eval_steps 50 \`    `--save_steps 50 \`    `--save_total_limit 5 \`    `--logging_steps 5 \`    `--max_length 2048 \`    `--output_dir output \`    `--warmup_ratio 0.05 \`    `--dataloader_num_workers 4 \`    `--deepspeed zero3

训练显存资源:

自定义数据集格式如下(system字段可选),只需要指定`–dataset <dataset_path>`即可:

{"messages": [{"role": "user", "content": "浙江的省会在哪?"}, {"role": "assistant", "content": "浙江的省会在杭州。"}]}``{"messages": [{"role": "user", "content": "<image><image>两张图片有什么区别"}, {"role": "assistant", "content": "前一张是小猫,后一张是小狗"}], "images": ["/xxx/x.jpg", "xxx/x.png"]}``{"messages": [{"role": "system", "content": "你是个有用无害的助手"}, {"role": "user", "content": "<video>视频中是什么"}, {"role": "assistant", "content": "视频中是一只小狗在草地上奔跑"}], "videos": ["/xxx/x.mp4"]}

训练完成后,使用以下命令对训练时的验证集进行推理

这里`–adapters`需要替换成训练生成的last checkpoint文件夹. 由于adapters文件夹中包含了训练的参数文件,因此不需要额外指定`–model`:

# 若是对视频数据进行推理,通常需要4卡``CUDA_VISIBLE_DEVICES=0,1 \``swift infer \`    `--adapters output/vx-xxx/checkpoint-xxx \`    `--stream false \`    `--max_batch_size 1 \`    `--load_data_args true \`    `--max_new_tokens 2048

如何学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

在这里插入图片描述

第一阶段(10天):初阶应用

该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。

  • 大模型 AI 能干什么?
  • 大模型是怎样获得「智能」的?
  • 用好 AI 的核心心法
  • 大模型应用业务架构
  • 大模型应用技术架构
  • 代码示例:向 GPT-3.5 灌入新知识
  • 提示工程的意义和核心思想
  • Prompt 典型构成
  • 指令调优方法论
  • 思维链和思维树
  • Prompt 攻击和防范

第二阶段(30天):高阶应用

该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。

  • 为什么要做 RAG
  • 搭建一个简单的 ChatPDF
  • 检索的基础概念
  • 什么是向量表示(Embeddings)
  • 向量数据库与向量检索
  • 基于向量检索的 RAG
  • 搭建 RAG 系统的扩展知识
  • 混合检索与 RAG-Fusion 简介
  • 向量模型本地部署

第三阶段(30天):模型训练

恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。

到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?

  • 为什么要做 RAG
  • 什么是模型
  • 什么是模型训练
  • 求解器 & 损失函数简介
  • 小实验2:手写一个简单的神经网络并训练它
  • 什么是训练/预训练/微调/轻量化微调
  • Transformer结构简介
  • 轻量化微调
  • 实验数据集的构建

第四阶段(20天):商业闭环

对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。

  • 硬件选型
  • 带你了解全球大模型
  • 使用国产大模型服务
  • 搭建 OpenAI 代理
  • 热身:基于阿里云 PAI 部署 Stable Diffusion
  • 在本地计算机运行大模型
  • 大模型的私有化部署
  • 基于 vLLM 部署大模型
  • 案例:如何优雅地在阿里云私有部署开源大模型
  • 部署一套开源 LLM 项目
  • 内容安全
  • 互联网信息服务算法备案

学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。

如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

在这里插入图片描述

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐