算法工程师首先是一个工程师。这样一个基本的事实,却被许多算法工程师有意无意忽略。这样下去,是走不长久的。本文尝试总结下算法工程师需要的工程能力,敬请指正。

注:未经授权、禁止转载

1、将模型发布成服务的能力

模型训练好后,需要发布成服务,这样才算完成落地。但是发布成服务,并不是那么简单。
如果用python,那你至少得会tornado或者flask。要学会这两个框架,至少需要对web服务技术有所了解。
如果用java,大部分是用spring,那你至少需要对spring全家桶有所熟悉,当然,maven啥的是不能少的。
如果是用RPC,除了spring之外,对RPC(比如hsf)技术也要熟悉基本原理,并能熟练运用。
在容器化的今天,你的服务一定是在容器中运行的,这需要你对docker等容器化技术比较熟悉,才能真正地与docker配合,完成服务发布。
不同的公司都有自己的devops工具,用来完成创建应用、申请机器、创建环境、发布服务、发布变更等工作,也需要很好地掌握。

2、配置监控的能力

服务上线了,监控必须要跟上,不然,服务挂了很久你都不知道,怎么能行。各个公司都会有自己的服务监控工具,比如supervisor等。有时候,你需要对服务状态有更加细致的监控,比如某类异常过多,响应时间加长,请求数据具体情况等,这往往需要你对监控工具比较熟悉,才能顺利配好。

3、负载均衡、扩缩容、容灾备份的能力

有了监控,不等于完事大吉,你还得考虑服务承载能力问题,需要多少台服务器,负载均衡按照什么策略。如果服务请求突然增多,如何快速扩容,服务器如何配置在多地,增加服务的容灾能力。这些事情虽然都有工具可用,但首先需要你对这些事情的基本原理比较清楚,并提前熟悉,才能在必要时用得上。

4、灰度测试的能力

有时候你训练出一个新的模型,需要检测效果,这是你的服务已经在线上了,直接用新的模型顶上是风险很高的,离线测auc呱呱叫,上线后auc直线呼呼跳的事情是很正常的。所以,一定要用小流量进行验证,这需要你对灰度测试机制比较熟悉,不然,做不到这一点,新模型是上还是不上呢?

5、数据分析的能力

好的,模型已经上线运行了一段时间,需要分析下效果。首先,你的log有没有记得够详细,可以支持所有粒度的模型情况分析?嗯,记log确实是一件需要提前想好的事情,不要小看它哦。另外,大概率情况,你的log会被load进大数据系统,比如hive,那么要分析log,hive你总得会吧。有时log还需要进行很多处理才能得出分析结论,那么,大数据分析工具spark啥的你总得会吧?各个算子可是都清楚了?

6、报表生成的能力

你的模型总得有一些日常观察指标吧,这样你才能时刻追踪到模型服务的最新情况,一旦发生指标异常,可以迅速分析解决。这时候没有比一个完善的报表更重要的了。所以你需要会将自己模型服务的报表做出来吧,报表工具虽然有,但你总得会才行啊。

7、制作前端portal的能力

为了在上线前更方便地体验模型服务,你总得为服务搭建一个前端使用页面吧。至少让老板们可以愉快地测试你新model的效果。前端页面可以非常简单,vue啥的都可以。问题是这点活儿你不自己干难道还给你招一个前端来?

8、无总结、不进步

可见,从工程师的角度来看算法工程师,一个合格算法工程师首先是一个合格的工程师才行。可能你觉得算法工程师不需要会这么多也能活得很滋润,因为有工程团队配合呢。我只想说,你说的是现在,我说的是未来。
总而言之一句话,尽快摆脱调参师的标签,多领域拓展自己的知识结构,让自己成为一个T形人才,才能在越来越激烈的岗位竞争中,最大限度提高自己的竞争力。