高德算法工程一体化实践和思考

简介: 高德算法工程一体化的建设过程也就是满足业务从初创期到成熟期迭代的过程。

背景
随着高德地图业务的快速开展,除了导航本身的算法业务外,其他中小型业务对算法策略的需求越来越多、越来越快,近两年参与的一些新项目从算法调研到应用上线都在一周级,例如与共享出行相关的各种算法服务,风控、调度、营销等各个体系的业务需求。类似于传统导航中成熟的长周期、高流量、低时延的架构和开发方式已无法满足此类业务初期的快速试错和优化改进诉求,找到合适的为业务赋能的算法服务方式就变得势在必行。

在落地实施的过程中,采用一体化架构。所谓的一体化是指整个算法、工程一体化,涉及数据、系统等全链路打通,实现数据流的系统化流动;算法业务调研兼顾工程服务开发,测试、验证过程自动化、智能化,从而形成业务闭环,推动业务的快速迭代。

项目初期,需要快速试错和策略优化。此时,业务需求的QPS往往不高(<1k),因此,传统的应用开发和部署方式,一方面拖慢了业务节奏,另一方面浪费了大量资源。

在此过程中,我们希望达到的目标就是离线策略调研即服务逻辑开发,离线调研完成即服务化完成,这样就能够显著降低算法调研到策略上线的时间。因为性能(QPS、RT)压力不大,离线用Python进行快速的开发就成为可能。

从长期看,随着业务逐步成熟,算法快速组合、服务调用量和服务性能成为衡量算法服务重要的评价标准,此时合理的优化就应该被向前推进,例如核心算法逻辑高性能化将会变成重要的工作。

因此,算法工程一体化的建设过程也就是满足业务从初创期到成熟期迭代的过程。

系统总体逻辑架构

chengdao1.png


整个平台类似于上图所示,主要由几个逻辑部分组成:
  • 统一接入网关服务
  • 业务算法透出服务
  • 算法模型及代码管理服务
  • 质量保障体系

注:GBFC为数据服务层,主要用于获取各种算法所需要的数据和特征,让业务算法服务达到无状态的条件,同时也便于数据在各条业务线的共享和共建。

统一接入网关

chengdao2.png


网关服务目的是将各种算法API进行隔离,提供原子服务和组合服务。业务端需要调用各种算法如价值判断、风险预估、营销推荐时,统一网关对各个业务提供统一算法API,避免各个服务重复调用。算法网关对算法进行统一监控,包括服务性能,接口可用性等,同时对数据进行统一收集,便于数据管理和特征生产,进行实时在线学习,提升用户体验,保障算法效果。

网关服务一方面可以进行一些共用的预处理操作,例如鉴权、路由、限流、降级、熔断、灰度、AB、陪跑等,用于保障服务的可用性和扩展性。同时又能进行服务组合,例如语音识别、图像处理等,使得各个算法服务能够有机的结合在一起,这样使得业务算法层只需要维护原子性服务,即可进行复杂的业务处理。

因此,网关服务必然需要一个灵活、弹性、轻量、无状态的算法业务层的支撑,在技术选型方面,目前火热的Serverless架构刚好能够很好的满足上述需求。

Serverless架构上的业务算法服务
2009 年,伯克利以独特的视角定义了云计算,尤其是最近的四年,这篇文章被大量引用,其中的观点刚好非常契合业务初期的技术场景,比如减少服务化的工作,只关心业务逻辑或算法逻辑,实现快速迭代、按需计算等。2019年,伯克利又进一步提出:

Serverless所提供的接口,简化了云计算的编程,其代表了程序员生产力的又一次变革,一如编程语言从汇编时代演变为高级语言时代。

在目前关于Serverless的探索中,FaaS基本被认为是最佳范例,这与其自身特点有关。FaaS非常轻量级,无状态,运行快,对于纯粹的无状态应用特别合适,虽然在冷启动层面存在一些瓶颈,但这种架构还是解决了很多问题,而业务初期的算法快速实践,刚好与这种架构的特点相契合。

在Serverless架构的基础之上,我们对算法服务按照下图的方式进行了部署。

chengdao3.png


按照上图所示,算法服务在本地开发完成后,可以直接作为Function进行发布,即之前所说的离线策略调研完成的同时就是服务代码完成。而这个特性也很好的解决了算法同学和业务脱节的问题,很多算法同学无法独立完成整个工程服务开发,需要将代码提交给工程人员进行整合、包装、发布,但这种协作方式在整个业务链条中是不合理的。

一方面算法同学无法独立完成业务支撑,另一方面,工程同学不仅要处理逻辑调用,还需要花时间去了解当前算法实现方式、原理、所需数据、异常情况等各种问题,经常是一个相对简单的算法服务,会议和沟通占据了绝大多数时间,因此引入FaaS不仅简化了这个业务开发流程,同时也让算法部署尽量是原子化,方便业务间组装复用。

我们在实现的路径上,首先完成了Python的运行时环境的构建工作,能够将Python代码及相关模型直接服务化,模型部分支持PMML,TensorFlow等,这样就实现了业务初期所需要的快速迭代,减少试错成本的诉求。

此后会逐步完善基于Golang,Java等运行时环境,选择Golang的原因是对于并行性支持良好,不仅可以实现业务所需要的性能诉求,同时又保留着开发相对简单的特点。

经过算法原子化、函数化后,就赋予了算法同学独立负责线上业务的能力,但也带了几个严肃的问题:服务的稳定性,工程的质量,服务的正确性。如果简单的把这些扔给算法同学,就仅是工作量的转移,并且还可能引起整个业务的宕机风险。因此,质量保障体系建设就变成了重要的一环。

质量保障体系建设
很多人会认为,要做质量保障,就是提交到测试人员进行测试或回归测试,其实不然。前两部分省却的人工成本被转移到测试同学的身上,因为算法同学的工程化能力相对偏弱,是不是就要引入更多的测试同学做验证?

如果抱着这种思维,那么,业务的迭代速度依然无法快速起来。因此就必须考虑:这种质量保障能否完全的自动化呢?答案是肯定的。

在策略的调研过程中一般会经历以下几个步骤,1. 数据分析;2.算法设计;3.数据验证;4.人工/自动评测;5.策略迭代重复步骤1-4。在这个过程中,刚好包含了质量保障体系所需要的数据、数据集、测试集及验证集。

算法同学可以通过使用三个集合实现自动化的压测流程,输出QPS、RT、一致率等相关信息,使用数据集,实现稳定性测试;使用测试集,实现了逻辑正确性验证;通过验证集实现了效果测试。

当然,上述只是质量保障的一部分。一般业务快速迭代的过程中,常常需要进行AB验证,或者是全量陪跑验证,在过程实施中通过引流和过程链,我们实现了全量陪跑的过程,对待上线的算法实现了全方位的质量评估。

小结
算法、工程的统一化建设基本实现了业务初期的快速迭代需求。在项目开展的过程中,对工程同学的挑战除了来自于工程化实践外,同时也需要对业务所处的阶段要有清晰的认识。

当前情况下,算法和工程之所以可以独立开展,有一个必要的前提是数据和算法分离,也就是算法服务是无状态、函数化的。正是因为如此,也需要花费不少的时间在特征服务层的建设上。同样,特征服务层的建设也可以遵循相似的逻辑实现共建、共享。

最后需要再次说明的是,算法工程一体化的架构设计能够基本满足业务类算法的诉求。但对于一些对计算量要求巨大的AI项目,频繁的数据获取导致的算力、功耗瓶颈已经明显制约算法创新。业内正在通过将数据存储单元和计算单元融为一体,实现计算存储一体化的硬件架构革新,突破AI算力瓶颈。

相关实践学习
【AI破次元壁合照】少年白马醉春风,函数计算一键部署AI绘画平台
本次实验基于阿里云函数计算产品能力开发AI绘画平台,可让您实现“破次元壁”与角色合照,为角色换背景效果,用AI绘图技术绘出属于自己的少年江湖。
从 0 入门函数计算
在函数计算的架构中,开发者只需要编写业务代码,并监控业务运行情况就可以了。这将开发者从繁重的运维工作中解放出来,将精力投入到更有意义的开发任务上。
相关文章
|
6月前
|
算法 安全 数据可视化
基于多目标鲸鱼优化算法(NSWOA)求解地铁隧道竖向位移和成本的双目标求解(以铁道科学报与工程文章为例)研究(Matlab代码实现)
基于多目标鲸鱼优化算法(NSWOA)求解地铁隧道竖向位移和成本的双目标求解(以铁道科学报与工程文章为例)研究(Matlab代码实现)
117 0
机器学习/深度学习 算法 自动驾驶
1174 0
|
6月前
|
算法 API 数据安全/隐私保护
深度解析京东图片搜索API:从图像识别到商品匹配的算法实践
京东图片搜索API基于图像识别技术,支持通过上传图片或图片URL搜索相似商品,提供智能匹配、结果筛选、分页查询等功能。适用于比价、竞品分析、推荐系统等场景。支持Python等开发语言,提供详细请求示例与文档。
|
9月前
|
监控 算法 安全
公司电脑监控软件关键技术探析:C# 环形缓冲区算法的理论与实践
环形缓冲区(Ring Buffer)是企业信息安全管理中电脑监控系统设计的核心数据结构,适用于高并发、高速率与短时有效的多源异构数据处理场景。其通过固定大小的连续内存空间实现闭环存储,具备内存优化、操作高效、数据时效管理和并发支持等优势。文章以C#语言为例,展示了线程安全的环形缓冲区实现,并结合URL访问记录监控应用场景,分析了其在流量削峰、关键数据保护和高性能处理中的适配性。该结构在日志捕获和事件缓冲中表现出色,对提升监控系统效能具有重要价值。
266 1
|
9月前
|
存储 机器学习/深度学习 监控
公司电脑上网监控中滑动窗口算法的理论构建与工程实现
本文提出一种基于滑动窗口算法的实时网络流量监控框架,旨在强化企业信息安全防护体系。系统采用分层架构设计,包含数据采集、处理与分析决策三大模块,通过 Java 实现核心功能。利用滑动窗口技术动态分析流量模式,结合阈值检测与机器学习模型识别异常行为。实验表明,该方案在保证高检测准确率的同时支持大规模并发处理,为企业数字化转型提供可靠保障。
221 0
|
10月前
|
监控 算法 数据处理
基于 C++ 的 KD 树算法在监控局域网屏幕中的理论剖析与工程实践研究
本文探讨了KD树在局域网屏幕监控中的应用,通过C++实现其构建与查询功能,显著提升多维数据处理效率。KD树作为一种二叉空间划分结构,适用于屏幕图像特征匹配、异常画面检测及数据压缩传输优化等场景。相比传统方法,基于KD树的方案检索效率提升2-3个数量级,但高维数据退化和动态更新等问题仍需进一步研究。未来可通过融合其他数据结构、引入深度学习及开发增量式更新算法等方式优化性能。
252 17
|
10月前
|
存储 算法 安全
如何控制上网行为——基于 C# 实现布隆过滤器算法的上网行为管控策略研究与实践解析
在数字化办公生态系统中,企业对员工网络行为的精细化管理已成为保障网络安全、提升组织效能的核心命题。如何在有效防范恶意网站访问、数据泄露风险的同时,避免过度管控对正常业务运作的负面影响,构成了企业网络安全领域的重要研究方向。在此背景下,数据结构与算法作为底层技术支撑,其重要性愈发凸显。本文将以布隆过滤器算法为研究对象,基于 C# 编程语言开展理论分析与工程实践,系统探讨该算法在企业上网行为管理中的应用范式。
282 8
|
10月前
|
存储 监控 算法
基于 C# 时间轮算法的控制局域网上网时间与实践应用
在数字化办公与教育环境中,局域网作为内部网络通信的核心基础设施,其精细化管理水平直接影响网络资源的合理配置与使用效能。对局域网用户上网时间的有效管控,已成为企业、教育机构等组织的重要管理需求。这一需求不仅旨在提升员工工作效率、规范学生网络使用行为,更是优化网络带宽资源分配的关键举措。时间轮算法作为一种经典的定时任务管理机制,在局域网用户上网时间管控场景中展现出显著的技术优势。本文将系统阐述时间轮算法的核心原理,并基于 C# 编程语言提供具体实现方案,以期深入剖析该算法在局域网管理中的应用逻辑与实践价值。
252 5
|
机器学习/深度学习 人工智能 算法
深入解析图神经网络:Graph Transformer的算法基础与工程实践
Graph Transformer是一种结合了Transformer自注意力机制与图神经网络(GNNs)特点的神经网络模型,专为处理图结构数据而设计。它通过改进的数据表示方法、自注意力机制、拉普拉斯位置编码、消息传递与聚合机制等核心技术,实现了对图中节点间关系信息的高效处理及长程依赖关系的捕捉,显著提升了图相关任务的性能。本文详细解析了Graph Transformer的技术原理、实现细节及应用场景,并通过图书推荐系统的实例,展示了其在实际问题解决中的强大能力。
1934 30
|
存储 算法
深入解析PID控制算法:从理论到实践的完整指南
前言 大家好,今天我们介绍一下经典控制理论中的PID控制算法,并着重讲解该算法的编码实现,为实现后续的倒立摆样例内容做准备。 众所周知,掌握了 PID ,就相当于进入了控制工程的大门,也能为更高阶的控制理论学习打下基础。 在很多的自动化控制领域。都会遇到PID控制算法,这种算法具有很好的控制模式,可以让系统具有很好的鲁棒性。 基本介绍 PID 深入理解 (1)闭环控制系统:讲解 PID 之前,我们先解释什么是闭环控制系统。简单说就是一个有输入有输出的系统,输入能影响输出。一般情况下,人们也称输出为反馈,因此也叫闭环反馈控制系统。比如恒温水池,输入就是加热功率,输出就是水温度;比如冷库,
1970 15