本文根据《Data+AI 融合趋势下的智能数仓平台建设》线下 meetup 演讲实录整理而成
作者:刘洋(曦翎)- 阿里云产品专家
近年来,随着人工智能的快速发展,Python 已经成为 AI 开发的首选语言,MaxCompute 也进行了大量与 AI 相关的优化。今天,我想跟大家分享 MaxCompute 基于 Python 生态开发的分布式 Python 计算服务 MaxFrame。今天的分享将围绕四个主题展开:分布式计算服务 MaxFrame 介绍、MaxCompute Python 开发生态、MaxFrame 主要应用场景及客户案例。

分布式计算服务 MaxFrame
MaxFrame 是基于云原生的分布式 Python 计算服务,支持 Python 编程接口,兼容 Pandas、XGboost 等数据处理及 ML 算子接口且自动实现分布式处理,同时能直接使用 MaxCompute 的弹性计算资源和数据接口,与 MaxCompute Notebook、镜像管理等功能共同构成了 MaxCompute 的 Python 开发生态。
MaxFrame 的整体架构如下图所示。首先,从底层计算资源来看,MaxFrame 目前完全复用 MaxCompute 的计算资源,支持按量付费、包年包月等资源计费模式。此外,MaxFrame 支持直接读取 MaxCompute 中的数据,从而避免了数据迁移的复杂性,尤其对于已经将数据存储在 MaxCompute 上的用户,这一特性显著简化了数据访问流程。
MaxFrame 提供了一系列强大的能力。首先,MaxFrame 提供 Python 编程接口,100%兼容Pandas 算子,且算子提交至 MaxCompute 自动分布式执行,不再受本地资源大小限制。其次,MaxFrame 直接在 MaxCompute 集群中进行数据分布式计算,运行时无需将数据拉取至本地处理,消除了不必要的本地数据传输,提高作业执行效率。最后是开发体验,这也是用户普遍关注的重点之一。MaxFrame 与 MaxCompute Notebook 和 DataWorks 进行了深度集成,提供开箱即用的交互式开发环境及离线调度能力;MaxFrame支持在代码开发中直接引用MaxCompute 内置镜像(Pandas、NumPy、XGBoost 等)及用户自定义镜像且支持Python3.7、3.11多个版本,无需考虑复杂的环境准备及兼容问题。

我们当前主要的客户画像简单归纳如下,中间部分是数据分析师,MaxCompute 大约80%的客户都是以数据分析为核心业务场景。在这一场景下,我们通常面临大规模数据集、复杂的计算逻辑,频繁使用SQL、UDF 以及需要集成第三方算子来满足特定的业务需求等挑战,而通过Python 的第三方内部包较为容易实现。因此针对此场景,我们会借助 MaxFrame 的分布式计算能力处理大规模数据分析处理以及数据挖掘工作。
其次,在数据科学领域,客户的主要需求集中于机器学习,这类场景高度依赖 Python 生态中广泛使用的第三方库,例如 XGBoost、Scikit-learn、NumPy 等。这些工具已经在 MaxFrame 中完成了深度集成,不仅提供了标准化的接口封装,还结合底层的分布式计算能力,为客户打造了一个开箱即用的 Python 开发环境,助力客户进行大规模数据处理和交互式数据探索。
此外,我们在 AI 领域也进行了大量投入,目前,MaxCompute 的计算能力仍以 CPU 为主,因此在大模型的应用场景中,我们的核心关注点主要集中在大模型数据预处理(文本去重、分类等)和基于 CPU 的离线推理场景。

MaxFrame 的使用十分灵活,适应多种开发环境。首先,MaxFrame 支持在本地 Python 环境中使用,若用户的 PC 已配置 Python 开发环境,可以直接通过 pip install 完成 SDK 安装。目前 MaxFrame 支持 Python 3.7、3.11。其次,对于已经在使用阿里云相关产品的用户,DataWorks 的 PyODPS 3节点和 Notebook 中已经内置了 MaxFrame SDK,可以直接开发和运行 MaxFrame 作业。针对 MaxCompute 用户,MaxCompute Notebook 已内置MaxFrame 和 MaxCompute 账号认证信息,用户无需提供 AK 和 SK,即可直接连接MaxCompute 项目并进行开发。

在 DataWorks 新版 Data Studio 中,我们也进行了数据开发相关工作。首先,Data Studio 在引擎层面实现了多计算引擎的集成,支持包括 MaxCompute、MaxFrame SDK 等。通过拖拽式节点操作,用户可以轻松构建可视化工作流,从而实现开发流程管理。其次,Data Studio 提供了湖仓一体的元数据统一管理能力,通过统一的数据目录,实现了对 MaxCompute 内表、外表、视图、物化视图以及资源和函数的统一管理。此外,Data Studio 提供基于云原生的 IDE,支持多种开发模式,包括交互式 Notebook、Shell 节点以及自定义镜像部署,还可以对接 Git 进行代码管理。最后,针对习惯使用 Notebook 的 Python 开发者,Data Studio 提供了一站式的交互式 Notebook 开发环境。该环境内置了 Python 3.11 版本,可以很灵活地进行数据开发包安装,镜像管理等。

下图展示的就是 Notebook 界面,底层基于 VS Code 进行了封装并集成了阿里云大数据计算引擎。右侧展示的是 Data Studio 提供的基本能力,包括工作流编排与调度、Copilot 智能助手、数据可视化、SQL 与 Python 交互式查询、Data+AI 交互式开发、支持自定义镜像个人开发环境等。

MaxCompute Python 开发生态
接下来我将介绍 MaxCompute 的 Python 开发生态。众所周知,Data+AI 开发是一个复杂的流程,Python 是 AI 开发者们的首选语言。针对 Data+AI 的开发流程进行简单归纳,涉及到数据分析、数据预处理、模型创建、模型训练、模型评估、模型预测、部署发布等多个流程,也涉及到业务人员、数据工程师、数据分析师以及数据科学家等不同角色。

基于 Data+AI 开发全生命周期,MaxCompute 提供统一的开发环境、统一的数据管理、统一的编程语言。下图是整体框架图,在数据存储方面,MaxCompute实现了对结构化与非结构化数据的全面管理,基于 MaxCompute Storage 进行结构化数据管理,基于 OSS 进行非结构化数据管理。此外,MaxCompute 还提供 PaaS 级能力,包括基于 BigMeta 的元数据管理能力、内置镜像和自定义镜像管理能力、计算方面则提供 SQL 和 MaxFrame 两套编程语言。

基于上述整体逻辑,我们构建了从数据准备到模型部署的全生命周期管理。在数据准备阶段,无论是结构化数据还是非结构化数据,我们都通过统一的元数据视图进行数据统一管理;在数据分析和预处理阶段,通过自研分布式计算框架 MaxFrame 可获得比原生接口大数万倍的数据处理规模,同时数据处理能力提高数十倍;在模型开发阶段,提供高性价比弹性大数据 & AI 计算资源池,内置配套环境镜像,可按需快速构建模型开发基础环境;在模型训练阶段,通过自研分布式计算框架 MaxFrame 实现分布式模型训练,在大规模数据场景下,提供高效稳定的模型训练能力与优化;而在模型管理和评估阶段,与阿里人工智能平台 PAI 打通,支持将已构建完成的模型推送至 PAI 进行模型统一管理及模型指标评估;最后,在模型部署阶段,与PAI-EAS 打通,可通过 EAS 拉起模型运行环境及模型文件,支持模型在线部署发布。以上就是整体 Pipeline。

MaxCompute 的镜像管理功能是近年来我们根据用户反馈持续优化的一项重要能力。在镜像管理推出之前,用户通常需要通过 Resource 的方式上传和打包,然后进行引用,这一流程十分复杂。为了解决这一痛点,MaxCompute 自2023年起提供镜像管理能力。用户可以通过 file 的方式创建自定义镜像,并将其上传至阿里云容器镜像服务,在镜像上传完成后,MaxCompute 可以将镜像拉取至 runtime 环境中进行使用。

最后总结一下 MaxCompute 统一 Python 开发生态。首先,在开发环境上,MaxCompute 为开发者提供了 Notebook,并与 DataWorks 深度集成,构建了开箱即用的开发环境。此外,我们提供统一开发镜像及环境管理,云上一键式 Python 开发环境,可以便于用户进行后续开发。最后就是 Data+ AI 开发一体化打通,具体而言,MaxCompute 与阿里云内部的多款产品如 DataWorks、PAI 等,进行了深度集成,确保用户开发 Pipeline 是一个完整的端到端流程。

MaxCompute 重点应用场景
使用 Pandas 分布式算子进行简单数据处理
MaxFrame 对 Pandas 生态进行了深度兼容与分布式优化。通过底层的分布式计算引擎实现,我们不仅保留了 Pandas 原生算子的易用性,还显著提升了其在大规模数据处理场景下的性能表现。以下将结合一个使用 Pandas 分布式算子进行简单数据处理的案例进行阐述。
案例背景-销售数据分析
该案例中有两张数据表,Product 和 Sales,分别表示产品的维度表和销售情况的事实表。使用 MaxFrame 的 Pandas 兼容 API 编写处理逻辑,筛选出2019年春季(2019-01-01至2019-03-31)售出的产品。
**使用方式 **
导入 MaxFrame module,创建 session 并从 MaxCompute 表中构建 dataframe,其余步骤同本地使用 Pandas API 进行数据处理完全一致。最后调用 MaxFrame dataframe 的execute 接口进行 DAG 执行,以及 fetch 接口从 MaxCompute 拉取数据到本地进行展示。

使用 Pandas 分布式算子进行复杂数据处理
第二个场景是使用 Pandas 分布式算子进行复杂数据处理。我们借助自定义 UDF 实现,UDF是一个非常常见的工具,它允许我们将复杂的计算逻辑封装到函数中,从而提升代码的可读性和复用性。在本案例中,我们将计算过程封装到了 UDF 中,同时还借助了包引用相关能力。
案例背景 -- 员工财年分数计算
该场景基于员工每个月的各项分数,计算财年内员工在各项累计分数。演示数据为脱敏后的数据,包含了脱敏后的员工 id,年月,打分项和随机生成的分数等字段。通过 MaxFrame 能够以数十倍于 Pandas 的性能在 MaxCompute 上快速完成数据分析和计算工作。
使用方式
导入 MaxFrame module,创建 session 并从 MaxCompute 表中构建 DataFrame,使用apply, merge, reset_index 等 Pandas 兼容分布式算子进行数据处理。

在自定义镜像环境环境中进行数据计算
很多用户反馈,通过 resource 进行镜像管理时,流程过于冗长且复杂。用户需要在本地环境中完成环境搭建、依赖打包等一系列操作。然而,由于 Python 很多包的依赖非常复杂,手动解决依赖问题效率低下。基于此痛点,我们推出了 MaxCompute 自定义镜像的能力,其使用方式与原生 Docker 一致。用户可以基 于MaxCompute 提供的基础镜像,通过 Dockerfile 构建所需镜像。打包好镜像后,用户可将其推送至阿里云 ACR 实例中,然后在 MaxCompute 控制台可视化地将 ACR 中的镜像拉取至 MaxCompute 项目中进行使用。
案例背景
MaxFrame 具备使用自定义镜像来运行 UDF 的能力。该案例通过基于自定义镜像的 UDF 来执行网页渲染计算。MaxCompute 库表中存放了一组 HTML 文件数据,MaxFrame 将库中的 HTML 通过镜像中安装好的 chrome,把文本网页渲染为图片并以 base64 的格式写入结果表中。
使用方式
1、基于MaxCompute UDF 基础镜像构建用户自定义镜像 Docker File

2、在开发环境中基于 Dockerfile 打包镜像

3、把打包好的镜像推到 ACR 实例中


4、MaxCompute 镜像管理页面将其导入 MaxCompute 项目中


离线 LLM 推理
还有一个场景就是离线 LLM 推理场景。在大模型中通常依赖 GPU 进行高效推理,但在很多实际应用场景中往往存在 GPU 资源有限、性价比低等问题。因此我们与通义实验室及其他相关团队,设计实现了基于 MaxCompute 进行离线推理的方案,MaxCompute 提供了数万核级别的 CPU 计算资源池,为大规模离线推理任务提供了强大的算力支持。
案例背景
大模型时代,使用充裕的 CPU 资源在量化后的 LLM 模型上,进行离线的批量文本分析和生成变得越来越普遍。该案例使用 Llama.cpp 框架,在 UDF 中加载 GGUF 格式模型文件,将保存在 MaxCompute 表中的文本数据作为查询输入进行推理。
使用方式:
1、定义 Llama 模型推理的 UDF 函数
2、使用 MaxFrame 从原始的 MaxCompute 表中读取文件数据,构建 DataFrame,并对DataFrame 的每一行数据使用 apply 方法 UDF 函数进行推理

3、 将推理后的结果写回 MaxCompute 表,推理结果为输入文本数据的逻辑类别


MaxCompute 客户案例
某客户公司 -- Pandas 数据处理 + XGBoost 离线训练和预测
这是一个典型的 Data+ AI 的应用场景,客户的核心需求是使用 Pandas 算子 对数据进行预处理,并使用 XGBoost 进行训练和预测。此前,客户的解决方案主要依赖于拉取 ECS 或购买额外资源来完成计算,整体采用开源算子效率也比较低。因为该客户已经是 MaxCompute 的用户,并拥有一定的 MaxCompute 资源。考虑到其现有资源并非全天候满负荷运行,我们建议客户将其整个作业迁移至 MaxCompute ,利用MaxCompute 富余的资源进行计算。
在本案例中,MaxFrame 提供了一些跟社区主流数据处理、训练推理兼容的 SDK,其中主要用到了 Pandas 和 XGBoost;其次 MaxFrame 支持将用户的数据处理作业和训练推理作业,自动转换为分布式作业进行,突破了传统的单机处理瓶颈;此外,数据读写过程直接和MaxCompute 的底层存储通信,没有传统处理场景下 tunnel 的带宽限制;最后,因为直接使用 MaxCompute 海量云上资源,不再受到本地资源限制,这也是比较吸引客户的一点。

某汽车行业车联网大数据客户数据处理案例
第二个客户是汽车行业车联网客户,场景与上一个案例类似。客户对车端大量充电数据进行采集,并通过 Pandas、Scikit-learn 等算子对数据进行统计分析。然而,因为这些算子计算逻辑发生在本地,随着数据量增大,本地处理逐渐困难,且时间越来越长,故需要寻求一个分布式的实现方法,能够在数据量变多的情况下,更快地完成计算。我们对本地环境与基于MaxFrame 框架的分布式计算进行了对比测试,测试结果表明,基于 MaxFrame 算子性能提升20-30倍,尤其一些核心算子提升更加明显。

某汽车行业车联网大数据客户多模态处理案例
在 AI 领域,多模态应用是不可或缺的场景之一。多模态的应用涉及图片、音视频处理等场景。本案例就是将车端辅助驾驶采集的图片、视频文件经过脱敏压缩后上传到 OSS 中存储,客户需要对 OSS 中的视频数据进行模式识别、打标,并将识别标签保存供辅助驾驶训练时查询。在打标过程中,系统会直接访问 OSS 中的数据,并通过 MaxFrame 提供的算子进行离线计算,最后将结果写到 MaxCompute 内表中。在此过程中,我们还支持对 JSON 格式数据的处理,最终完成端到端的计算推理。

某大模型客户离线推理场景案例
最后是我们的公共云大模型客户,使用充裕的 CPU 资源进行离线推理的场景。客户对时效性的要求并不高,通常能够在1至2天内完成数据处理即可满足业务需求。在传统架构中,通常使用 Spark 或者 Ray,该客户之前采用的就是 Ray on ECS 架构,无法在短时间内弹性大量资源,还需要人为进行代码处理,包括并发度控制、任务调度策略调整、模型文件管理以及第三方依赖等。在本案例中,客户运行了60多个模型,其中比较重的一个是 FastText 语言分类模型,中文6G,英文4G,对21亿条数据进行离线推理。通过在 MaxFrameUDF 中加载Fast Text 模型文件,将保存在 MaxCompute 表中的文本数据作为查询输入进行推理,并把推理生成的文本结果另外保存在 MaxCompute 表中。基于 MaxCompute 提供弹性5000CU 计算资源,一小时内就完成了全量数据推理,单个作业 1W 并发。
