作者:夕陌,临在,熊兮,道辕,得水,施晨
随着人工智能技术的快速发展,大模型在各个领域的应用日益广泛。大模型能够更好地模拟人类的认知能力,大幅提升机器在复杂任务上的表现。然而,不断增长的模型参数规模使得数据集的复杂度也不断上升,数据质量更直接影响模型的准确性和可靠性。本文叙述的 Big Data for AI 最佳实践,基于阿里云人工智能平台PAI、MaxCompute自研分布式计算框架MaxFrame、Data-Juicer等产品和工具,实现了大模型数据采集、清洗、增强及合成大模型数据的全链路,解决企业级大模型开发应用场景的数据处理难题。
Data-Juicer是通义实验室和PAI共建的开源数据处理工具。它提供了丰富的数据处理算子、高效并行化的数据处理流水线,支持数据预处理、可视化、数据评估等各项能力。还为不同背景的用户提供了开箱即用的组件和丰富的数据配方。此外,Data-Juicer与MLLM和分布式计算生态系统无缝集成,以实现高效且可扩展的数据处理。
MaxFrame是MaxCompute自研的分布式计算框架,为MaxCompute提供了一套完整的Python开发生态,为大规模数据分析和机器学习任务提供了极佳的灵活性。数据科学家和数据工程师可利用MaxCompute的海量计算资源对数据进行大规模处理分析、可视化探索、科学计算,以及传统ML开发等工作。
阿里云人工智能平台PAI是是面向开发者和企业的机器学习/深度学习工程平台,提供AI开发全链路服务,为用户提供低门槛、高性能的云原生AI工程化能力。PAI的数据处理工具提供了一套全方位、覆盖多领域的解决方案。充分利用深度学习集群(DLC)和MaxCompute的分布式能力和资源,结合Ray、UDF和MaxFrame等底层框架,基于DataJuicer丰富的算子,为用户提供了开箱即用的组件和丰富的数据配方,能够高效且灵活地处理复杂数据任务,使得快速上手和简化流程成为可能。
PAI大模型数据处理套件架构概览:
自底向上:
- 云资源:资源层是整个架构的基础,PAI大模型数据处理套件同时支持DLC(深度学习集群)和MaxCompute集群,为上层应用提供强大的计算和存储能力。
- 引擎框架:
- DLC集群:支持Ray自动化部署,可以进行大规模数据的并行处理,提升数据处理效率。
- MaxCompute集群:利用UDF算子和MaxFrame框架,依托MaxCompute的强大计算和存储能力,满足特定业务需求。
- 算子底座:DataJuicer提供了丰富的数据处理算子和高效的并行处理流水线,提供了全面的数据处理能力。我们以DataJuicer作为基石,进行算子改造,适配DLC和MaxCompute的分布式能力,进一步加速处理效率。
- 产品:PAI-Designer 提供了用户友好的工具和界面,用户可以自定义工作流对数据安全、数据脱敏、数据增强等组件进行任意编排。我们同时与百炼合作,这些组件也作为百炼数据处理的底层工具为用户提供数据处理服务。
- 解决方案:利用PAI的产品工具集,提供涵盖多个应用场景的解决方案,如文生图/视频、图片/视频理解、CT、SFT和RAG等。旨在简化整个数据处理流程。帮助用户快速上手。每个解决方案都是为特定领域的应用需求而设计的,用户可以根据自身需求选择适合的解决方案,满足多样化的业务需求。
Data-Juicer
Data-Juicer 是一个由通义实验室主导,PAI深度参与共建的一站式开源数据处理系统,旨在为多模态大语言模型(MLLMs)提供更高质量、更丰富、更易“消化”的数据,提供超过 100 个内置多功能算子和可插拔工具。通过模块化协同、灵活组合和弹性扩展,Data-Juicer 可以应对 MLLM 数据处理的异质需求,包括但不限于分析、清洗、合成和混合。Data-Juicer 为各种背景的用户优化了可用性,包括提供开箱即用的底层组件,支持数据菜谱可配置,以及为 MLLM 预训练和后调优预置丰富的、效果证明过的数据菜谱。经过了多方面的系统性能优化, Data-Juicer 与 MLLM 和分布式计算的大量生态基建无缝集成,以支持高效且可规模化扩展的大模型数据处理。
此外, Data-Juicer 提供了一个定制化的中间层套件,“沙盒实验室”,来支持便捷的多模态大模型 “数据-模型协同开发”。它提供了灵活的实验平台,在 Data-Juicer 已有的数据处理能力之上,沙盒实验室持续集成多模态大模型的先进开源基建,提供数据和模型多维度的反馈循环。通过该套件,研发人员能在端到端工作流、典型开发行为、底层开发能力之间便捷组合,快速迭代小规模洞察,提高数据处理和模型开发的可衡量性和科学实践性,以便在更大规模场景下“有的放矢”。通过该实验室沉淀的数据开发工作流和实践洞察,也将持续集成到PAI中,帮助提升用户体验。
相关参考
- 开源链接:https://github.com/modelscope/data-juicer
- (SIGMOD'24) "Data-Juicer: A One-Stop Data Processing System for Large Language Models"
- (V-Bench 文生视频 Leaderboard 第一名) "Data-Juicer Sandbox: A Comprehensive Suite for Multimodal Data-Model Co-development"
MaxCompute - MaxFrame
MaxFrame是有阿里云计算平台事业部MaxCompute团队研发的大数据处理框架,支持用户直接引用NumPy、SciPy、Matplotlib等三方库进行科学计算、数据分析、可视化等操作,并提供了兼容Pandas接口的分布式数据处理算子。使用MaxFrame框架编写的作业可直连存储在MaxCompute中的数据,利用MaxCompute的海量弹性计算资源对数据进行大规模分布式处理。传统基于Pandas编写的数据处理脚本经过一定的适配改写即可使用MaxFrame框架在MaxCompute中分布式运行,大幅提高了数据处理的规模及计算效率。
MaxFrame 特点优势:
- 更熟悉的开发习惯MaxFrame提供Python编程接口,兼容Pandas算子,且算子提交至MaxCompute自动分布式执行,不再受本地资源大小限制。
- 更高效的数据处理能力MaxFrame直接在MaxCompute集群中进行数据分布式计算,运行时无需将数据拉取至本地处理,消除了不必要的本地数据传输,提高作业执行效率。
- 更便捷的开发体验MaxFrame已与MaxCompute Notebook、DataWorks集成,提供开箱即用的交互式开发环境及离线调度能力;MaxFrame支持在代码开发中直接引用MaxCompute内置镜像(Pandas、Numpy、XGBoost等)及用户自定义镜像,且支持Python3.7和Python3.11版本,无需考虑复杂的环境准备以及兼容问题。MaxFrame在24年7月开始了公共云公测,目前已经有掌阅、通义、饿了么等内外部客户的作业使用MaxFrame大幅提升了数据处理的开发效率和体验。MaxFrame官网文档
PAI大模型数据处理套件
我们已将DataJuicer丰富的数据处理算子和MaxCompute的强大数据处理能力进行结合,封装成PAI-Designer产品中的算子,以简单易用的产品形态提供给广大大模型开发人员。大模型数据处理文档
算子列表:
在DataJuicer的基础功能之上,我们做了如下适配和优化:
1. 支持MaxCompute-MaxFrame
我们将DataJuicer的算子封装成UDF函数,重新开发了一套UDF算子,并使用SQL脚本运行。可以充分利用MaxCompute海量数据存储和强大的弹性计算能力。同时,我们陆续将目前UDF+SQL的方式切换到MaxFrame框架,在保证性能的同时,MaxFrame友好的Python开发生态可以为开发者提供更好的白盒化支持。
2. 支持PAI-DLC&RAY的分布式处理
- 支持Ray自动化部署
用户启动多节点作业时,自动启动Ray集群,并监听多节点的状态,防止集群意外退出。
- Ray的性能优化
我们和DataJuicer团队也在持续优化Ray的性能,会根据算子本身的特性适配Task或Actor模式。在不同的使用方式上做了大量的性能测试。目前会适配batch模式并自适应分配并行度,以最大程度利用Ray的优势。
- 支持数据自动切分
除了支持Ray的分布式处理,我们还支持了将数据均匀切分到多个节点独立处理的功能。一方面可以减少节点间的通信时间,另一方面是因为我们发现当节点的内存占用达到某个临界点时,Ray的性能会打折扣。
3. 算子迭代和创新
为了提升数据处理算子的性能与准确性,我们依据终端用户在日常操作中的反馈,对几个算法模块进行了优化和扩展。
- 敏感词过滤算子
在原有的DataJuicer算子中,采用语种对应的分词模型对文本进行分词处理,并对切分后的结果进行遍历。这一方式在处理含有混合语言文本的情况时会出现识别精度下降的问题。为了解决这一点,我们改进了策略,取消了分词步骤,改用贪心算法对文本进行遍历,在一定程度提升了敏感词识别的准确率。此外,我们还对敏感词库进行了补充和扩展,解决了原有库存量不足的问题,同时确保了性能与先前版本相当。
- 质量打分算子(DLC)
使用DataJuicer训练出的pyspark模型,质量打分算子(DLC)能够充分利用pyspark的分布式计算能力,实现了多节点协同处理。鉴于pyspark算子对MaxCompute的适配存在一定难度,MaxCompute的质量打分算子是另一套模型,支持了batch推理。后续我们计划推出DataJuicer非pyspark模型来取代当前的MaxCompute质量打分算子。
- 敏感信息打码
对文本数据中的敏感信息进行打码,例如电话号码、邮箱地址、身份证号等。
- 毒性过滤算子
与绿网协作,构建了一套精准识别网络中毒性言论的机制。这个算子能够检测与过滤出侮辱性、歧视性、煽动性等不当言论,并能进行自我学习来适应新的表达形式,大幅提高网络环境的健康性,以保障网上环境的健康和用户体验。
- 数据增强算子
数据增强算子可以生成更多样化且具有挑战性的训练样本。我们通过指令扩充来增加命令和请求的多样性,同时采用指令优化策略提升现有数据集的质量。高质量的指令集对于训练出能够理解语言多样性与复杂性的模型至关重要。我们自己训练了指令优化和指令扩充模型,以提高自然语言处理的广泛性和准确性。
指令优化模型:alibaba-pai/Qwen2-7B-Instruct-Refine、alibaba-pai/Qwen2-1.5B-Instruct-Refine指令扩充模型:alibaba-pai/Qwen2-7B-Instruct-Exp、alibaba-pai/Qwen2-1.5B-Instruct-Exp
- QA提取算子(RAG应用)
在文档理解和问答领域中,高效从大量文本中提取和生成准确的问答对至关重要。我们新引入的RAG算子专门为这一需求而设计,为了更好地应对问答(QA)场景,我们自行采集数据,训练了模型。
HuggingFace 模型列表:
alibaba-pai/pai-llama3-8b-doc2qa、
alibaba-pai/pai-baichuan2-7b-doc2qa、
alibaba-pai/pai-qwen1_5-4b-doc2qa、
alibaba-pai/pai-qwen1_5-7b-doc2qa、
alibaba-pai/pai-qwen1_5-1b8-doc2qa、
alibaba-pai/pai-qwen1_5-0b5-doc2qa
4. 数据转换组件
在处理需要大量CPU计算资源的任务方面,MaxCompute算子有较大优势。然而,对于图像、音频、视频的数据存储和处理,及一些依赖于GPU加速的算子,MaxCompute则无法提供相应支持。鉴于此,这部分算子我们优先支持DLC资源,数据存储支持OSS(对象存储服务)。
另外,对于DLC算子我们测试pyodps sdk直接读取MaxCompute表中的数据时,性能较慢,无法达到预期,所以DLC组件暂不支持直读表数据。这一限制使得在实际的数据处理中可能会出现两种算子的混合使用情况。
为了支持算子混用,提升数据传输效率,我们开发了数据转换组件。该组件支持OSS与MaxCompute表之间的数据转换,且在处理千万量级的数据时能实现秒级的转换速度。可以大幅提升数据处理的灵活性和效率。
5. 对接QuickStart
我们将PAI快速开始(QuickStart)的部分LLM模型迁移到PAI-Designer。支持数据处理+LLM模型训练+LLM模型推理端到端的工作流链路,在Designer中实现闭环。
训练和推理同时支持DLC和MaxCompute两套处理算子。
6. 算子的串联
当前,PAI-Designer各组件操作均相互独立。每个组件完成处理任务后,会将结果持久化保存至OSS或表中。这一处理流程不可避免地伴随着一些额外时间消耗,包括机器调度、容器的重新初始化及数据保存所需时间。为了解决这一问题,我们正计划支持组件之间的无缝串联,无需进行数据落盘操作,每个数据处理算子的输出结果将直接在内存中保留,直至所有算子均顺利执行完毕后再进行一次性落盘。这能够显著降低因机器调度、容器启动、以及反复执行数据落盘操作而产生的时间开销,从而提高整个处理流程的效率和性能。
7. 处理模板
为了帮助用户快速上手,我们基于数据处理组件列表,预置了多个领域的数据处理模板,包括LLM相关的SFT数据处理模板、CT数据处理模板 ,LVM相关的文图处理模板和文视频处理模板。还有端到端的数据处理+训练+推理模板,用户可以一键导入运行。
预置工作流模板请参考:
LLM大语言模型数据处理 - github code:https://x.sm.cn/CeRyxBb
LLM大语言模型端到端链路:数据处理+模型训练+模型推理:https://x.sm.cn/DQvtmqg
LLM大语言模型数据处理-Alpaca-Cot(sft数据):https://x.sm.cn/1NLyuIy
视频数据过滤打标:https://x.sm.cn/5JbO0bK
8. 数据增强模型的单独部署
数据增强技术能够生成更具多样性和挑战性的训练样本。我们通过扩展指令集的方式增加命令和请求的多样性,并采用指令优化策略来提升现有数据集的质量。高质量的指令集对于训练能够理解复杂语言多样性的模型是至关重要的。为此,我们开发了自有的指令优化和指令扩充模型如下:alibaba-pai/Qwen2-7B-Instruct-Refine、alibaba-pai/Qwen2-1.5B-Instruct-Refine、alibaba-pai/Qwen2-7B-Instruct-Exp、alibaba-pai/Qwen2-1.5B-Instruct-Exp。
除了在数据处理的产品中作为算子串接使用,在其他应用场景(例如线上应用的自动指令改写),许多企业和开发者也有单独部署上述模型的需求。我们在QuickStart中上架了这四个自研模型的model card,并且支持用户以零代码方式单独部署这些模型至PAI-EAS。模型的model card示例如下所示:
典型案例
百炼
阿里云百炼是基于通义大模型、行业大模型以及三方大模型的一站式大模型开发平台。面向企业客户和个人开发者,提供完整的模型服务工具和全链路应用开发套件,预置丰富的能力插件,提供API及SDK等便捷的集成方式,高效完成大模型应用构建。
PAI的数据处理算子能力已接入百炼的数据处理模块中,我们为百炼支持了算子串联的不落盘功能,降低了数据处理时延,并优化了整个数据处理链路的性能。
在算子层面与数据层面,我们支持了容错。在单个数据处理算子出现问题的情况下,整个数据处理流也能够稳定运行,不会影响到后续算子的处理过程。数据层面的容错则保证了输入到系统中的数据,即使部分有损坏或格式错误,也能够被识别和自动修正或隔离,确保数据处理流程的鲁棒性。共同保障了数据处理的稳定性。
饿了么
本地生活集团-饿了么团队,已在阿里云PAI-Designer平台上构建了一套全面且精细的大型语言模型(LLM)数据处理流程,已成功实现部分关键业务的迁移与优化。为驱动其自主研发的E-GPT系列模型,该团队精心筛选并处理了源自20个不同源头的数据集,总数据量2TB,最终提炼出1T token的优质数据,专用于饿了么垂直领域的基座模型训练。团队每约一个月便进行一次数据迭代,以此不断更新与优化其基模型,确保模型的时效性和竞争力,至今已在PAI-Designer上稳定运行超过三个月。
饿了么团队基于 Qwen-Base 模型进行继续预训练。他们使用了开源网页和域内自建两部分数据。从互联网收集高质量中、英、代码、数学等语料,涵盖网络数据、图书、论文、百科、知识学科题目和社交媒体等通用知识语料,同时本地构造清洗大量垂类语料。对原始数据进行精细的预处理工作,包括质量评估、冗余去除、隐私消除等步骤。
借助PAI-Designer平台提供的工具链,饿了么团队得以快速稳定的构建一套高度定制化的Post-Training流程,这一系列复杂的数据处理流程被简化,显著提升了研发效率,确保了模型迭代的顺利进行与稳定发布,为饿了么的业务创新与技术升级注入了强劲动力。
饿了么工作流:
未来工作
PAI将继续与Data-Juicer、MaxCompute紧密合作,持续推动大模型数据处理易用性、产品丰富度、性能的提升。
短期规划:
- 组件扩充:不断丰富和优化处理算子,扩展MLLM、MLVM等领域的处理功能。
- 用户体验改进:根据客户反馈,优化组件易用性,减少用户的学习成本。
- 数据可视化工具:开发用户友好的数据处理可视化工具,增强数据流程的透明度。
- 组件白盒化:我们计划支持组件的白盒化,将代码全部开放给用户,用户可以基于自己业务领域的特性对代码进行修改。修改后的组件代码也可以和其他组件正常串联运行。不影响已有的功能。
- 领域垂直解决方案:根据不同行业的数据特性,开发和推出更多的领域特定的预置工作流模板和算子,针对性解决各个垂直行业的数据挑战。
- 性能优化:继续深化对现有数据处理框架进行性能调优,旨在降低延迟,提高数据处理速度和吞吐量。