长清网站建设价格,998元网站建设优化,网站seo相关设置优化,做平面设计兼职的网站有哪些「免费学习 60 节公开课#xff1a;投票页面#xff0c;点击讲师头像」作者 | 陈迪豪#xff0c;第四范式资深架构师编辑 | Jane来源 | AI科技大本营#xff08;ID#xff1a;rgznai100#xff09;一、机器学习场景与高性能特征管理中台理想的机器学习场景是给到数据 节公开课投票页面点击讲师头像」作者 | 陈迪豪第四范式资深架构师编辑 | Jane来源 | AI科技大本营IDrgznai100 一、机器学习场景与高性能特征管理中台 理想的机器学习场景是给到数据训练模型后就能直接上线服务。然而真实的 AI 应用落地过程非常复杂并不是有数据、懂算法就可以了。 首先建模具有一定门槛建模科学技术人才除了要懂机器学习算法还要知道熟悉建模业务场景会使用 SQL、Python 做数据处理、特征拼接、支持时序特征建模完成到上线要保持在线与离线一致性实现高性能硬实时预估服务工程上涉及特征监控、读写分离、实时特征计算这些情况在真实的 AI 应用场景中都要考虑到。 以我们合作的某银行事中反欺诈场景下的性能要求为例首先实时性要求 P99 响应时间在 20 毫秒以内 比大家在业务里统计的平均延时要小很多只有 1% 的时间可以在 20 毫秒以上二是建模特征非常复杂在线和离线的模型特征超过1000个三是窗口特征需要能够在实时场景中生成四是模型迭代周期短需要定期上线更新。 在这种情况下对企业特征管理中台有什么要求 1、存储和计算必须是高性能的2、对离线特征的支持要与在线保持一致性3、训练得到的模型要支持端到端的预估4、支持单行和时序特征5、预估服务支持分布式高可用。 其中为什么强调特征的离线在线一致性 用开源软件一般可以做到的是离线积累一部分数据然后用开源的深度学习框架训练模型模型上线时把模型加载进来但是机器学习除了模型预估还包括前面的处理过程每个离线特征要支持在线预估都需要花几倍时间进行维护以确保离线数据到在线预估的特征数据是一致的。 我们如何保证离线在线一致性呢 通过一个统一的特征描述语言用户离线环境中用这种统一特征描述语言进行表示与建模在线环境中直接使用这个建模脚本来上线。 它的基本逻辑架构 1、离线阶段是模型训练阶段使用分布式存储存储原始数据大数据处理引擎获得数据后进行划窗窗口有不同的聚合计算逻辑通过聚合计算得到一系列特征这种特征可能是跨行和跨表的最后生成的数据处理经过特征签名可以直接给深度机器学习框架做训练。这是离线的阶段将数据处理部分翻译成Spark以分布式任务的方式运行。 2、在线阶段肯定不能依赖 Spark 做实时预估只可以使用流式接口实现近实时的计算但因为我们有一个统一的特征描述语言所以可以保证特征计算生成的代码与离线阶段是一样的这样也就保证了离线在线保持了计算逻辑的一致性。 3、特征抽取的数据怎么来离线阶段可以通过读分布式存储然后通过划窗来获取AI特征管理中台中的存储组件包括一个实时特征时序数据库通过这个时序数据库可以获取在线的窗口数据然后实现一个高性能的模型评分服务。 二、特征管理中台的计算和存储核心剖析 这部分将主要介绍整体架构和计算、存储两大引擎。 如上图所示整体架构的左侧是用户接口用户可以用控制台、命令行、SDK的方式访问核心组件。底层是硬件包括 HDD、SSD、网卡等中间层是特征管理的两个重要组件FE特征计算与存储引擎在线有超高性能全内存时序数据库得到的数据可以给自研的机器学习框架使用或者给 TensorFlow 等开源的框架使用。 我们的特征描述语言是什么其实是针对机器学习场景中定制的 DSL有针对这种语法的编译器和解析器。语法可以参考下面的例子第 1 行代码表示创建一个窗口通过窗口的参数可以保证后续每一行的特征计算都在一个窗口数据内在窗口数据内可以做很多复杂的计算。第 3 行是单行计算特征很简单像大家用过的 Spark 或 Python 都包含了很多特征计算如内置支持日期处理像条件表达式这类复杂的计算大家可以用 SQL 或者 Spark。另外我们自己跟标准窗口不一样的部分是根据科学家反馈设计跨表的窗口计算、拼表计算特征、特殊拼表特征也可以在 DSL 中描述。 为什么要设计DSL首先机器学习产品中数据处理的逻辑是固定的它跟 SQL 不一样。SQL是通用数据处理语言很多方法是标准 SQL 中没有的对条件表达式的处理或某种时间特征的计算都是通过自定义来支持的。通过这种描述语言生成一个特征可以保证在线也能够使用 。 第二种接口是 SQL。SQL是目前最流行的数据处理语言可以对全表做Partion分区分区后可以排序或者做聚合计算也可以做全表的数据处理但标准的 SQL 是没办法上线的有很多 支持SQL 的系统如 MySQL、Spark、Hive 等虽然支持了丰富的数据处理逻辑但都是不可以直接上线的。 为什么SQL上线这么困难了因为 SQL 的聚合计算可以是当前行也可以是当前一段时间的窗口数据实际上如果在 SQL 里对当前行以后的数据做聚合计算就会造成差数据穿越问题。用一个机器学习场景中的例子进行解释你要计算当前交易是否属于欺诈交易取得的时间是在这个时间以前某一天的时间和当前时间以后的某一个时间进行特征计算但在实际上线时是没办法获取未来数据作为特征计算的这种建模时就出现的穿越特征也会严重影响模型上线后的效果。 这种特征可以通过SQL的窗口函数来获得我们称之为穿越特征也就是在特征计算时是不应该引用当前行以后的数据因为在真实线上预估中无法获取比当前行以后的数据。在我们的特征管理平台中对于时间窗口的定义就限制了following参数必须是 Current Row不计算当前行以后的特征。在这种限制的情况下在线预估时就确保了窗口数据不会超过当前行前面的数据可以通过时序特征数据库来做聚合这种方式也保证优化后的 SQL 是符合机器学习在线预估的要求的可以直接上线到实时预估服务中。 我们对 SQL 还有一些定制化拓展例如对数据处理后的列可以做连续或者离散的特征签名计算这是针对稠密和稀疏特征常用的签名方法。因为机器学习的输入数据不一定是大宽表推荐系统中的输入一般都是非常稀疏离散的这种稀疏数据结构在 SQL中是无法表示的我们通过语法的拓展让它直接生成样本文件这种样本文件本身支持稀疏和稠密的格式可以直接对接开源的机器学习框架。 除了面向用户的特征描述语言特征管理中台还支持 AutoML自动特征工程用户只需输入原始的多个表数据AutoML 程序可以对它进行自动分组与自动特征筛选给出组合后的特征效果的评估在一定的计算资源下进行迭代优化最后生成SQL和特征描述语言配置在线服务也可以直接使用导出的配置来上线。 在计算引擎中还有非常多的功能优化点1、支持多行时序特征不只是针对单行计算还可以对多行做聚合2、支持强类型检查支持 Map、List 复杂结构和 Lambda 表达式3、实现 Last Join功能实现超高性能的多表拼接功能4、实现定制化跨表Window功能实现高效的跨表划窗特征生成什么是跨表Window就是划窗的主表数据跟获取窗口数据的副表可以不是同一个表5、支持 TensorFlow、LightGBM 和自研究机器学习机器等6、预热编译以及内存编译器使用Javac的编译优化7、支持动态加载 UDF、UDAF 等用户自定义函数和功能。 计算性能也有很多优化1、优化Spark的Window实现支持 CodeGen 函数以及跨表窗口计算2、同一进程内的内存编译优化充分利用 Java 编译器优化生成高性能 byte code3、支持特征级别的异常隔离用户在同个窗口的多个特征计算不会因为数据异常导致特征失败也不会影响其他特征4、对表达式也做了重写优化常量表达式可以直接替换对重复计算没有结果的表可以做提前剪枝并且复用中间表达式的变量5、在反欺诈机器学习场景中相同特征下与 PySpark、SparkSQL相比提升了10倍性能6、支持 RDMA 和 FPGA 硬件加速 对生成样本做高性能压缩 高性能版本比纯软件版本提升了3倍性能。 上面提到的都是计算核心的组件再说说实现高性能、高并发、时序优化的存储核心——自研的全内存分布式时序数据库。为什么是时序数据库因为我们在机器学习场景中很多特征都是基于时窗聚合而成的窗口的特征就要求数据按时间序列进行排序和计算。 对于常见的机器学习场景例如每笔交易都需要了解前序交易的情况IoT的场景下需要提前获得不同设备在不同时间段类的数据信息所以面向 AI 的时序数据库在机器学习场景中非常有价值。 我们的时序数据库还支持多维度的查询和聚合支持常见的按行数的数据淘汰策略和TTL。在特征管理中台中还有基于英特尔傲腾持久内存AEP的优化这是一种全新的存储技术介于内存和 SSD 之间的非易失性的存储跟写到 SSD 一样数据不会丢失同时可以把它当成内存来用。AEP存储的成本比内存低很多但是会像内存一样优化实现高性能使用AEP优化以后性能可以提高 3 倍以上。基于这种新的存储介质可以实现根据热度的分层存储对非常热的数据可以把表放在全内存里对没那么热的数据可以放在AEP或者硬盘存储中。 三、特征管理中台在生产环境的应用实践 在一个真实场景 B2C Antifraud 业务中交易表原始数据表有 2 张交易表和 7 张属性表。它的数据量非常大总体特征超过 800 个特征包括基于卡号维度做窗口聚合等数据或者基于设备维度来定义窗口大小和时间段。 模型训练需要的基础特征包括交易特征、卡特征、客户特征、商户特征以及这几个特征的交叉组合 。时序特征包括每张卡和每个设备维度所统计过去交易的最大值、最小值、数量、是不是第一次交易等。最后用到的单表有 5000 万数据生成的特征有 19 亿维为什么这么高维因为用户的设备ID、所在的城市都会离散化为了避免冲突会用使用超高维稀疏值来存生成的总特征就有 19 亿维需要 3T 内存来计算。 在特征管理中台还包括不同类型的数据和特征脚本的管理支持远程调试环境支持单机 的Notebook 运行支持全流程的一键上线上线后预估接口是原始数据表输入不需要在原始输入上再做数据的预处理和特征抽取处理。对此我们还提供了 Python 客户端用户可以写 Python来执行特征抽取逻辑也可以使用支持的SQL语法后面可以基于这个特征描述脚本来进行模型训练和应用上线了。 同时我们也支持 TensorFlow 的分布式训练和内部机器学习框架的分布式计算模型部署只需要一个简单的命令部署成高可用的模型预估服务可以看到在线预估的输入数据都是原始的表数据训练时输入表有多少列这里输入多少列就可以最后预估后返回特征抽取已经模型预估的结果。热 文 推 荐 ☞刚发布新型病毒下程序员可在家免费学习了☞中国芯片全景图万字长文先马后看☞云计算的 2020云原生崛起重新定义软件☞万字长文Unix和Linux你不知道的那些历史详解版☞比特币区块链将分道扬镳、Libra 苦难继续2020 区块链进入关键时期用开发者的方式共克时艰