查看原文
其他

心法利器[17] | 算法服务及其相关配件

机智的叉烧 CS的陋室 2022-08-08

【前沿重器】


本栏目主要和大家一起讨论近期自己学习的心得和体会,与大家一起成长。具体介绍:仓颉专项:飞机大炮我都会,利器心法我还有


往期回顾

算法聊得多了,但是作为一名算法工程师,懂算法自然不要多说,但是工程依旧是不得不知道的,要怎么把自己做的非常厉害的算法部署到线上,被请求,被使用,这才是完成一名工程师最重要的任务。这次,先来给大家介绍一下算法服务吧。

当然,本人是个算法,对工程的理解肯定不如工程同学,有问题可以随时提出,我更正。

什么是算法服务

算法服务,我的理解,就是一种上线的模式,在整个互联网的结构下,要保证你的东西被用到,最直接的方式就是构造一个服务,让需要的人请求。

解释一下,例如百度搜索,挂在网上,谁想要搜索东西,直接输入一个www.baidu.com,在框里面输入你要搜的东西,你就能得到你想要东西,这就是所谓的服务,所谓的算法服务,就是一个装着算法的服务,那就是算法服务。

例如我现在有一个很厉害的文本分类模型,能够区分这句话是好评还是差评,那我希望这个东西上线,挂在那里,谁想用我的东西,直接按照一定的方式找到这个东西向他提问就好了,这就是一个算法服务。

这里内部的原理涉及大量计算机网络的知识,如果不懂请自觉把这块东西补起来。

服务的接口

做成一个服务对外接口,目前比较流行的是两种模式,也是目前比较常见的两种:

  • http接口,python的话,flask、tornado、Django等都可以做,学习成本不是很高。
  • rpc类的接口,比较流行的就是grpc,目前已经被广泛应用于算法服务,开源的tensorflow对应的serving就支持grpc接口。

接口和服务这块,学习起来其实不是很难,大家可以根据自己的需求学起来,grpc这块之前我其实谈过,结合有关文档可以很快掌握:(心法利器[6] | python grpc实践)。

而对内,我们需要把接口协议定好。

  • request:请求方需要给我输入什么内容,格式是啥。
  • response:我们需要给请求方方法会什么内容,格式是啥。

此后,我们就可以开始包装算法了:

  1. 一份请求过来。
  2. 解析请求方发给我们的内容,例如json转python的dict格式。
  3. 根据dict内容开始进行算法计算,如做个简单的文本分类。
  4. 文本分类结果输出,整理成需要返回的结果。
  5. 返回。

我们的算法其实就在第三步做,我们在这里可以进行大量的计算。

服务的基本配件

服务上线是一个工程师的基本操作了,抛开算法本身而言,一般一个服务上线会搭配这些配件,比较成熟的团队一般已经把它做成一个框架,全都配置好了:

  • 打包、部署的脚本。和快递一样,要打个包才能扔上线,上线后要拆快递然后执行程序。
  • 日志系统。各个日志的配置规范化,按照一定的模式打印。
  • 监控。时刻检查服务异常,一般会配合健康检查进行。
  • 健康检查,定时尝试性的请求服务,看服务是否正常运行。

当然,根据实际场景,还会有很多类似的东西,但是这上面几个应该是最基本的几个组件了。

算法服务配件和核心功能

算法服务有别于一般服务的核心点在于会有很多词典、模型,同时性能上也会多少有些影响,因此我们这里需要大量算法来做的事情:

  • 模型词典管理。在线涉及到定时校验、更新的操作。
  • 效果异常告警,也算是一种监控,监控在线的预测是否正常。
  • 多进程工具,这点在python服务尤其重要,python的性能一般逊色于java和c++因此要保证在线性能,多进程的能力还是非常重要的。
  • 特殊的日志,这块主要用于为算法进行在线debug、离线模型训练等工作服务的,类似推荐系统,日志系统必须非常完善,才能支撑推荐系统的持续效果优化。
  • cache,很多时候算法性能不足,可能会超时,因此把结果缓存下来,下次请求同一个结果的时候就能直接查缓存,这样能有效提升算法性能。

客户端

算法服务有了,我们还需要构造一个模拟的请求器,来模拟请求这个服务,以测试我们这个服务是否可以正常运作,这就是客户端,一般分为这几个情况:

  • 针对算法本身的,直接跑case,分单个case和批量case,可用作进行算法本身的测试
  • 针对服务,有单次请求接口的脚本。
  • 同样针对服务,要有压测脚本,测试脚本性能。

小结

在大厂工作,能够接触最前沿的技术,中台的出现让我们能够更专注于自己相关的工作,算法能认真为效果服务,因为有很多工作有前人或者大佬为我们做好了,可是我们要知道的是,不会永远有人帮我们做这个,我们也希望自己有要成为大佬的一天,因此要独当一面,还是要适时地开始掌握这些东西,朝着大佬前进。

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存