导读: 广告业务特别是程序化广告,在内容理解和反作弊、召回排序、竞价、隐私计算等可采用先进的计算机技术实现。由于其建模的大规模、离散化、数据稀疏 等特点,智能决策难度较大,亟需高性能计算平台。针对 AI 落地中面临的成本、效率效果 等难点,并基于分布式机器学习 等先进技术,汇量科技研发了 MINDALPHA 高性能分布式机器学习平台,作为广告业务的智能决策基座。

本文将对该平台的架构和技术进行介绍,分享汇量科技的 MLOPs 建设 情况,并对未来机器学习平台发展 之路进行展望。今天的介绍会围绕下面四点展开:

  1. 背景-广告业务现状

  2. 智能决策基座-MindAlpha

  3. MLOps 建设

  4. 机器学习平台发展之路


分享嘉宾|白悦辉 汇量科技 高级算法工程师

编辑整理|王帅 金山云

出品社区|DataFun


01/广告业务现状


1. 广告技术现状

广告业务涉及到很多先进技术,包括:

(1)召回排序:CTR 预估的核心,排序包含精排和粗排;

(2)出价:CTR 预估后,进行广告实时竞价出价;

(3)隐私计算:隐私计算技术可实现用户个人信息及隐私的全生命周期保护。汇量基于平台做了 RSA 的计算;

(4)内容理解与反作弊:内容理解与反作弊,涵盖 CV 和 NLP 的算法。

广告业务的智能决策重点是将可智能决策的点找到,通过先进的计算机技术实现并集成。

2. 广告算法建模

(1)建模特点

**① 大规模:**数据量庞大,PB、EB 级,需高性能平台支持;

**② 离散化:**ID 类、文本信息,使得离散化数据多;

**③ 稀疏数据:**与传统机器学习的特征矩阵和 label 不同,广告常需处理高维稀疏矩阵。例如,包含 1 万个素材的广告,用户在某个位置点击,则标记为 1,其他位置未点击,则全部为 0,也即产生了一个 1 万维的稀疏矩阵。

(2)待解决问题

在面临如下条件时,可达到训练相关要求,亟需高性能计算平台。

① 条件:

1)数据大小:PB 级(1 小时)

2)样本条数:亿级(全天)

3)模型大小:百 GB(压缩前)

4)请求数:亿级(在线)

② 要求:

1)训练时间达到分钟级;

2)请求时延为毫秒级。

--

02/智能决策基座---MindAlpha


1. 背景

(1)AI 落地难点

① 成本:

1)算法人力成本高:需要投入大量的算法工程师做复杂的数据处理、特征处理,或工程处理。

2)资源占用多:DNN 训练,如全连接的网络层训练,可能需要几十台机器。

3)服务器成本高:一个集群可能需要几百台机器,不光是 CPU 还有更昂贵的 GPU 集群。

② 效率:

1)训练速度低:原生 Torch 无法满足大规模训练所需速度。

2)算法迭代开发周期长:当存在定制化需求,需要基于原生框架做一些复杂开发,不能做到开盒即用。

3)模型部署周期长:若需导出模型、开发,再到线上推理,会增加模型部署周期。

③ 效果:

1)**模型训练与实际落地效果差异大:**算法本身鲁棒性问题,框架问题,可采用一体化体系解决。

2)依赖专家经验。

因此,如下图所示,训练平台需要将红色箭头部分进行提升,绿色的箭头部分进行降低。



(2) 分布式机器学习

分布式机器学习的流行架构:

① PS(参数服务器架构 Parameter Server)

1)Collocated:worker 和 server 部署在同一台服务器上;

2)Non-Collocated:worker 和 server 未部署在同一台服务器上;

**② Ring-All reduce:**循环队列结构,没有中心结点来聚合。每个节点只需要和其左右两边进行一次通信,相比 PS 通信减少。

2. MindAlpha介绍

(1)MindAlpha-ps 简介

汇量选择 PS 架构原因:较容易实现,有更多可发展空间。

MindAlpha 中 PS 的 Roles:

**① Coordinator:**协调器,负责初始化时分发角色,给出中枢命令;

**② Server:**装载模型,Pull 模型参数,保存模型参数、接受 worker 节点计算出的局部梯度、汇总计算全局梯度,并更新模型参数。

**③ Worker:**计算节点,push 参数,保存部分训练数据,从 server 节点拉取最新的模型参数,根据训练数据计算局部梯度,上传给 server 节点。



所有参数都需要更新么?

① 不必要的。大规模稀疏矩阵,大部分为 0,对结果的影响较小。

② 可设置 KKT 条件,求解有约束的规划问题。更新梯度时,不回传的被过滤掉,可以节省通信占比。

(2)MindAlpha-ma on Spark

MindAlpha 基于 Spark,由其提供了统一的解决方案:通用、易用、易扩展。

① 通用性:

1)支持 Python、Scala 等各种语言;

2)支持 Yarn、K8S 等提交方式。

**② 易用性:**PySpark,作为 PS 的 container;

**③ 易扩展:**可在提交任务同时,增加配置。

Spark架构:

① Spark 作为整体的容器;

② Spark Driver:PS 的 Coordinator;

③ Spark Executors:分化为 PS Server 和 PS worker 两个角色。



(3) MindAlpha---模型拆分

由于模型规模较大,常进行模型拆分,常见的两种拆分模式如下:

**① Dense:稠密网络,**如 MLP 中全链接网络,每个权重即为全链接层上的一个参数。稀疏数据进行表达计算时,必须要 one-hot 编码成矩阵。

**② Sparse:稀疏网络,**每个特征整理为 HashK 方式,稀疏数据能够数值化表示即可。

**思考:**连续型特征如何处理?

① 数据间有关联,无限可分,存储到 Sparse 中,将无法控制模型大小。

② 最好方式为降低精度,进行分桶。



(4)MindAlpha-maAPI 支持

MindAlpha 对于 API 的支持:

**① 数据读写:**Spark 支持的数据源,并进行特殊处理,如 csv、orc、txt 等;

② 模型源语:开箱即用、一站式完成;

1)load & save(加载和存储模型);

2)fit & transform(训练和测试);

3)export(导出);

4)publish 到线上。

③ 优化器:

Adam(常用于 dense,动量累加的方式逐步适应新的学习内容)、Ftrl(常用于Sparse,截断过低权重的参数值,截断方法如 L1 正则等)、Lamb 等。

④ Embedding 内置算子:sumConcat、lookUp、sumRange 等。



3. MindAlpha- 重点 Topic

(1)同步&异步计算

同步计算:

① 一个 task 完成,需等待;

② 设置 barrier,task 全部完成,才可进行一次梯度更新;

③ 保证 task 全部计算完成才进行下一步 pull;

④ 保证模型的稳定性。若算法对前后结果依赖度高,则必须采用同步方式。

异步计算:

① task 完成,即可更新参数,下一个 task 可在计算过程中就开始使用该新参数,再生成结果;

② 若算法的鲁棒性较高,擅长从随机解得到信息,可采用异步计算方式;

③ 压缩了等待 wait 的时间;

④ Bounded delay:该值为算法进行一次同步的等待时间。可通过自动调参或优化算法计算得到。

**思考:**异步计算下模型参数不一致一定会导致效果变差吗?

在实践中不一定。类比非凸优化问题,存在通过随机过程找到更好解的可能性。

串行&并行

① 数据并行:

1)采用较多为数据并行;

2)初始模型加载时需要装载大量数据,可将其分发到不同机器运行。

② 模型并行:

1)解除模型的前后依赖,拆分成独立的组件。

2)有些模型不适用,如时序类、仿真类。



(2)CPU&GPU

**① CPU:**适合 IO 密集型、内存随机访问作业,有较强的逻辑计算能力,适合调度、管理。

**② GPU:**适合计算密集型、核数多、浮点运算快、并行能力强。

不同场景 CPU 和 GPU 选择

① 若当前为一个简单的线性模型 LR,使用 GPU,相当于在做串行计算,只增加成本,并不能增加效率。

② 若 CPU 计算成本较大,可将 PS 架构的一个 worker 替换成 GPU,加快 Forward、Backward 计算等,server(参数存取、模型读取加载等操作多)采用 CPU。

重点: 判断你的系统瓶颈,如何判断系统瓶颈?

可在平台接入 Spark UI,内置一些埋点,方便了解 IO 耗时、数据读写耗时、通信时长、计算耗时等。

--

03/MLOps 建设


MLOps(Machine Learning Operations)统一 ML 系统开发(dev)和 ML 系统部署(ops),以标准化过程生产高性能模型的持续交付。

当前很多公司如亚马逊、阿里等都有相应的建设,汇量也有相关的建设,如 IDE 建设、云原生 & CI 建设等。

1. IDE 建设



IDE 主要依赖于 Jupyter,完成代码调试,定义简单 API,import 平台提供的框架,进行运行(run)。

**(1)Local 模式,**在 Jupyter 的本地进行计算;

**(2)Cluster 模式,**将会自动提交到集群。

提交完后,可提交 Git tag,算法同学提交 Git Tag 后,会生成算法项目文件。MindAlpha 的开发人员 Git Tag 会生成的一个 MindAlpha 镜像。

2. 云原生 & CI 建设

Git Tag 生成的 MindAlpha 的镜像,支持 Yarn 和 K8S(支持多机型,如 X86、ARM)。

Yarn 是一个常见的资源管理工具,可做资源隔离;K8S为容器编排工具,资源管理是其内容之一,还可编排容器、计算,做到弹性伸缩,这为大规模分布式机器学习平台的成本控制提供了有力支持。



3. 汇量计算平台架构

下图为 MindAlpha 计算平台的整体架构。



(1)MindAlpha 训练平台,算法工程师大部分的工作在该平台完成,完成训练后,将模型推到 NPS 在线推理平台。

(2)NPS 高性能在线推理平台,包括模型部署、在线推理、模型监控、弹性伸缩。

① 由于广告业务的特殊性(程序化广告),在用户打开页面的瞬间即产生广告市场上的需求,对于需求的竞价的耗时通常不超过 300 毫秒,因此需要极致的性能。

**(3)EnginePlus 大数据平台,**提供一站式的数据解决方案,包括特征生产、数据查询、模型调度,集群管理和日志管理等。

--

04/机器学习平台发展之路


1. 模型裁剪

高性能的分布式机器学习平台,计算的极致优化,如通讯、数据量、模型。

(1)模型裁剪

**① FP32 的精度降低为 FP16,**在运算或实际使用上,后几位精度会失真。精度降低后,实际模型效果不会下降太多,但模型大小会下降近一半。

**② 神经网络剪枝,**如使用 L2 等正则化手段或采用数据分析方法分析特征之间独立性、特征与 label 的相关性,从而删除一些无用特征,重新训练一个更小的模型。



2. AutoML

**自动机器学习(AutoML)**是尽量减少人工经验调整,实现机器学习的端到端(数据管理、模型结构设计、模型超参数调节、模型的评估与使用)的自动化完成。



今天的分享就到这里,谢谢大家。



▌DataFun2023线下大会 火热报名中


第四届DataFunCon数据智能创新与实践大会将于⏰ 7月21-22日在北京召开,会议主题为新基建·新征程,聚焦数据智能四大体系:数据架构数据效能算法创新智能应用 。你将领略到数据智能技术实践最前沿的景观

点击图片看大会详情,欢迎大家点击下方链接获取门票 DataFunCon2023(北京站):数据智能创新与实践大会