今天是2025年01月14日,星期二,北京,天气晴。
我们先看关于大模型训练框架的事情,目前这块有很多成熟的框架了,如下(收录自https://github.com/WangRongsheng/awesome-LLM-resourses):
而在开源大模型的后训练(Post-Train)框架中,LLaMA-Factory无疑是最受欢迎的工具之一。截至目前,LLaMA-Factory在GitHub上的star数已接近38k,反映了其在开发者社区中的广泛认可,也证明了其在大模型后训练上的强大能力 。然而,随着大模型技术的快速发展,尤其是OpenAI的o1、o3系列模型的发布以及多模态大模型的兴起,大模型需要处理的token数(输入+输出的总token数)急剧增加,长序列处理能力的重要性愈发凸显。
老刘有位专门做强化的朋友邹昊晟 (清华的本科和清华CS PhD,现在在360做长文本和强化学习等工作)。最近他做了一个比较有趣的工作,针对LLaMA-Factory在360-LLaMA-Factory之前尚不支持序列并行的问题 ,做了360-LLaMA-Factory (https://github.com/Qihoo360/360-LLaMA-Factory),给LLaMA-Factory加了序列并行功能,用来训超长文本非常方便,SFT和DPO都支持,**在原来用LLaMA-Factory的基础上加一个sequence\_parallel\_size参数就行了,已收获了100多个star** 。
对于这个项目的必要性和优势,我觉得我们专门来说说,了解其中的逻辑,是有好处的,写出来,供大家参考。
另外,一个,我们来简单看看多模态RAG的一个工作VideoRAG,针对视频模态的,思路很简单,也看看其中集成思路。
专题化,体系化,会有更多深度思考。大家一起加油。
一、可训超长文本的LLaMA-Factory(360-LLaMA-Factory)
我们做一个框架,最好的目标往往不是为了重复造轮子,而是真切地想解决一些特定的问题,并且推进生产力 。所以,当我们翻看背后的研发逻辑时,会有不一样的感觉。
先说结论,想简单快速训练长序列数据的SFT或DPO,可以试试360-LLaMA-Factory(https://github.com/Qihoo360/360-LLaMA-Factory) 。
1、长序列处理的挑战与序列并行是很必要的
在大模型的应用场景中,长序列处理一直是一个棘手的问题。随着模型规模的扩大和任务复杂度的提升,输入和输出序列的长度不断增加,传统的单GPU数据并行的计算模式已经无法满足需求。尤其是在处理超长序列时,显存溢出成为主要瓶颈。为了解决这一问题,序列并行技术应运而生。
序列并行的核心思想是将一条长序列均匀切分到多张GPU上分别计算,仅在需要计算attention时进行通信。这种设计使得理论上增加GPU数量即可处理更长的序列,而不会出现显存溢出的问题。
然而,在360-LLaMA-Factory推出之前,LLaMA-Factory并不支持序列并行。尽管LLaMA-Factory在其他方面表现出色,但在处理超长序列任务时,其局限性逐渐显现。序列并行作为长序列问题的通解,能够有效解决显存不足和计算效率低下的问题,因此,支持序列并行成为了LLaMA-Factory进一步发展的关键。
2、360-LLaMA-Factory:无缝支持序列并行的LLaMA-Factory版本
作为无缝支持序列并行的LLaMA-Factory版本,360-LLaMA-Factory不仅继承了LLaMA-Factory原有的强大功能,还通过引入序列并行技术,显著提升了其在长序列任务中的表现。用户只需在训练过程中额外指定 sequence_parallel_size
参数,即可轻松启用序列并行功能,无需进行复杂的配置或代码修改。
图1:项目主页https://github.com/Qihoo360/360-LLaMA-Factory
从项目的README来看,作者们对比了SFT和DPO训练,相同数据下开vs不开训练并行,loss曲线几乎一致,严格确保了正确性。而且已经可以看到在LLaMA-Factory主仓库的pull request流程中。
作者们也压测了典型场景下可训练的最大长度。全参微调,只开zero3-offload和gradient checkpointing,SFT的最大长度至少可以达到210k (7B) / 128k (72B) ,DPO则是 DPO 84k (7B) / 46k (72B)。
表1:Qwen2.5多尺寸SFT长度压测
表2:Qwen2.5多尺寸DPO长度压测
3、360-LLaMA-Factory的优势是什么?
表3:部分支持序列并行的开源后训练框架对比 与其他部分支持序列并行的开源后训练框架相比,360-LLaMA-Factory的优势主要体现在以下几个方面:
一个是简单易用 ,360-LLaMA-Factory继承了LLaMA-Factory的易用性,用户只需准备好数据和指定参数,即可快速启动训练。
一个是庞大的用户群体和完善的社区支持 ,LLaMA-Factory本身拥有庞大的用户群体和活跃的开发者社区,这意味着360-LLaMA-Factory在潜在bug的修复和功能更新方面具有显著优势。用户在使用过程中遇到问题时,可以快速获得社区的帮助和支持。
一个是完整的后训练流程支持 ,360-LLaMA-Factory不仅支持序列并行,还对整个后训练流程(包括SFT和DPO)提供了完整的支持。相比之下,其他大部分框架在后训练流程的支持上不够完整、更新维护不及时或存在训练进度条未考虑梯度累积等问题。
此外,与OpenRLHF的对比 ,OpenRLHF是另一个较为优秀的支持序列并行的开源后训练框架,其主要优势在于继承依赖少,代码结构干净,适合深度用户进行定制化二次开发。然而,OpenRLHF在各种后训练的功能支持上相对LLaMA-Factory较少。对于大多数用户而言,360-LLaMA-Factory的简单易用和功能完整性更具吸引力。两者各自适合不同的使用场景。
二、多模态RAG进展之VideoRAG实现思路
我们来继续关注多模态RAG进展,这个我们在专题中已经有讲过多个了。
而说到多模态,就一定会说到视频模态,视频作为一种丰富的多模态知识源,能够更有效地表示事件、过程和上下文细节。现有的RAG方法在视频数据的利用上存在不足,通常将视频转换为文本描述或预设相关视频,未能充分利用视频的多模态特性 。
从方案上来说,一些方法专注于从预先选定的视频中提取与查询相关的帧,并基于这些帧生成答案,这在受控场景中很有用;或者,将其转换为文本表示(如字幕或标题)来规避处理视频数据的复杂性;
可以快速过一个工作,《VideoRAG: Retrieval-Augmented Generation over Video Corpus》(https://arxiv.org/pdf/2501.05874)
这个工作思路在于,通过动态检索与查询相关的视频,并在生成过程中结合视频的视觉和文本信息,以提升生成答案的质量 。
其中,视频检索模块通过计算查询与视频之间的相似性来识别相关视频。
首先,将视频(包括图像帧和字幕) 和查询输入到视频模型(LVLM)中,获取它们的表示。
这里的一个根本前提是视频语言模型(LVLMs) ,其实决定因素,LVLMs在LLMs广泛的语言理解能力之上,旨在处理和整合视频内容的特征,包括时间、空间和多媒体信息,在统一的标记处理框架内。这里可以顺便看些东西。
形式上,将一个视频V定义为一连串的图像帧:V=[v1,v2,...,vn]及其相关文本数据(如字幕或任何其他特定于视频的查询等文本信息)t定义为一连串的标记:t=[t1,t2,...,tm]。
典型的LVLM,通过使用两个专门的组件来实现这些多模态输入的联合处理,即一个视觉编码器和一个文本编码器。视觉编码器处理视频帧序列V(可能跨越多个视频)以提取时间和空间特征,从而产生一系列视觉特征嵌入(或视觉标记):Fvisual=VisionEncoder(V)。
同时,文本编码器处理给定的文本信息t以生成相应的特征嵌入:Ftext=TextEncoder(t)。然后,获取视频表示的整体过程,捕捉视觉和文本特征的目标。
然后,基于表示级别的相似性(如余弦相似性)计算相关性,并检索出最相关的视频。对于检索,确保文本特征和视频特征(通过其专用编码器获得)之间精确对齐至关重要,以确保检索到的视频与查询上下文相关,这个很重要 。这里用到的是InternVideo2(https://github.com/OpenGVLab/InternVideo)。
注意这里,检索时对每个视频统一采样4帧,而在生成时则采样32帧(如果视频时长短于32秒,则以1帧每秒的速度采样全部帧)。
具体操作是将每个检索到的视频的帧和字幕拼接起来,然后将所有视频的多模态对拼接在一起,并附加用户查询,作为LVLM的输入 。通过这种方式,模型可以联合处理视觉、文本和查询信息,生成答案。
在检索到相关视频后,将这些视频的视觉和文本信息整合到生成过程中,这里用到的是LLaVA-Video-7B(https://github.com/LLaVA-VL/LLaVA-NeXT) ;
此外,还有个trick,通过使用Whisper (https://github.com/openai/whisper)生成辅助文本,以弥补视频中缺乏字幕的情况。
当然,也可以衍生出一些变体,VIDEORAG-T ,仅将从检索到的视频中获得的字幕(或辅助文本数据)作为生成答案的上下文;VIDEORAGV 使用视频帧作为上下文,为回应提供视觉基础;VIDEORAG-VT 联合使用视频帧和文本字幕进行生成。
总结
本文主要介绍了两个工作,一个是可训超长文本的LLaMA-Factory(360-LLaMA-Factory),一个是多模态RAG进展之VideoRAG实现思路,前者感兴趣的可以去用一用。纸上得来终觉浅,绝知此事要躬行;多实践,才能真掌握 。
参考文献
1、https://github.com/Qihoo360/360-LLaMA-Factory
2、https://arxiv.org/pdf/2501.05874
关于我们
老刘,NLP开源爱好者与践行者,主页:https://liuhuanyong.github.io。
对大模型&知识图谱&RAG&文档理解感兴趣,并对每日早报、老刘说NLP历史线上分享、心得交流等感兴趣的,欢迎加入社区,社区持续纳新。
加入会员方式:关注公众号,在后台菜单栏中点击会员社区->会员入群加入