大数据+AI联合场景深度技术解读,涵盖大语言模型、多模态模型训练和应用数据处理,以及PAI平台上的端到端最佳实践。
一、数据对大模型训练和应用的重要性
AI的发展离不开三个要素,算法、算力和数据。在大模型时代,这三个要素的重要性分别是怎么样的。
1.算法
算法包括包含两个层次的含义,一个是模型结构,第二个是训练的流程。在模型结构方面,当前的这些大模型,或者GPT这一类的大模型其实在结构上是高度高度趋同的,其实就是GP结构的架构。模型的差别无非是在增加模型的深度和宽度,可能会有些小的差别。比如说在attention计算或者说其他计算,以及词表长度上面略微有些差别。有些新的架构可能刚出来,还没推广开来,在算法的模型结构上其实也没有大的变化,只是把一些整个机算给他分拆到不同的机器上去。
在训练训练过程上也是大同小异的,有三个主要的流程,一个是预训练,第二个是监督微调,第三个偏好对齐。在偏好对齐这方面有一些不同的算法。比如最近的gpu one出来以后,可能会有些新的训练的范式,比如说self play的这种强化学习,但这种方这种方法可能还有待大家去做一些进一步的探索,目前算法其实是高度高度趋同的。
2. 算力
AI的芯片在无论是在存储还是在计算算力,计算或是在带宽上面,其实都发展的非常的快。当前已经可以支持在数万张卡上去做一个很大规模这种分布式计算,像刚出来的拉玛3.1,已经支持在1.6万张这样的规模的卡上,去做大规模的分布式计算。如果在云平台上用,比如阿里云,云平台还会进一步的提供一些像容错以及弹性资源的辅助的能力,使得训练在万卡集群上能够达到90%以上的GPU 有效使用时间,所以从模型的性能这个角度,算力不会成为一个瓶颈。前提是足够有钱。
在算法趋同,算力也不会成为瓶颈的条件下,那这些做算法研究或者说大模型开发的团队主要的工作聚焦在数据。在数据的采集和数据的标注或者数据的质量控制上面,以及数据的不同的配比,在探索这些方向。大模型性能和计算量参数规模和数据集的大小,生成正相关的关系。前面两者和算法相关,数据集的大小是跟数据相关的,最近大模型的发展,和拉玛系列开源的大模型的代表,其实也证明了这样一个趋势。
3.数据
(1)大模型到底需要什么样的数据,其实前面我们提到当前的训练过程有三个阶段。不同阶段其实对数据的要求不太一样。在训练阶段需要的是世界知识,学到海量知识,需要的数据可分为两大类,一类是精选的数据,像书籍、百科代码,还有一些专业问答,这些数据里面数据质量很高,但是他的扩展性较差,另一类是海量的互联网数据,这类数据质量不是很好,但是它的可扩展性很强,每天都会在产生非常多的互联网数据。主要需要做处理的就是互联网数据。
另外还有一些领域知识,这些知识可以在预训练阶段注入,也可以在SFT 或在后面挂载一个外部知识库。
(2)对于有监督微调,一般来说是需要非常高质量的问答队。通常需要专家去做人工标注。但是现在有非常多借助大模型生产能力去自动做数据合成的方法。
(3)第三类就是偏好对齐的这部分数据。那这部分数据对标准要求更高,不光是要标注问题的答案,还需要标注不同答案的好坏。
(4)数据的处理首先看预训练的数据。重点是互联网数据。这部分数据处理一般有几个主要的环节,一个是质量控制,第二个是去重,第三是安全过滤,最后是标准化。质量控制如果按照处理的顺序的,一般会先做URL过滤,通常会使用一些人工规则方式,过滤完以后从过滤出来的 URL 中再去提取网页的文本数据,这个过程当中可能会涉及无用的一些标题目录以及广告,甚至大模型训练的时候可能还需要把一些图像数据图片或者不需要一些表格数据过滤掉,做内部过滤的时候需要对提取出来的网页文本做进一步的质量过滤,那这部分主要是通过一些规则,一些特殊特殊字符根据它的占比长度技术还有语种去过滤到这部分数据,最后还要做数据的质量评估。这部分可通过一些打分模型来评估剩下来的文本质量。
(5)第二步是去重,大语言模型训练过程中如果有大量重复数据,一方面可能会使得模型会过合到这些数据上,另一方面也会浪费大量资源,去重是必不可少的,去重从力度的角度可以分成从 url 级别去重,文章级别的去重以及句子级别的去重,url去重通过一些黑名单过滤去掉一些不合规的网站,在文章里的去重通常会使用一些模糊去重的算法,在句子级别通常做一些精确去重,如果有连续一段文字跟前面是重复的就把它去掉。
(6)做完去重以后是安全过滤。安全过滤也是属于质量控制的一部分,把它单独拎出来,是想强调一下安全的重要性。这里面会把一些敏感数据、用户一些隐私数据以及一些有毒有害的不合规数据去去掉。最后是标准化,标准化就是把过滤完的数据转换成模型可读的格式。在SFT阶段人工标注的成本会比较多。这部分可能有很多工作会用大模型来完成数据的合成,比如指令的扩展、指令的优化,以及基于一些无监督的文本去产生一些问答,以及对这种跨模态的文本去做一个操作。在这部分合成做完以后,也要去做数据的过滤和需求。这部分跟前面训练数据的操作是类似的。
二、PAI 大模型数据处理套件
在整个的大模型的相关的数据处理,其实它体现在操作上非常复杂,同时也可能需要很多的专家知识,另外在效率上也是存在很大的挑战,为了解决这些问题的话,在 pai 平台上提供了面向大模型的数据处理套件。大概分成四层,其但是最核心的是白色三层,那里面最核心的算子层,是叫datajuicer 的基于Python的一站式数据处理框架。这个是我们跟通信实验室一起合作的开源框架。
他主要的工作是把常用的数据处理算子抽象出来,并且分装成几大类别,包括数据的转换,然后过滤去重以及数据格式的转换。在这个算法库里面也提供了算子聚合的功能,用户可以用算子聚合,把不同的基础算子组合成整个的处理流程,很方便的完成一整套的数据处理过程。
往下是引擎层,引擎层这个主要的目的是这些算子能够无缝的跑在阿里云的引擎,阿里云平台上,包括了一个是存储,一个是计算引擎,还有一个分布式。在存储方面,支持了云原生的对象存储oss,pad d LC计算引擎以及基于开源的Ray 的分布式。另一方面,也支持了像compute数据仓和数据库云产品,以及基于这些产品上之上的分布式框架,再往上是产品层。
为了让云产品的用户能够更方便的使用这这些数据处理的能力,把它在pad SDK以及designer 的这些产品里面进行了封装。在这些产品基础上,用户可以很方便的针对自己的场景,自己的领域,实现一个端到端的数据处理的功能。
1.datejuicer
接下来根据上面三层详细的介绍。首先是 datejuicer,基于Python的一站式的大模型处理框架,面向不同开发能力的用户,做了几个不同层次的封装,最底下层次是面向开发能力比较强的这种用户,提供了丰富基础的数据处理,算子和算子聚合的功能。为了提升用户的使用体验,也提供了一些辅助性的开发工具,比如算子分析,以及质量分类,采样器格式化等这些这些辅助功能。
面向低代码的用户,提供了用配置文件来一键式的拉起完整的数据处理流程的配置方式,用户可以只改配置文件里面的一些参数,处理一个复杂的处理流程,再往上基于这些配置文件,封装好了面向不同领域不同场景的模板。用户不需要做任何修改可以直接根据自己的特定场景,找到符合他应用的这种场景的模板,可以用一条命令行运行。从这里可以看出,整个设计主要是兼顾了全面性、应用性和高性能几个方面。
处理数据算子,数量上是处理算子是支持了一百家,相关工具有20家,在场景方面,支持了一些通用场景,比如代码,数学金融的特定的文件的处理方式。在模态方面也支持了除文本以外的图像、视频、音频以及跨模态的这种数据处理。
在应用性方面的例子,把各种操作就把它参数化,也提供了很丰富的使用事例,比如业界常见的或者 pai 数据集,其实也提供了菜谱。性能方面呢,ray 框架是面向大数据和AI开发一体化的 Python系统框架,只要通过一个命令行就可以很方便的拉起一个RAID集群,同时可以利用RAY 的算子的监控能力,去监控每个集群当中每个节点的使用情况。在这基础上还做了进一步的优化。
比如根据内存自适应的去做数据切片,以及分片读取的能力。主要是通过这个希望通过这种方式来避免,就是 ray 本身自有一些内存的限制。除此之外还支持了自动的去配置分布式节点,或者自动化的配置能力。用户不需要关注需要用多少个节点或者需要用多少资源,会根据数据量去自动适配。另外,也支持了根据算子的特性去做自动的模式设备。那通过这种方式,用户用 ray 去跑任务,可以很方便的很稳定的跑在集群规模上。前面主要是一般的数据处理功能,还提升了很多数据合成的能力。
2.数据合成
数据合成也是非常重要的一种辅助高度的方式,那数据合成的话,一般也有两类合成方式,一种是用户能提供少量的种子数据,比如几百条高质量的问答,可以用大模型去对这些问答做指定的扩展和指定优化,第二类是用户根本就没有问答,可能只有一些文档,比如产品的说明文档,使用文档,对这种数据去做合成一般是从里面去自动的提取问答,在这基础上再去做水平的拓展和优化。
第一种方式有三个主要的问题,一个就是我们如何保证合成数据的多样性,这种多样性对后续的模型的微调,最后微调出来的模型的淡化性,是非常重要的,第二个是保证模型的质量,通过数据的合成数据的质量来保证,最后微调出来的模型能够解决灾难性遗忘问题,对第三个成本,一般来说就是对这种数据合成,都需要通过非常复杂的prom输入给大模型,输出和输入的这种新款式都会很强,对高大模型服务来说,成本还是还是很可观的,为了解决这些问题,采取的策略是通过蒸馏的方式去做一个数据合成专精方向的小模型。
3.蒸馏整体思路
首先有大模型作为教师模型,可能是千分72B,或者是GP4这样地缘的大模型啊,需要有小的学生模型来学习从大模型当中抽取出来的知识,从而使得他在这个专精领域的能力能够超过大模型。那对大模型的知识抽取,其实方式大概是有些知识,通过精心设计的promt,从里面去去指定专精领域,抽取出来知识喂给小模型。
喂给小模型的方式也有两种,一种是直接的通过大模型去产生扩展的数据集去训练小模型。第二个是把大模型的一些中间结果,根据结果去引导小模型尽量逼近它的分布,其实在训练当中这两种方式其实都有做相应的结合。
为了解决上面前面提到的一个泛化性质量性的问题,分别在种子数据当中去做了基于显示的指定任务的总采样,第二个是对南力去做了总采样,通过这两种方式把种子数据做得质量更高,最终产出了两个模型,一个是指令扩展模型,一个是指令优化模型,这是一些结果的一些展示,这两类模型都是基于千分二的 1.5b和 7b两个版本去做的,用两个模型分别去做指令扩展和指令优化,把合成出来的数据去训练拉玛27b效果,最后发现训练通过数据增广训练出来的 拉玛27b在效果上不但超过了同量级模型,还超过了 拉玛23b 的效果,这可以证明合成的方案的正确性。
4.基于文档的 QA 提取:pai-doc2qa系列模型
对于有些模型,我们可以做指令扩展和指令增长。对于5000吨的数据采用方法是从里面去训练一个小模型,去自动的学习如何从文档提取相关的QA。主要方法在第一步会去查取公开的大量的这种公开数据,去微调主流的开源器模型,用户在自己的场景使用,可以直接使用这些模型提取自己的QA,也可以进一步的在提供的模型的基础上微调,去做自己领域的提取QA 的模型。
5.多模态数据合成:视频生成
在除了大语言模型以外,在多模态,特别是视频生成领域,数据合成也是非常重要的。主要体现在训练阶段,需要高质量的这种文本和视频,文本需要尽可能的详细的描述视频的内容以及细节。同时也希望能够给视频提出更加优质的详细的内容。在推理阶段,希望通过数据合成去优化用户的 promt更加详细,细节更丰富,这样产生的视频效果会更好。
面向这种场景,也训练了自研的视频生成。模型结构的就是一个比较常见的结构,但是我们把它做成多任务的学习方式,主要有三类任务,第一个任务是通过视频去生成长的 caption。主要是做视频生成的数据达标的。第二个就是一个视频加上一个短的 caption去生成一个长的 caption。这个任务主要是用于训练任务的增强。第三个是直接通过一个短的caption扩展成一个长的 caption,主要是用于在推理阶段的优化,通过这种方式训练出来的模型,在一些标准的评估指标上已经达到了较差的水平。
6.相关套件的产品化
上面主要提到数据合成方式,数据的过滤合成方式,都把它集成到 datejuicer 里,接下来在相应的产品层面,进一步的做了一些用性和性能方面的一些优化,在性能方面,其实是基于阿里云自研的弹性计算框架,在这个基础上去做的一个开发接口,它兼容了常用的开源的学习框架的生态。底下可以直接复用弹性计算能力,以及去直接读海量数据。在这个基础上,可以进一步的 pai 的AI训练的这些能力做整合,形成data和AI一体化的功能。
7.示例:llm大预言模型数据处理-aipaca-cot
designer 的可视化建模画板的使用示例中。左边是基于封装好的数据处理的算子,中间是一个大的画板。通过简单的拖拽方式,就可以把这些算子在这画板上,形成完整的数据处理流程。这是数据集的典型处理流程。
右边是一个配置框。在这里面用户可以指定自己使用的资源控制自己,成本也可以,也可以控制自己,也可以定制自己的运行时长。可能有用户会问,不知道怎么去组建开发流程,把常见的这些数据处理的领域和场景,或者说典型的数据集的处理过程,都把它封装成了一些模板,用户可以通过这些模板创建完整的 paiplan。数据处理和大模型训练和推理的组合。其实会发现要把整个的处理流程组合好,点一下运行,就可以去干别的。过一段时间回来看,会发现数据处理已经处理完了,而且模型都训练好了。
三、总结和展望
目前这些数据套件和一些用户已经有比较深入的合作。在未来,有几个方面的技术工作会继续扩展下去,在丰富度、应用型和高性能,组建的核心能力上面,会进一步的去做扩展。比如在分布的上面,会扩展像动模态,就是图文视频以及是音频等多个领域的,或者多模态的处理能力。在应用性上面,会进一步的优化组件的用性,去支持比如算子组合的功能。
在性能方面,会进一步的去优化分布式训练效率降低延迟,降低用户使用成本。辅助工具方面,会在可视化和灵活可定制方面支持,开发数据处理的可视化工具,以及支持用户通过代码去自定义自己的定制的能力。还会进一步的去扩展不同行业,不同场景的数据处理的解决方案,帮用户一键式的解决数据挑战。