1 前言
《Qwen2-VL》论文精读【上】:发表于2024年10月 Qwen2-VL 迅速崛起 | 性能与GPT-4o和Claude3.5相当 上回详细分析了Qwen2-VL的论文摘要、引言、实验,下面继续精读Qwen2-VL的方法部分。
文章目录
- [1 前言](#1 前言)
- [2 方法](#2 方法)
-
- [2.1 Model Architecture](#2.1 Model Architecture)
- [2.2 改进措施](#2.2 改进措施)
-
- [2.2.1 naive动态分辨率支持](#2.2.1 naive动态分辨率支持)
- [2.2.2 多模态旋转位置编码(M-RoPE)](#2.2.2 多模态旋转位置编码(M-RoPE))
- [2.2.3 统一的图像和视频理解](#2.2.3 统一的图像和视频理解)
- [2.2 Training](#2.2 Training)
-
- [2.2.1 Data Format](#2.2.1 Data Format)
- [2.3 多模态模型训练使用的基础设施](#2.3 多模态模型训练使用的基础设施)
2 方法
Qwen2-VL系列包含三种大小的模型,分别是Qwen2-VL-2B、Qwen2-VL-7B和Qwen2-VL-72B。表1列出了超参数和重要信息。值得注意的是,Qwen2-VL在各种大小的LLM中都使用了675M参数的ViT,以确保ViT的计算负载与LLM的规模无关。
2.1 Model Architecture
图2展示了Qwen2-VL的综合结构。作者保留了Qwen-VL框架,该框架将视觉编码器与语言模型相结合。对于各种尺度的适应性调整,作者实现了大约6.75亿参数的视觉Transformer(ViT)
,擅长处理图像和视频输入。在语言处理方面,作者选择了更强大的Qwen2系列语言模型
。
为了进一步提高模型在视频中有效感知和理解视觉信息的能力,作者引入了几个关键的升级:
2.2 改进措施
2.2.1 naive动态分辨率支持
这是Qwen2-VL的一个关键架构改进,即引入了 naive动态分辨率支持
。与其前身不同,Qwen2-VL现在可以处理任意分辨率的图像,动态地将它们转换为可变数量的视觉 Token 。为了支持这一功能,作者对ViT进行了修改,删除了原始的绝对位置嵌入,并引入了2D-RoPE
来捕获图像的二维位置信息。在推理阶段,不同分辨率的图像被包装成一个单独的序列中,包装长度受限于GPU内存使用。
此外,为了减少每个图像的视觉 Token ,在ViT之后使用一个简单的MLP层来压缩相邻的 2x2 Token 为一个 Token ,压缩后的视觉 Token 的开头和结尾分别放置了特殊的<vision_start|>和<|vision_end|> Token 。因此,使用patch_size=14的ViT编码具有224×224分辨率的图像,在进入LLM之前将被压缩为66个 Token 。
2.2.2 多模态旋转位置编码(M-RoPE)
多模态旋转位置编码(M-RoPE)
另一个关键的架构增强是多模态旋转位置编码(M-RoPE)的创新。与LLMs中的传统1D-RoPE不同,它只能编码一维位置信息,M-RoPE可以有效地模拟多模态输入的位置信息。这是通过将原始旋转嵌入分解为三个组件:时间、高度和宽度来实现的。
- 对于文本输入,这些组件使用相同的位置ID,使得M-RoPE在功能上等同于1D-RoPE。在处理图像时,每个视觉 Token 的时间ID保持不变,而根据 Token 在图像中的位置,为高度和宽度组件分配不同的ID。
- 对于视频,由于它们被看作是一系列帧,每个帧的时间ID都会增加,而高度和宽度组件的ID分配模式与图像相同。在模型输入包含多个模态的情况下,每个模态的位置编号通过将前一个模态的最大位置ID加1来初始化。
M-RoPE的示例如图3所示。M-RoPE不仅增强了位置信息建模,还减少了图像和视频的位置ID值,使模型在推理过程中可以扩展到更长的序列。
2.2.3 统一的图像和视频理解
统一的图像和视频理解
Qwen2-VL采用了一种混合训练方法,结合了图像和视频数据,以确保在图像理解和视频理解方面的熟练程度。为了尽可能地保留视频信息,作者每秒采样每个视频两帧。此外,还集成3D卷积深度为2来处理视频输入,使模型能够处理3D Pipeline 而不是2D块,从而允许在不增加序列长度的情况下处理更多的视频帧。
为了保持一致性,作者将每个图像视为两个相同的帧。为了在长视频处理的计算需求与整体训练效率之间取得平衡,作者动态调整每个视频帧的分辨率,将每个视频的总 Token 数限制在16384个以内。这种训练方法在模型理解长视频的能力和训练效率之间取得了平衡。
2.2 Training
遵循Qwen-VL,作者采用三阶段训练方法:
- 第一阶段,专注于训练视觉Transformer(ViT)组件,利用大量的图像文本对来增强大型语言模型(LLM)内的语义理解。
- 第二阶段,解冻所有参数,用更广泛的数据进行训练以进行更全面的学习。
- 在最后第三阶段,锁定ViT参数,并使用指导数据集对LLM进行独家微调。
模型在包括图像文本对、光学字符识别(OCR)数据、交错图像文本文章、视觉问答数据集、视频对话和图像知识数据集的多样化数据集上进行了预训练。作者的数据源主要包括清理过的网页、开源数据集和合成数据。数据知识截止日期为2023年6月。这种多样化数据组成对于开发强大的多模态理解能力至关重要。
第一阶段初始预训练阶段
,Qwen2-VL暴露在一个约600万亿个 Token 的语料库中。Qwen2-VL的LLM组件使用Qwen2的参数初始化,而Qwen2-VL的视觉编码器使用自定义的DFN派生的ViT进行初始化。然而,原始DFN的ViT中的固定位置嵌入被替换为RoPE-2D。这个预训练阶段主要关注学习图像-文本关系、通过OCR在图像中识别文本内容以及图像分类任务。这种基础训练对于使模型能够发展出对核心视觉-文本相关性和对齐的强健理解至关重要。
第二阶段预训练
标志着重大进步,涉及额外的800亿图像相关数据。这一阶段引入了更多的混合图像文本内容,有助于更精细地理解视觉和文本信息之间的互动。将视觉问答数据集纳入模型,可提高其响应图像相关 Query 的能力。此外,将多任务数据集纳入模型,对于开发模型同时处理多样任务的能力至关重要,这在处理复杂现实世界数据集时尤为重要。同时,纯文本数据继续在保持和提高模型语言熟练度方面发挥关键作用。
在预训练阶段,Qwen2-VL总共处理了1.4万亿个 Token 。具体来说,这些 Token 不仅包括文本 Token ,还包括图像 Token 。然而,在训练过程中,作者只提供了对文本 Token 的监督。这种接触广泛而多样语言和视觉场景的训练确保了模型对视觉和文本信息之间复杂关系的深入理解,从而为各种多模态任务奠定了坚实的基础。
在最后第三阶段微调阶段
,使用ChatML格式
构建指令遵循数据。这个数据集不仅包括纯文本对话数据,还包括多模态对话数据。多模态组件包括图像问答、文档解析、多图像比较、视频理解、视频流对话和基于 Agent 的交互。作者构建数据的方法旨在增强模型在各种模态上理解和执行各种指令的能力。通过结合多种数据类型,作者试图开发一个更通用和强大的语言模型,可以处理复杂的、多模态任务,除了传统的文本交互。
Chat Markup Language (简称 ChatML )
2.2.1 Data Format
与Qwen-VL一样,Qwen2-VL也使用了特殊 Token 来区分视觉和文本输入。在图像特征序列的开始和结束处,插入 Token <|vision_start|>和<|vision_end|>来划分图像内容。
对话数据
。在对话格式方面,使用ChatML格式构建指令调优数据集,其中每个交互的语句都使用两个特殊 Token (<|im_start|>和<|im_end|>)来方便对话终止。蓝色部分表示监督部分。
视觉定位
。 为了赋予模型视觉定位能力,边界框坐标在 [0, 1000)范围内进行归一化,并作为
( X t o p l e f t , Y t o p l e f t ) , ( X b o t t o m r i g h t , Y b o t t o m r i g h t ) (X_{top left},Y_{top left}),(X_{bottom right},Y_{bottom right}) (Xtopleft,Ytopleft),(Xbottomright,Ybottomright)
的表示。使用 <|box_start|> 和 <|box_end|> Token 边界框文本。为了准确地将边界框与文本描述关联起来,引入了 <|object_ref_start|> 和 <|object_ref_end|> Token 表示边界框引用的内容,从而使模型能够有效解释和生成特定区域的精准描述。
Visual代理
。为了将Qwen2-VL开发为一个通用的VL-Agent,作者将各种 Agent 任务,如UI操作、机器人控制、游戏和导航,视为顺序决策问题,使Qwen2-VL能够通过多步动作执行完成任务。对于每个任务,作者首先定义一组允许的动作和关键词模式(下划线)用于函数调用。Qwen2-VL然后分析观察,进行推理和规划,执行选定的动作,并与环境交互以获取新的观察。这个周期会重复迭代,直到任务成功完成。通过集成各种工具并利用大型视觉语言模型(LVLMs)的视觉感知能力,Qwen2-VL能够迭代执行涉及实际世界视觉交互的 increasingly complex 任务。
2.3 多模态模型训练使用的基础设施
Qwen2-VL模型在 Alibaba Cloud
的PAI-Lingjun智能计算服务上进行了训练,该服务具有可扩展的计算能力、自动恢复和滞后检测功能。
Storage存储
。作者使用阿里云的超级高速CPFS(Cloud Parallel File Storage)构建了Qwen2-VL预训练和训练的存储系统。作者将文本数据和视觉数据存储解耦。作者仅在CPFS上存储文本数据,并使用mmap进行高效访问。对于视觉数据,作者使用阿里云的OSS(Object Storage Service)(阿里云,2024b)进行持久存储。在训练过程中,作者通过OSS的python-client并发地访问视觉数据,并调整并发和重试参数以避免达到QPS(每秒 Query 数)限制。作者还发现,视频数据解码是主要 Bottleneck ,尤其是对于长视频。在尝试了开源和内部软件失败后,作者选择了缓存解码技术。预训练权重保存了每个GPU的优化器和模型状态在CPFS上。
并行性
。作者使用3D并行性,结合数据并行性(DP),张量并行性(TP)和流水线并行性(PP)来扩展Qwen2-VL模型训练。作者还利用深度速度的零一冗余优化器来节省内存。顺序并行性(SP)与选择性预训练权重激活相结合,以减少内存使用。在启用TP训练时,作者总是将视觉编码器和大语言模型一起切分,但不会将视觉合并器切分,因为其参数相对较少。
作者发现TP训练会导致由于卷积算子的非确定性行为而产生不同的模型共享权重。作者通过离线减少共享权重来解决这个问题,从而避免了额外的全缩减通信步骤。这种方法对性能的影响很小。作者利用1F1B PP进行Qwen2-VL 72B训练。作者将视觉编码器、视觉 Adapter 以及几个LLM的解码层合并到同一阶段,并将剩余的解码层均匀切分。请注意,每个数据点的视觉和文本序列长度都是动态的。作者在启动1F1B过程之前广播动态序列长度,并使用批索引访问形状信息。作者还实现了交错1F1B PP,但发现它的速度比标准1F1B设置慢。
软件
。作者使用PyTorch版本2.1.2进行训练,并使用CUDA 11.8进行加速。此外,作者在ViT和语言模型(LLM)中使用Flash-Attention以实现高效的训练。作者还利用了Nvidia提供的融合运算符,如LayerNorm、RMSNorm和Adam。此外,作者在训练过程中利用了矩阵乘法中的通信和计算的重叠。