本次将分四个部分讲解,第一部分是AI时代,数据开发范式演变,尤其对于Maxcompute自研大数据平台,客户的工作负载、任务类型都发生一些变化,也影响到开发平台的范式变化,范变化影响之后能力的重新构建。第二部分是在资源大数据平台里做哪些Data + AI领域的核心能力,基于核心能力做的一站式的开发体验和开发流程,最后分享在新的Data + AI框架上成功落地的客户案例,和获得的收益。
一、AI时代数据开发范式演变
数据、算力和算法几个要素是比较常提,还有人才要素也是核心之一。海量数据是基础,但核心的是海量数据之上的高质量数据。如何高效的从海量数据里提取高质量的数据,对整个开发是非常核心的一点,要求平台具有很好的扩展性,提供丰富的数据处理的能力和算子。第二是算力,大模型训练GPU算力包含CPU算力,在数据处理包括离线推理领域,CPU资源还是很重要的,它可以非常高效的帮助做计算,最后是算法,算法是一个核心的要素,取决于最后的模型质量。
整个的开发生命周期用这张图表示,这张图从最开始的数据分析到数据的预处理,预处理包括数据清洗、过滤、转换、数据增强等,是比较复杂一个的过程,包括模型开发,基于分布式训练平台的模型训练,最后把训练之后的模型进行评估。
最后是模型部署,整个链条非常长,涉及到不同用户在不同平台之间进行切换,使用不同的语言、技术栈、工具,包括角色不一样。开发领域有数据工程师、数据科学家、算法工程师,包括训练的调参工程师以及部署,整个一系列涉及到很多链条、角色、平台。
这就带来了一些挑战,俗称的开发的痛点,第一是数据管理,整个AI开发过程中,可以看到数据类型非常多,随着面向AI领域的开发,不光是传统的像数仓领域结构化数据为主,在AI开发是半结构化数据,比如文本,从互联网爬取海量的文本数据,要抽取有用的信息,包括非结构化数据,视频对话,音频生成,合成都需要多模态数据、图片、视频、音频做数据处理和预训练。多种多样的数据形态散布在不同的数据平台里,如何高效的管理是一个挑战。
第二是开发效率,整个开发流程很复杂,每个平台每个阶段都有不同的特点,要求开发人员熟悉不同平台的管理和运维,这些平台提出很大的挑战,比如环境的管理,可能开发环境里调试没有问题,但部署到线上有很多依赖,发现有不同的地方,这是一个影响开发效率的点。最后一点是运维,整个开发流程复杂,用户需要在不同平台去切换,很多用户用的是自用开源框架搭的自建平台,自建平台的好处是上手比较快,有很多资料可以去学,但是日常在运行过程中会发现用户要处理很多复杂的运维问题,比如节点失效,做高可用的保障给Data + AI的开发提出了很高的门槛。
二、MaxCompute Data + AI核心能力解读
介绍针对流程面临的挑战。Maxcompute作为阿里云的自研大数据平台,在过去一年,在Data + AI领域,尤其是面向Data for AI领域做的能力建设,这是在Maxcompute里提出的一个解决方案。
首先底层为解决数据管理,提供统一的原数据视图支持进行统一的多模态,包括结构化数据管理,底层是原数据管理模块。可以管理存储在盘古上的Maxcompute的结构化数据,也可以管理存储在数据湖上的非结构数据,包括Paimon里面的数据。提供统一的数据视图,中间层是计算框架,可以提供统一的Python生态的编程接口,支持用户进行数据处理模型开发,包括提交、分布式训练等一系列操作。
上层是为提升开发效率。提供很多易于使用的工具,包括交付式开发的Notebook,通过DataWorkers可以提交Data + AI的作业节点等,为解决开发效率和运维问题,提供自定镜像,用户可以提前把自己的依赖都打包在镜像里,运行时就可以在用户的自己的镜像里面运行,而比较明显的提升是开发效率,不用人工解决复杂的三方包的依赖问题。
Maxcompute新推出的一套分布式的计算框架MaxFrame,它是一套新升级的Python生态,提供统一的分布式社区兼容版的Python接口,以及很多高效的数据处理的算子。构建在MaxFrame上提供很强大的分布式计算能力,核心能力是统一的数据管理视图,底层可以基于Maxcompute计算平台发布的OpenLake,中间计算表示层是自研的分布式计算框架MaxFrame,提供统一的编程接口、交互式的开发环境-Maxcompute notebook,提供自定义项功能管理,支持用户提前构建好要运行的环境解决依赖。
Maxcompute的Python生态的升级,最早Maxcompute是以SQL形式去提交执行,最早提供PYODPS,这套工具包是2015年发布的,它是作为Python SDK的方式,用户可以调用Python接口来操作Maxcompute的各种对象,比如创建表、查询实例、提交任务等,作为SDK形式比较方便,让用户用Python操作Maxcompute,在2016年发布升级版PYODPS,提供自定的一套Data Frame进行计算表示层的操作。用户可以不用写SQL操作数据。用户可以使用PYODPS里的Data Frame表示层操作数据,缺陷是Data Frame不是社区兼容的,比较流行的是Pandas标准的Data Frame有各种各样的算子、index的概念。
这一版升级没有做到社区兼容,之后在Panda 生态mask into团队在2019年发布Mars,做numpy分布式的改写执行,底层是基于调度能力,缺陷是启动和运行的体验不好。
在今年正式对外推出Maxcompute的全新的自研的计算框架,亮点是相比以前的PYODPS的Data Frame表示层,这个是兼容社区的Pandas标准的Data Frame,用户可以非常熟悉pandas的API写分布式的作业,这是很大的功能提升。第二是底层做分布式,用户调用Pandas算子可以像写本地Pandas程序一样,但真正执行的时候,会利用MC的分布式执行能力在多个节点中分布式的执行,可以复用底层Maxcompute计算资源和调度能力。
最后通过跟上下游的各种产品包括notebook、自定镜像能力、底层的Open Lake、统一数据管理能力等,打通Data + AI整个的pipeline。然后介绍新推出的框架,它的目标是全新升级Maxcompute的Python开发生态,现在用户也可以和SQL同等的地位写Python的作业提交,MaxFrame是基于Maxcompute的表示层Data Frame的框架。Data Frame在Data + AI领域,Data Frame生态更好,越来越流行,包括上下游的很多库可以集成起来。在底层依赖于Maxcompute的弹性计算资源,实现低运维方式,用户基本是开箱即用,申请MC账号就可以使用MaxFrame这套产品。基于MaxFrame海量数据,包括结构化的内表,包括可以读取数据湖上的外表等,这是构建MaxFrame的基本的能力。提供统一的Python接口支持用户开发。原生的Python开发不必写SQL加上Python方式做数据处理,中间场景支持数据处理、数据探查、科学计算,包括AI开发来支撑不同的业务场景。
核心能力总结以下几点:
第一是开发生态更熟悉,因为相比于PYODPS的Data Frame,MaxFrame Data Frame跟Pandas兼容性更强,用户比较容易上手,很多落地的客户迁移成本非常低,以前是本地跑Pandas,现在可以用MaxFrame Data Frame跑Pandas作业。
第二是丰富的算子支持,除Demo兼容Pandas算子,因为AI开发领域要联动数据处理和模型训练,也提供其他社区兼容的算子,比如xgboost训练,也支持调用兼容接口进行分布式的训练。也支持其他大模型相关的处理算子,比如文本驱虫等,也支持使用大模型的能力,对数据进行进一步的分析。算子支持比用户自己手写逻辑在大部分场景里会调用更好。然后是更快的处理性能。相比于传统的用户本地写Pandas,基于Maxcompute底层的分拨计算能力,它运行的效率和能处理的规模都大。最后是更好的开发体验,包括notebook、自定镜像管理能力,都会极大提升开发效率,降低用户在开发环境上、运营环境配置上花费的时间。
介绍Maxcompute团队新推出的功能Object Table。在AI领域,结构化数据是一方面,但更多场景是跟非结构化数据去打交道,包括图片、视频、音频。在传统方式中,数据都在数据湖上,用户调用API自己去操作和管理原数据,包括数据更新以及不同的原数据处理的过程Check Point。Object Table的概念是提供统一的表的形式管理存储在数据湖上的非结构化数据。用户可以建一张表,指定在OSS的一个目录,可以建出这张表,可以后续通过SQL或者是Python的接口Data Frame操作非结构化数据的表,从语义上看是非常简洁的,不需要再写复杂逻辑处理非结构化数据。另外经过Object Table方式,可以做很多查询加速,包括列的裁剪、查询条件过滤的下推也包括自己用的缓存加速等,这些会让用户访问处理非结构化数据效率更高,最后也支持多种形态的数据写入,Object Table也同MaxFrame做深度集成。开发环境比较便捷的包括Maxcomputer推出的notebook,这种都是预装MaxFrame SDK,包括配好用户的身份信息,和Dataworks平台和DSW集成的notebook,包括用户用notebook写好的作业,可以支持在Dataworks里有节点,通过节点提交作业来执行,用户可以对作业进行管理和查看。
总结一下核心优势,第一是Serverless弹性计算能力,极大降低用户的运维成本和资源管理成本。第二是分布式计算能力,用户可以用类似于Pandas API方式操作非常大规模的数据,支持统一的数据管理,包括各种形态的数据,提供统一的视图操作,提升应用性和开发效率。适用这套方案的客户是传统的数据科学家,做一些需要开箱即用的Python环境,然后进行数据探查,包括数据分析师需要非常大的计算能力操作生产级别的数据,AI开发者提供一站式的notebook形式,提供分布式的传统AI开发算子。
三、MaxCompute Data + AI一站式开发体验
基于新的解决方案,提到这些核心能力,其开发流程是基于数据存储,这一层是数据层,有MaxFrame的内表,以及OSS上的外表,Paimon表,可以统一的通过MaxFrame来读取,或者是SQL,Object Table也支持SQL读取数据,利用提供的统一的Python API做开发,利用自定镜像降低环境依赖的问题。最后集成计算平台其他的产品,比如可以支持用户提交作业到Paimon。MaxFrame也支持离线的CPU的一些推理,最后集成可以支持其产品像Paimon的模型仓库,进行模型管理和模型部署。以上是简化的模型一站开发流程。原始数据过来做数据分析处理、模型开发训练,最后模型开发管理。
这个图表示如何进行多模态的数据管理,原始数据用户在OSS上面,可以通过Object Table构建一张表来管理,传统方式用户可能需要自己读取非结构化的数据。这是notebook的解读,在notebook里可以支持交互式的开发,用户自定义Python函数,对半结构化数据,网页数据进行文本匹配和提取,函数写好之后,用户只要调一个apply接口,像pandas apply一样就可以分布式的执行文本提取的作业,效率是非常高的。
这里展示自定义镜像的功能,支持用户基于基础镜像构建自己的镜像,用户把自己的三方依赖,比如二进制的包放到镜像里。有些用户把自己的模型文件放到镜像里,可以支持镜像的高效分发,用户的自定函数就可以运行在自己的镜像里,可以解决环境依赖的问题。
一个简单的例子,用MaxFrame接口高效的进行数据处理,这里是离线推理的场景,用量化后的模型,用 Llama.cpp框架做离线的推理,原始数据文本数据存在Maxcompute的表中,这里提供注解,用户可以把模型文件提前上传到Maxcompute,注解只是资源文件会在用户的函数里面使用到,这里使用Llama.cpp的框架,用户的文本基于一定的prompt进行推理,把推理后的结果存在MaxFrame表里做后续的处理,接口定义好,通过passion算子执行在表读出来的Data Frame,可以做大规模的分布式的作业执行,下一个是提供很丰富的算子支持,除Demo兼容传统Pandas,包括xgboost算子,也提供很多额外增强能力的算子,比如AI Function、Reshuffle 。
先介绍AI Function能力,很多企业在MC沉淀很多数据,结构化也有,包括MC的外表的非结构化数据,观察到很多用户有使用大模型的能力,对Maxcompute数据进行分析,进行内容生成需求,传统的部署模型,用好各种各样的参数,设置好模型的anny Point还是比较挑战,内置一个算子结合通易提供的零基的API就可以支持用户比较方便的对存在MC表里的数据进行使用大模型进行智能分析,架构是提供基于MaxFrame的API提供一套AI function,底层的支持没有Object Table,可以读取在数据湖上的非结构化数据,比如图片,读取出来调用在零基上面的大模型的服务,根据用户的prompt,可以通过函数的接口传进来,对这段文本进行内容生成。生成之后,把一定的格式组织起来,最后存在Data Frame里,用户可以决定把Data Frame的内容是否要存回MC表做后续的处理,这是内部的场景,介绍AI Function如何使用。
首先有一张OSS的非结构化图片,图片存在OSS里,可以创建Object Table,把这个图片组成一张表的形式,之后用MaxFrame读取这张表生成的date Frame表示层对象,对Data Frame表示层对象用AI function,这里面传一些prompt描述是车辆摄像头拍摄的照片,需要大模型描述道路状况、天气、车辆情况等,并以Jison的格式输出,同时可以支持设置温度,设置输出token树的参数到AI Function里,执行针对Object Table读出来Data Frame执行AI function,执行完之后的结果是这张图片,可以看到生成一个Jison格式的描述。
道路环境是主干道,路况是畅通,天气是清晨,有一些车辆描述,这些数据分析出来非常有用,它比传统的基于模型的embedding生成出来的数据要更有用。有一个Demo是把这些数据是存在MC表里面构建一套索引,用户可以支持查询天气、查询车辆,可以非常精确的召回这张图片,相比传统的通过向量化召回的方式,通过大模型描述会非常准确,这是AI方式的一个具体使用场景。
四、典型客户案例
MaxFrame已经对外正式发布,很多客户成功在这边使用MaxFrame,并且得到很好的收益。第一个客户案例是一家互联网公司。类似于电商的场景,有很多海量的客户的行为数据,针对商品的行为。比如浏览、加入购物车、购买、收藏等行为,这些数据存在Maxcompute的表里面,他需要针对历史的客户行为数据使用charge boost训练一个模型,训练好的模型预测用户未来一段时间是否会产生购买行为,以此做相应的推荐操作,把一些商品推荐给客户,虽然客户之前的数据在Maxcompute里面,但因为整个数据需要一些很复杂的数据清洗操作,所以用Pandas写的一个本地的Pandas作业,包括使用Pandas的接口对缺失的数据进行填充,包括可以对一些数据做encoding,把字符串变成一些整式化的值做训练。
遇到的问题是本地的Pandas作业的执行的资源是有限的,因为数据规模一旦膨胀之后,本地处理不Demo,又会遇到这些问题,通过跟用户Demo解情况,推荐使用MaxFrame,其实本地Panda作业使用兼容算子,经过一定的改写,成本并不高,包括Pandas处理、xgboost的训练。都在集群内部运行Demo,不再受限于本地的计算资源。这里是一个对比图,三个柱状图分别是不同的数据规模,最左边是800万行的用户行为数据进行的处理训练和推理的时间,纵轴是秒时间单位,中间是1600万行数据,最右边的是2400万行数据,橙色是用户以前的方案,通过是PLTS读取数据到本地构建Pandas的Data Frame做数据处理,xgboost的模型训练和推理需要时长,基本随着数据规模,这种是不断的线性增长,蓝色部分是切换到MaxFrame之后,经过一定的改写,可以看到时长基本是比较平稳的,尤其是用户要处理新的规模数据是比最右边的图更大,本地资源膨胀没法处理,后来在MaxFrame上做很好的运行,说明像一些传统的客户,使用Pandas加上传统场景非常适合于这套解决方案,可以实现很好的资源并行和处理更大规模的计算任务。
下一个案例是与大模型相关的一个客户,是做大模型训练之前做数据处理。是使用的fast test的模型对文档进行分类,但文档规模很大,有几十亿条文本规模。之前是Maxcompute的客户会用SQL写作业,很多二进依赖会在pass udf里处理,包括解决运行三方包的依赖,包括要解决运行环境的依赖等,效率很低,尤其是要处理很多不同语言的文本,它有不同的模型穿起这样一套逻辑链条,使用SQL非常难写,经常出错,并不支持调试能力,向用户推荐使用MaxFrame的框架进行处理,用户可以看到改写之后的代码提供自动打包功能,通过Python requirements注解,让用户把需要的依赖包写在注解里,服务就可以自动把这些依赖包下载到对应的worker里面执行,不需要用户手工上传打包的操作,用户写的自定义函数也可以在Data Frame里面分布式的运行,这样的规模在本地是无法运行的,最后通过使用这套方案,用户取得非常好的作业执行时间提升。
最后总结提供的Data + AI方案MaxFrame。作为自研大数据平台提供包括统一的数据管理、分布式社区兼容的计算框架,更好的开发体验,通过各种开发工具的提升,包括支持自定义项、自动打包等,提升开发体验,一站式的解决用户在Data + AI领域的开发。也通过落地一些客户取得很好的效果。