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

一、背景/指标

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精细化管制。

5) 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)

七、结语

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

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