问答社区
开源版GPT-4o来了!在本地部署腾讯多模态大模型VITA
GPT-4o的卓越多模态能力和交互体验凸显了它们在实际应用中的必要性,然而开源模型很少在这两个领域都表现出色。在本文中,我们介绍了VITA,这是首个开源的多模态大型语言模型(MLLM),它擅长同时处理和分析视频、图像、文本和音频模态,并且同时具有先进的多模态交互体验。我们的工作通过三个关键特点与现有的开源MLLM区分开来:
1. 全面的多模态理解:VITA展示了强大的多语言、视觉和音频理解的基础能力,这在其在一系列单模态和多模态基准测试中的出色表现中得到了证明。
2. 非唤醒交互:VITA可以在不需要唤醒词或按钮的情况下被激活并响应环境中的用户音频问题。
3. 音频中断交互:VITA能够同时跟踪和实时过滤外部查询。这允许用户随时用新问题打断模型的生成,VITA将相应地响应新查询。
VITA的交互。传统的音频交互需要一个预定义的唤醒词,例如,每次提问时都要说“嗨!Siri~”,或者需要一个按钮来控制输入问题的音频(限制1)。当模型生成输出时,人机交互总是被阻塞,因为以前的系统只能顺序响应输入查询(限制2)。相比之下,一方面,与以前的音频、文本和视觉总是分开的方法不同,VITA支持端到端的这些模态。另一方面,VITA对多模态交互做出了两项贡献。非唤醒交互:VITA自动过滤背景噪音,如非查询的人声,从而消除了唤醒词和按钮的需求。音频中断交互:如果用户用另一个问题打断,生成过程会被暂停,模型会立即响应最新的查询。
VITA能够处理纯文本/音频形式的输入,以及与文本/音频结合的视频/图像。此外,采用了两项关键技术来提升多模态交互体验:
状态标记:我们为不同的查询输入设置不同状态标记。<1>对应于有效的查询音频,例如“世界上最大的动物是什么?”,我们期望模型给出回应。<2>对应于嘈杂的音频,例如环境中有人叫我去吃饭,我们期望模型不回应。<3>对应于查询文本,即用户以文本形式提出的问题。在训练阶段,我们尝试教会模型自动识别不同的输入查询。在部署阶段,通过我们可以实现非唤醒交互。
双工方案:我们进一步引入了双工方案来处理音频中断交互。两个模型同时运行,其中生成模型负责处理用户查询。当生成模型开始工作时,另一个模型监控环境。如果用户用另一个有效的音频查询打断,监控模型会聚合历史上下文来响应最新的查询,同时生成模型暂停并切换到监控模式,即两个模型交换身份。
利用先进的大型语言模型(LLMs),如GPTs、LLaMA、Alpaca、Vicuna和Mistral,多模态大型语言模型(MLLMs)展现出了增强的多模态能力,特别是通过端到端训练技术。最近的开源MLLMs,如Otter、mPLUG-Owl、LLaVA、Qwen-VL、Cambrian-1、Mini-Gemini、MiniCPM-V 2.5、DeepSeek-VL、SliME和Bunny,在解决多模态基础问题上取得了进展,例如视觉-语言对齐和指令遵循。
其中,一些代表性的开源模型,如InternLM-XComposer-2.5和InternVL-2,正在迅速进步,展现出强大的多模态理解能力,并在各种多模态基准测试中与专有模型紧密竞争。然而,与支持超过两种模态(如音频、图像和文本)的专有模型(如GPT-4o和Gemini-Pro 1.5)相比,大多数开源模型专注于图像-文本模态。此外,开源模型很少关注用户交互能力,使得这个领域相对未被探索。相比之下,提出的VITA不仅在感知四种模态(即视频、图像、文本和音频)的数据方面表现出色,而且在增强用户交互能力方面也取得了初步进展。通过VITA的全面开源,我们希望加速这一领域的发展。
VITA的训练流程。第一阶段LLM指令调优通过扩展词汇量大小并使用高质量的双语文本语料库对语言模型Mixtral 8×7B进行微调,从而实现对中文和英文的熟练掌握。第二阶段多模态对齐将各个编码器与LLM连接起来,以处理各种模态。通过积累大量的高质量多模态数据,我们将文本特征空间与视频、图像和音频的特征空间同步。最后一个阶段多模态指令调优允许模型遵循文本或音频指令来理解图像或视频。一个特别设计的状态标记用于区分输入查询的类型,从而促进后续的多模态人机交互。
一 LLM指令调优:Mixtral 8x7B1是一个具有稀疏专家混合(SMoE)架构的代表性大型语言模型(LLM)。它的性能在顶级开源LLM中名列前茅,这使得它成为我们工作的理想的起点。尽管如此,我们观察到官方的Mixtral模型在理解中文方面的能力有限。为了注入双语(中文和英文)理解能力,我们用中文扩展了基础模型的词汇量,将词汇量从32,000增加到51,747。这种扩展还可以在相同的文本下减少标记的数量,从而提高推理效率。随着词汇量的扩展,我们使用了500万个合成的双语语料库进行纯文本指令调优。
二 多模态对齐:在这个阶段,我们的目标是弥合文本和其他模态之间的表示差距,从而为多模态理解奠定基础
① Visual Modality:
视觉编码器:使用InternViT-300M-448px作为视觉编码器,它接受一个448×448像素的图像作为输入,在使用一个简单的两层MLP作为视觉连接器后生成256个标记。对于高分辨率图像输入,我们实施动态分块策略来捕捉局部细节。视频被视为图像的特殊情况。如果视频长度小于4秒,我们均匀采样4帧。如果视频长度在4到16秒之间,我们每秒采样一帧。对于超过16秒的视频,我们均匀采样16帧。为了防止引入过多的视觉标记,我们不对视频中的单个帧进行动态分块。
数据拼接:对于纯文本数据和图像数据,我们的目标是将上下文长度拼接到6K个标记,如图4所示(拼接数据的数量在表1的“拼接条目”列中指示)。另一方面,视频数据则不进行拼接。
拼接不同数据有两个好处:(1)它支持更长的上下文长度,允许从单一图像-问题交互扩展到多重图像-问题交互,从而实现更灵活的输入形式和扩展的上下文。(2)它提高了计算效率,因为视频帧通常包含大量的视觉标记。通过拼接图像-问题对,我们保持了训练批次中标记数量的平衡,从而提高了计算效率。此外,我们发现用拼接数据训练的模型与用原始数据训练的模型表现相当。
视觉对齐:只在视觉对齐阶段训练视觉连接器。表1总结了使用的训练数据,除了纯文本部分。此外,在这个阶段我们不使用音频问题。(1)对于通用图像描述任务,我们引入了ShareGPT4V中由GPT-4V生成的部分,以确保数据质量。我们还引入了AllavaCaption和 ShareGPT4o-Image3,并用现有MLLMs生成的中文图像描述来补充这些数据。(2)对于通用图像问答(QA)任务,我们最初收集了三个数据集:LLaVA-Mixture-sample、Lvis-Instruct和 ScienceQA。然后我们使用现有的MLLMs生成额外的21.8K中文QA数据。此外,我们从LLaVA-150K 中移除了标题子集,并将其余部分翻译成中文。(3)对于OCR和图表任务,我们包括Anyword-3M 、ICDAR2019-LSVT4、ICDAR2017-RCTW5、Open-Chart(ChartQA、DVQA、InfoVQA、Pew和 OpenCQA的集合),以及一些由现有MLLMs从其他开源数据中生成的合成数据。对于Anyword-3M,我们选择的答案对应文本长度在20到50之间,问题要求识别图像中的文本。
对于ICDAR2019-LSVT、ICDAR2017-RCTW和Open-Chart,我们使用现有的MLLMs生成详细的描述和QA对。(4)对于通用视频描述,我们使用ShareGemini数据集。(5)对于通用视频QA,我们使用现有的MLLMs重新标记来自Video-ChatGPT和VideoChat2的开源数据。我们从500万纯文本数据中抽取80万条条目,以保持LLM的文本理解能力。它用于多模态指令调优,而不是视觉对齐,因为后者的LLM参数是冻结的。
音频编码器:输入的音频最初通过Mel滤波器组块进行处理。这个组块将音频信号分解为Mel频率尺度上的各个频率带,模仿人类对声音的非线性感知。随后,我们使用4层CNN下采样层,然后是24层的变换器(transformer),总共包含341M个参数,来处理输入特征。我们使用一个简单的两层MLP作为音频-文本模态连接器。最终,每2秒的音频输入被编码成25个标记。
音频对齐:对于对齐任务之一,我们选择了自动语音识别(ASR)。我们的数据集包括Wenetspeech,它包含了超过10,000小时的多领域语音识别数据,主要关注中文任务。同样,Gigaspeech也包含了10,000小时的高质量音频数据,大部分数据针对英文语音识别任务。另一项任务是音频描述,它依赖于Wavcaps的AudioSet SL子集。这个数据集包含了400K个音频剪辑及其对应的音频描述。在对齐过程中,音频编码器和连接器都进行了训练。
三 多模态指令调优:在此阶段,我们对模型执行指令调整,以增强其指令跟随能力,无论是文本还是音频
数据构建:指令调优阶段的数据源与表1中的对齐阶段相同,我们进行了以下改进:(1)大约一半的问题随机(约一半)替换为它们的音频版本,使用TTS技术,如GPT-SoVITS6,以增强模型对音频查询的理解及其指令遵循能力。音频问题和文本问题的数量可以在表1中找到。(2)设置不同的系统提示以避免不同类型数据之间的冲突,如表2所列。例如,一些问题可以根据视觉信息或基于模型自身的知识来回答,这可能导致冲突。此外,由于图像数据已经被分块处理,类似于多个视频帧,这可能会混淆模型。系统提示明确区分不同的数据类型,使其更直观易懂。
嘈杂音频构建:在人机交互中,并非所有音频输入都需要响应,这些统称为嘈杂音频。一个具有良好交互能力系统应该能够主动识别音频的类型,并选择性地执行后续输出。为此,我们需要为模型构建各种嘈杂音频样本以识别。具体来说,我们从现有的多模态和单模态QA数据的答案中随机抽取474K个句子。这些负面样本文本,侧重于与查询无关且不需要用户响应的内容,其长度分布与正面问题长度分布一致。然后,我们使用TTS工具将这些句子转换为音频。嘈杂音频样本的构建使模型能够识别不需要响应的音频输入,这有利于实现非唤醒交互。具体的训练策略将在下一节中详细说明。
训练过程:
根据上节构建的QA对,模型需要区分三种类型的查询:
- 查询音频:问题由音频发起。
- 嘈杂音频:输入是音频,但不包含问题。
- 查询文本:问题由文本发起。
基于这些查询类型,我们设计了三个状态标记<1>、<2>和<3>。在训练阶段,我们在答案的开头插入相应的状态标记,允许模型灵活处理不同的交互行为。具体来说:
- 状态标记<1>表示问题输入是查询音频。在这种情况下,模型的输出需要以文本形式呈现给用户,或通过TTS工具转换为语音。
- 状态标记<2>表示问题输入是嘈杂音频。模型应该输出一个EOS标记作为终结符。然而,我们观察到在训练期间突然终止输出会显著降低性能。因此,我们将嘈杂音频对应的文本发送到LLM,并使用其输出文本作为训练目标。在推理过程中,<2>作为另一个特殊的EOS标记。
- 状态标记<3>表示纯文本的问题,用于在训练集中区分上述两种查询。
在训练期间,视觉和音频编码器都被冻结,连接器与Mixtral 8×7B一起训练。
Development with Duplex Pipeline:在本节中,我们主要讨论如何实现两种交互功能,即非唤醒交互和音频中断交互
大模型工程开始部署:
首先硬件资源要求:4 x H20(两张也可以,但是不能部署双工实时交互)其实部署还是很方便的,只是遇到一些问题,着重介绍下问题如何解决。
1. 拉取代码:https://github.com/VITA-MLLM/VITA
git clone https://github.com/VITA-MLLM/VITAcd VITAconda create -n vita python=3.10 -yconda activate vitapip install --upgrade pippip install -r requirements.txtpip install flash-attn --no-build-isolation
2. 模型权重下载,大概总共92GB:https://huggingface.co/VITA-MLLM/VITAhttps://huggingface.co/OpenGVLab/InternViT-300M-448px
3. 运行官方例子video_audio_demo.py 需要改动如下:
4. 继续运行下面命令:
conda create -n vita_demo python==3.10
conda activate vita_demo
pip install -r web_demo/web_demo_requirements.txt
# Backup a new weight file
cp -r VITA_ckpt/ demo_VITA_ckpt/
cd ./web_demo/vllm_tools
cp -rf model_weight_file/* ../../demo_VITA_ckpt/
cp -rf vllm_file/* your_anaconda/envs/vita_demo/lib/python3.10/site-packages/vllm/model_executor/models/
其中:
torchvision==0.19.0
vllm==0.5.5
vllm-flash-attn==2.6.1
# 这里大概需要两张80GB的显卡
python -m web_demo.web_ability_demo demo_VITA_ckpt/
# 这里大概需要四张80GB的显卡,没资源只能放弃
python -m web_demo.web_interactive_demo