「风控算法服务平台」高性能在线推理服务设计与实现

news2024/9/22 5:36:30

本文作者:郁昌存 来自京东科技-风险管理中心

一、背景/目标

1) 风控智能化体系建设依赖大量深度学习/机器学习模型进行实时在线的风险识别、智能决策。要求可以将算法模型快速部署为在线服务,供决策引擎调用。

2) 风控决策引擎涵盖交易、支付、营销等核心链路,业务场景对决策系统性能要求极高,平均tp99<50ms。要求算法模型实时服务在高吞吐量下,仍能满足性能要求。

3)精细化运营大背景下,算法模型服务需要支持大促不降级,且不能通过野蛮加机器方式提高吞吐量。要求从技术及架构层进行改进,对算法模型在线推理性能有质的提升。

二、平台整体概览

三、产品功能

 

 

四、在线推理模块设计方案

本文主要以在线推理服务模块展开讲解:

1. 多引擎支持

抽象底层,将不同框架实现、自定义脚本语言统一定义为引擎,引擎提供模型load、predict方法。

1)自定义脚本引擎:Python、Groovy。

2)机器学习引擎:Pytorch、Tensorflow、MxNet、XGBoost、PMML、TensorRT。

3)支持引擎动态扩展,接口继承实现load、predict方法即可。

2. 高性能

  1. 集成native引擎。

2)优化pyhton执行引擎,改变传统REST接口封装方式,规避python GIL性能限制。

3)除推理操作外,其余流程全部异步化。

4)CPU精细化控制。

  1. GPU实时推理支持。

3. 动态部署

1)基于服务网关支持模型的动态发现、动态路由。

2)管理端配置模型服务信息,后通知模型计算节点,节点进行模型文件下载、启动加载及服务注册。节点定时检查,校对需要上线/下线的模型。

3)对外提供统一jsf(公司内部RPC服务)/rest接口,基于业务+场景获取对应模型计算节点列表,进行负载转发。

4. 计算资源动态调整

1)对模型计算节点进行资源分组,不同资源组配置不同规格机器资源(基于JDOS可轻松实现)。

2)模型可部署至1到多个分组上,支持单机器多模型混部,通过网关进行路由转发。

5. 灵活输入数据源支持

支持实时加工数据,r2m(公司内部redis集群)、hbase数据源等作为模型输入数据。

五、在线推理模块实现

1. 在线推理服务模块设计

 

2. 核心功能及实现

1)网关服务注册及路由

将单个模型服务抽象为一个独立的微服务,因此可套用微服务技术架构。基于SpringCloud,使用nacos做注册中心、ribbon负载、feign做服务间接口调用。

2)模型动态部署

▪管理端上传模型文件,配置对应的推理引擎,配置服务相关参数。

▪定义模型适配器为translator,Translator接口包含preProcesspostProcess方法,分别对应模型的前置和后置数据处理。Translator实现类支持动态编译加载(groovy/字节码),管理端配置时,定义对应模型translator代码,模型加载时进行代码动态编译和注册,如此可实现灵活的配置化方式。

服务节点通过事件广播、定时检查机制,更新拉取对应模型文件及适配器代码,执行模型部署。

模型部署成功后,将相关信息注册的服务网关,业务请求通过网关入口进行路由。

模型调用过程:

▪对于模型输入数据,在translator前置处理(preProcess)中获取对应数据源/实时加工数据,汇总后进行数据对齐、标准化处理

▪数据喂给模型,使用对应推理引擎执行推理操作,得到模型输出结果。

▪对于模型输出结果,在translator后置处理(preProcess)中进行模型输出结果解析提取、线性调整、解释加工等

3)模型服务网关

支持服务动态注册、发现,基于nacos服务发现。

支持模型服务负载、路由,基于feign+ribbon。

支持一键降级/限流,基于nacos配置中心实现。

支持A/BTest、灰度发布,从配置中心获取到服务节点列表后,通过配置规则做对应路由转发即可。

支持实时推理数据回落10K(公司内部大数据集群,支持MQ消息管道落数),方便算法人员进行模型迭代验证。发送请求出入参数MQ,通过MQ落10K。

4)模型自动迭代

提供python sdk,打通KuAI(公司内部一站式AI模型开发平台),模型推理数据通过MQ回落10K,算法同学通过KuAI提取数据加工,对模型进行迭代训练,验证完成后将训练好模型通过python sdk部署至算法服务平台,替换/灰度提供在线服务。

实现实时推理数据回落模型再训练模型版本迭代 流程自动化基于此实现风控领域自动对抗能力。

5)打通风控决策体系

集成风控特征平台,支持食蚁兽(风控自研流式数据加工平台)、flink数据获取,支持hbase、r2m(公司内部redis集群)等数据源数据获取,解决模型输入数据加工问题。

无缝对接天盾风控引擎,支持模型快速转换为决策引擎原子规则。

3. 在线推理性能优化

1)集成native引擎

集成常用机器学习框架C++ lib库,通过native调用方式使用C++来执行模型的推理,速度飞快。

如何整合各个lib库,及其间接so包依赖?JDOS 容器化(JDOS是公司内部基于k8s的一体化应用部署平台),一遍趟坑,构建基础环境镜像,解决各种环境依赖,在此之上构建应用镜像。

2)优化python引擎调用方式

由于python GIL(全局解释锁)的存在,同一时刻一个python进程只能使用一个CPU,传统通过flask封装Rest接口包装模型服务方式在高吞吐量场景存在严重性能瓶颈。

通过使用本地进程通信(基于socket),在计算节点启动多个python进程实例,由计算节点(java进程)统一管控python进程,通过多进程来规避GIL限制,提升CPU资源利用率。

3)模型计算资源动态分组

由于网关的存在,模型分组就很轻松随意了,建立对应的路由映射关系即可。

可以通过不同模型对CPU/GPU要求不同、计算资源量、IO请求量、内存占用量等进行组合调配,实现机器资源的最大化利用。

4)线程池资源隔离,参数动态配置

针对每个模型服务,建立独立的线程池资源和处理队列,这里很关键,后续很多优化都基于线程池和队列,相关配置(queueSize、batchSize、waitTime、workers等)可在管理端进行配置,模型加载时使用动态配置进行加载。

资源混部下,独立的线程池资源可控制每个模型最大资源使用量,防止单个模型服务流量异常对其他模型服务造成影响。

其次将tomcat线程资源与模型计算资源进行解耦,保障模型的计算不阻塞其他web资源访问。

5)CPU精细化利用

模型推理服务不同于大多数的业务应用,业务应用多为IO密集型服务,多数业务操作为读写DB/cache等,多数时间消耗在IO等待,该类应用可以通过适当加大处理线程数来提升整体吞吐量。

然而模型推理服务为强计算密集型服务,对CPU消耗极大,如果对于每一次推理请求,都创建一个线程来进行进行推理,则会出现CPU高速运转且线程频繁切换状态,效率肯定高不了。如何解决?

5.1. 限制引擎框架CPU使用核数:

比如pytorch框架在推理时默认会使用全部CPU,这种情况对于只有一个训练任务时无疑是最高效的,但是对于在线推理服务来讲,单机每秒处理上千请求量,第一次请求把CPU占满,后面的请求只能和前面请求共享CPU,等待时间片切换分配计算,来回切换上下文处理,效率并不会高。这时候限制单次推理使用单核CPU,其他请求过来后分配到其他空闲CPU上,减少线程切换次数,提升处理效率。数据对比验证,进行CPU核数限制后,tps可提升5倍以上,且tp99 也可提升40%以上。

5.2. 增加处理队列,使用独立线程池有序处理每次请求

CPU利用率最高的状态是,同一时刻单核CPU只处理一件事情,当本次请求处理完成后再继续下次请求处理,解决方案如下:

 

模型推理请求进入后,放入模型独立的处理队列,创建Future对象,由各模型独立的worker线程池来执行模型推理任务。如此,通过控制worker线程数量,尽可能减少上下文切换次数,提升CPU利用率。

6)深度模型batch聚合

对于深度模型来说,处理卷积运算,执行一次batchSize=10的推理的耗时远小于执行10次batchSize=1的推理耗时。

由此我们可以通过如上队列+独立线程池,天然的将请求和计算逻辑解耦,于是可以将单条的推理进行batch聚合操作,结果业务场景通过时间窗口+batchSize对推理请求进行聚合,即在一定时间内,batchSize到达制定数量或等待时间到了,将聚合的多条推理请求一次性送入模型,进行执行推理。得到结果后依次分发,响应各future。

7)GPU推理加速

▪主要是环境依赖:容器环境下安装gpu驱动,cuda/cudnn。比较好的实践方案是使用NVIDIA 官方的docker镜像作为基础镜像,在此基础上构建公司内部基础依赖base镜像,再基于base镜像构建环境服务依赖->应用镜像。

8)除模型推理外,其他处理逻辑均异步

▪场景管理/路由规则查询异步化,基于caffine本地缓存,当本地缓存过期时,异步加载更新数据,不会造成穿透及tps抖动。

▪推理结果MQ落10K,MQ发送逻辑异步+批量化。与模型batch聚合类似,MQ消息推送本地内存队列,开启单个MQ发送线程,拉取队列消息,满足时间窗口/batchSize后进行聚合发送。

▪使用异步日志,性能提升约30%。

六、性能对比(提升近百倍)

以风控滑块人机识别CNN模型为例,使用tensorflow引擎,基于老的模型服务平台与迁移新的算法平台后,接口性能提升近百倍!

 

 

大促多个模型混个压测,整体性能如下:(CPU 使用率55%,满负荷(80%)下可达10W+ tps,tp99 11ms)

 

七、结语

目前算法服务平台为内部天盾决策引擎、滑块人机识别以及保险业务等多个场景提供实时模型推理服务,支撑相关模型推理服务大促不降级。

以上为在线推理服务模块整体设计与实现方案,其中细节部分未详细展开,感兴趣部分欢迎大家随时沟通交流~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/33045.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

文献 | 教师主观幸福感变迁:横断历史研究的视角

Hello&#xff0c;大家好&#xff01; 这里是壹脑云科研圈&#xff0c;我是莹~ 疫情带来的社会经济变化正在改变着我们的求职意向&#xff0c;越来越多的人参与到考公考编的大军中。其中&#xff0c;教师这一职业的稳定性和社会认同度吸引了越来越多的年轻人参加教资考试。 教…

Linux Top 详细介绍,包含task排序

Linux Top 当我们在终端输入 top 命令时&#xff0c;会弹出一个变化的页面&#xff0c;打印出当前系统的大量重要指标&#xff0c;以及很多进程当前的运行情况&#xff1a; 可以看到&#xff0c;top 命令主要是两部分&#xff0c;第一部分为 头部指标&#xff0c;打印的是当…

磨金石教育摄影技能干货分享|那些酷炫的照片是怎么拍出来的?

在网上我们经常会看到一些非常有创意&#xff0c;非常炫酷的照片。喜欢摄影的朋友肯定会想&#xff0c;这样的照片怎么拍呢&#xff1f;由于照片的创意度很高&#xff0c;导致很多人想模仿却不知道怎么模仿。以前学的那些构图、选景等技巧&#xff0c;好像不太够用。 今天我们…

2022年文化艺术品产权交易所研究报告

第一章 文化艺术品产权交易所发展概述 1.1 文交所概念 文化产权交易所&#xff08;简称“文交所”&#xff09;从事文化产权交易及相关投融资服务工作&#xff0c;促进文化产业要素跨行业、跨地域、跨所有制流动。文交所从事的创新业务主要是文化艺术品的份额化&#xff0c;即…

idea 配置ssm项目后配置文件的简要解析及功能类之间的联系

注&#xff1a;本文不包含怎么配置 idea ssm 项目&#xff0c;仅做个人向配置好之后&#xff0c;对于各个文件的分析及跳转之间的的浅解析&#xff08;之前照着配的文章找不到了qwq&#xff09;。 叠甲&#xff1a;新手&#xff0c;刚学&#xff0c;不太会&#xff0c;如有错请…

初识Python_数据容器_字符串str

一、再识字符串字符串---字符的容器。一个字符串可以存放任意数量的字符1、字符串的下标&#xff08;索引&#xff09;和其他容器如&#xff1a;列表、元组一样&#xff0c;字符串也可以通过下标进行访问从前向后 下标从0开始从后向前&#xff0c;下标从-1开始同元组一样&#…

11个精美网页——Web前端开发技术课程大作业,期末考试,Dreamweaver简单网页制作

HTML实例网页代码, 本实例适合于初学HTML的同学。该实例里面有设置了css的样式设置&#xff0c;有div的样式格局&#xff0c;这个实例比较全面&#xff0c;有助于同学的学习,本文将介绍如何通过从头开始设计个人网站并将其转换为代码的过程来实践设计。 精彩专栏推荐&#x1f4…

罗茨气体流量计的结构设计

目 录 摘 要 I ABSTRACT II 1绪 论 1 1.1 引言 1 1.2 罗茨气体流量计的特点 1 1.&#xff13;罗茨气体流量计的应用场合[3] 2 1.4 发展前景[5] 6 2罗茨气体流量计的工作及结构原理 7 2.1 罗茨气体流量计的工作原理[3] 7 2.2罗茨气体流量计的结构原理 7 2.2.1 罗茨气体流量计的结…

echarts——实现3D地图+3D柱状图 效果——粗糙代码记录——技能提升

最近看到同事在弄下面的这个图&#xff0c;这个图是从网上看到的&#xff0c;是某个网站的收费项目&#xff1a; 收费模板&#xff1a;&#xffe5;29.9元购买&#xff0c;且必须是高级版尊享版才能够购买这个。。。 死贵&#xff01;&#xff01;&#xff01; 所以&#xf…

多臂PEG衍生物——8-Arm PEG-N3,8-Arm PEG-Azide,八臂-PEG-叠氮

多臂PEG衍生物八臂-聚乙二醇-叠氮&#xff0c;化学试剂其英文名为8-Arm PEG-Azide&#xff0c;8-Arm PEG-N3&#xff0c;它所属分类为Azide PEG Multi-arm PEGs。 八臂PEG叠氮的分子量均可定制&#xff0c;有&#xff1a;八臂-peg 5k-叠氮、八臂PEG 2k叠氮、叠氮-聚乙二醇 10k…

19 06-读取DTC扩展数据记录

诊断协议那些事儿 诊断协议那些事儿专栏系列文章&#xff0c;19服务作为UDS中子功能最多的服务&#xff0c;一共有28种子功能&#xff0c;本文将介绍常用的19 06服务&#xff1a;读取DTC扩展数据。 关联文章&#xff1a; 19服务List 19 01-通过状态掩码读取DTC数目 19 02-检…

PL/Java的安装及使用

安装步骤 1.1 下载相应扩展包 https://network.pivotal.io/products/vmware-tanzu-greenplum#/releases/1193700 1.2 上传并安装pljava-2.0.4-gp6-rhel7_x86_64.gppkg [gpadmingp_master ~]$ gppkg -i pljava-2.0.4-gp6-rhel7_x86_64.gppkg 重启数据库 [gpadmingp_master ~]$…

企业管理中,商业智能BI主要做哪些事情?

开门见山的告诉大家&#xff0c;在企业管理中商业智能BI 主要就做三件事&#xff1a;拉通数据、整合数据、数据可视化展现。 技术角度的商业智能BI 从技术的角度来讲&#xff0c;商业智能BI是一套完整的由数据仓库、查询报表、数据分析等组成的数据类技术解决方案。它有一个非…

【计算机毕业设计】23.图书馆管理系统源码

一、系统截图&#xff08;需要演示视频可以私聊&#xff09; 1 绪论 1.1 开发背景 图书馆管理系统的特点是从图书管理的角度出发&#xff0c;用集中的数据库将几乎所有与图书相关的数据统一管理起来&#xff0c;形成了集成的信息源。有好的用户界面&#xff0c;强有力的报表生…

AMR论文阅读之:ATP: AMRize Then Parse! Enhancing AMR Parsing with PseudoAMRs

文章目录AbstractIntroductionMethodologyAuxiliary Task selectionSRLDPAMRizationTranform SRL to PseudoAMRConnectivity FormationArgument ReductionReentrancy RestorationDependency Guided RestorationTransform Dependency Structure to PseudoAMRRedundant Relation …

容器技术-Docker的优点

当产品运行在内部的虚拟化平台中&#xff0c;如openstack&#xff0c;也就是KVM虚拟化&#xff0c;创建虚拟机&#xff0c;但是不断增加的云端应用&#xff0c;增加了对硬件资源的消耗&#xff0c;不断的创建虚拟机&#xff0c;消耗了大量的硬件资源。 那么如何高效的利用硬件…

2022美亚个人赛复盘

个人赛加密容器解密密钥 CZDGm#&2_Ns$7wSMn%ZGr7xntcHS7d5uFta#Up9544jx_cvP$uFM7?pTDa*jN&QyFDLS8U%hx$fXN^BY$Xsj3F^y#4QFXb*UqwLmkCE7?&YpnX6shKrzpVE%v?& 案件详情 于2022年10月&#xff0c;有市民因接获伪冒快递公司的电邮&#xff0c;不慎地于匪徒…

激光雷达Velodyne16配置及录制rosbag

激光雷达Velodyne16配置一、配置IP二、安装ROS依赖三、创建工作空间四、录制bag数据包硬件准备&#xff1a;连接电源线及网线一、配置IP 1.设置有线的IP地址 设置->网络->有线连接->IPV4->手动 地址&#xff1a; 192.168.8.70 掩码&#xff1a; 255.255.255.0 网关…

力扣刷题(代码回忆录)——二叉树部分

关于二叉树&#xff0c;你该了解这些&#xff01;二叉树&#xff1a;二叉树的递归遍历二叉树&#xff1a;二叉树的迭代遍历二叉树&#xff1a;二叉树的统一迭代法二叉树&#xff1a;二叉树的层序遍历二叉树&#xff1a;翻转二叉树本周小结&#xff01;&#xff08;二叉树&#…

Vue知识点整理(待更新)

Vue知识点整理&#xff08;待更新&#xff09; 参考Vue.js中文官网&#xff0c;Vue 知识点汇总&#xff08;上&#xff09;–附案例代码及项目地址&#xff0c;Vue 知识点汇总&#xff08;下&#xff09;–附案例代码及项目地址&#xff0c;Vue知识点汇总【持更】 文章目录Vue…