一.引言

一个优秀的算法工程师应该至少具备3类能力:

基础能力:包含数理统计、机器学习、概率论以及深度学习等相关知识

编程能力:python、C++ or Java 以及基本的 Sql、linux、shell 命令

核心能力:对数据的敏感程度,对业务的理解程度以及 pipeline 的构建能力

这些能力都需要我们不断地学习并实践开发,好的工具可以使我们专注于算法的研究与实现落地,下面整理了一份 2022 年推荐算法效率开发10大必备工具,榜单主要分以下3类,快来提高自己的开发效率吧!

效率开发工具:Pycharm、Idea、Iterm2

辅助开发工具:Grafana、Jprofile、Postman、Wakatime、Xxl-job

云原生开发工具:TKE、EMR

二.效率开发

鉴于目前算法工程师大都需要具备一定大数据开发的能力,所以 Python + Java / Scala 的开发趋势也逐渐兴起,python 负责 TF 相关算法的开发,Java / Scala 负责一些框架以及大数据处理的开发,下面介绍 3 款高效开发工具。

1.Pycharm

官网: https://www.jetbrains.com/pycharm/

Pycharm 是一种 Python IDE(Integrated Development Environment,集成开发环境),带有一整套可以帮助用户在使用 Python 语言开发时提高效率的工具,例如调试、语法高亮、项目管理、代码跳转、智能提示、单元测试、版本控制以及依赖获取等。在原始功能基础上,其内部增加了丰富的插件。推荐算法工程师日常使用中最多的就是 Tensorflow、Keras、Pytorch、Sklearn、Numpy、Pandas 等,其中深度算法模型主要通过 Tensorflow 实现,由于 TF 不同版本的限制,用户使用 Pycharm 配合 Anonconda 可以轻松实现多 python 环境的构建,从而从容的切换多个 TF + PY 环境,实现多环境快速切换,效率开发。

智能补全示例:

2.Idea

官网: https://www.jetbrains.com/idea/

Idea 是 Java 语言开发的集成环境,是业界公认最好的 Java 开发工具之一,其具备便捷的代码提示、代码重构、智能补全功能,除此之外与各类版本工具例如 git、svn、github 都实现了完美整合,配合可定义的创新 GUI 设计,是Java / Scala 高效开发的不二之选。随着大数据的兴起,算法工程师的很多离线任务例如数据准备、特征处理、日志分析都离不开 Spark,而线上的实时任务例如实时请求、实时推荐则离不开 Streaming、Flink,通过离线 Spark + 在线 Flink 的模式构造 pipeline 管道,Idea 无疑是开发 Java / Scala 的利器,配合多款辅助插件,可以使开发更加得心应手。

智能联想示例:

3.iterm2

官网:https://iterm2.com/

作为代码与服务器沟通的桥梁,iterm2 是一款功能强大的终端工具,它支持分窗操作、自动补齐、粘贴历史、回放功能等,同时支持快捷键操作与自定义 UI,既美观又高效,正如官网说说,iterm2是 Terminal 的替代品,通过配置多个 Profiles 的 Advanced 选项,iterm2 可以实现多种自动化操作并支持多款插件,可以协助开发者更方便的进入终端并与集群完成交互。

分屏监控示例:

通过快捷分屏可以同时实现 GPU 与 Top 指令,监测不同指标,也可以分屏处理终端的不同事务

当然也可以换上自己最喜欢的背景,开发的感觉顿时焕然一新:

三.辅助开发工具

推荐算法工程师日常开发中离不开数据指标的监控、任务的部署、代码的优化、部门的协作以及工作总结,下面将基于以上几点为大家介绍经过实战考验的辅助开发工具。

1.Grafana

官网:https://grafana.com/grafana

随着业务的不断深化与发展,业务的种类增多、服务器数量加倍、数据网络压力增加的问题也接踵而至,这些问题都不可避免的带来线上事故的增多,因此随着业务体量逐渐扩大,相对应的服务器、应用状态、数据指标都应全方位监控,并且做到指标异常提前预警,Grafana 的出现完美解决了该问题。推荐算法场景下,从用户数据触发,到模型的训练上线,再到最终模型推理得到推荐结果,这一链路都存在诸多需要监控的指标,最基本的数据库以及数据集群、例如 Mysql、Redis、Hbase 以及 Kafka 等都需要做到时序的实时监控并做到异常报警,通过辅助组件状态的可视化提高线上作业的运维效率,有效减少故障发生后的响应时间。为此 Grafana 提供了快速灵活的可视化效果,可以让数据以任何想要的形式来可视化数据,例如时间序列、表、柱状图等等。

Redis 流量监控示例:

Zookeeper 流量监控示例:

推荐场景下,由于与数据库交互较多,因此经常以时序的形式监控数据的读写状态,除此之外还有很多的形式提供,开发者可根据自己的需求灵活使用:

2.Jprofile

官网:https://www.ej-technologies.com/products/jprofiler/overview.html

JProfile 是一个重量级的 JVM 监控工具,提供对 JVM 的精确监控,其中堆遍历、CPU 剖析、线程剖析可视为定位当前系统瓶颈的得力工具,通过 JProfile 可以轻松定位 JVM 堆中的对象,优化内存并定位性能问题。除了可执行软件外,Jprofile 还支持 Idea 内置插件,轻松与开发环境的任务相匹配并分析,提高 JVM 代码分析能力,加速代码优化。推荐算法场景下,常见的就是召回、排序代码的构建,其中涉及很多需要优化的指标,例如与内存相关的物料库、与网络请求相关的 hbase访问速率等等,其都可以使用 JProfile 进行相关的分析,通过分析获取代码运行期间的瓶颈并作出响应优化,使得代码的编写更加合理高效。

相关指标的分析:

通过启动 JVM 进程与 JProfile 可以实时监测任务运行期间 JVM Memory、GC Activity、Classes 数量、Thread 数量、CPU Locd 参数

同时通过 Heap 分析可以分析 JVM 下各类数据占比,任务结束后可以通过 Snap 快照的形式获取当前任务内存占用较大的 Class,从而对症下药,定点优化,提升 JVM 程序效率。

3.Postman

官网:Postman

Postman 是一款强大的网页调试工具的客户端,postman 为用户提供强大的 Web API & HTTP 请求调试功能。postman 能够发送任何类型的 HTTP 请求 (Get, Post, Put, Patch, Delete ...),附带任何数量的参数+ headers,是一款非常实用的调试工具。推荐算法场景下,经常需要与其他团队进行交互协作,除了采用数据库交互外,常常使用 Http 接口的形式,返回一些代码所需的基础数据信息或者上下文信息。Postman 支持 多种 http 请求类型,支持在线存储数据,方便设置请求和 header 并支持不同的认证机制,同时提供响应数据自动高亮并在页面清晰展示,通过 postman 可以在开发前快速便捷的测试 http 请求的访问速度,访问结果等,而后快速应用到于实战代码中,非常的方便。

Http Get 请求:

下面给出了 postman 测试 get 请求的案例,开发者需指定 http 需求,并填写对应的 Headers 与 Query 请求参数,最后的结果可以选择通过 Json、Xml、Html 以及 Text 多种形式,同时 Http 响应时间也会在界面展示,便于开发者评估请求耗时。

4.WakaTime

官网:https://wakatime.com/dashboard

WakaTime 是一款轻量级工作统计软件,其通过插件配置的方式内嵌到开发常用的办公开发软件中,在无感知的情况下统计相关工作时间,推荐算法场景下,常用的 Pycharm、Idea、CLion、VS Code、Word、Excel、PowePoint、iterm2、Sublime Text 等均适配 WakaTime。每天各个项目的开发时长、每天浏览网页与编码时间的对比、每日代码语言使用情况都可以详细记录其中。

可以看到上面介绍的多款工具都可以用 WakaTime 进行时间统计,配合上 Git 的提交记录,顿时感觉自己的工作量满满,实战开发中可以根据 WakaTime 分析自己在各个项目的耗时情况,合理统筹分配时间。

5.xxl-job

官网:https://github.com/xuxueli/xxl-job/

xxl-job 是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级与易扩展。现已开放源码,实现了开箱即用。其支持通过 Web 页面对任务进行 CRUD 操作,操作简单,支持动态修改任务状态,启动/停止任务以及终止运行中任务,即时生效。其可以看做是在 crontab 基础上的新型任务调度平台。推荐算法场景下,开发者经常需要打通 "数据-模型-上线-迭代-再上线" 的流程,而传统 crontab 定时控制局限性高,不支持跨集群部署任务,且在 shell 中部署串行任务每个子任务不易控制。为此 xxjob 解决了分布式环境下多机定时任务的调度问题,并提供了丰富的路由策略与完善的调度过期策略,支持动态分配与任务状态监控,适合推荐算法工程师部署数据分析、数据处理、模型训练、模型上线、模型 retrain 的定时任务链路。

新增任务:

每个任务都有一个单独的任务 ID,可以通过子任务 ID 连接父任务与子任务,达到跨集群调度的效果,同时支持堵塞处理策略,可以在一定程度上防止父任务执行失败,依旧执行错误子任务的情况。

四.云原生开发工具

云计算的概念从 2006 年提出距今已过 15 年,以宏观时间观看全社会对云计算的认知过程,基本经历了 "概念模糊 - IT 从业者认知 - IT 从业职推进 - 行业大众认知" 的四个过程,尤其 COVID-19 的出现,更是让大家体验到云会议、云办公、云协同、云课堂等云场景,加深了大家对云计算的认知。随着云计算的普及,推荐系统也由传统的老式集群模式逐渐向云计算迁移,在云计算时代,集群的变迁并不是简单的机房迁移,而是需要从思想到技术落地的全面改变。最理想的状态是数据存储、模型开发、单元测试、推荐系统部署等都在云上实现,正是基于这样的需求,促使了云原生技术的出现,同时基于当前推荐系统的演进与挑战,计算云原生、数据云原生、计算云原生也在行业内得到蓬勃发展。

1.TKE - Tencent Kubernetes Engine

1.1 TKE 简介

官网:https://cloud.tencent.com/product/tke

容器服务 TKE 是腾讯基于原生 Kubernetes 提供的高度可扩展的高性能容器管理服务。支持智能调度,获得国家级科技卓越奖,针对不同层级运维诉求和资源可控诉求,推出原生节点与超级节点适配不同企业需求,同时基于业务特点针对节点进行个性化优化,形态灵活,功能完备,兼容原生 Kubernetes API,助理企业降本增效。

可以看到推荐系统在线、离线任务混杂、链路复杂,除此之外,还有各类数据仓库、网络接口、消息系统都内嵌到推荐系统中,使得推荐系统整体复杂度较高。其次面对日益增长的用户群体、商品库的不断丰富扩充,推荐系统面对的流量也日益增长,从而维持推荐系统的高并发与高可用对部署集群提出很高的要求。传统集群运行不稳定、运维不及时、无法适时扩容,影响推荐系统在线整体稳定性,除此之外由于资源利用的不合理也会大大增加企业成本,而腾讯云 TKE 则完美解决上述场景问题。

1.2 TKE x 小红书推荐系统实践

小红书的高速发展,得益于社区内容与兴趣用户之间的精准高效匹配,小红书推荐系统会根据用户的实时点击、推荐、收藏、评论等行为数据,实时更新用户画像,实时产生训练样本,实时训练模型,小时级迭代线上模型。

正如我们前面所说,复杂的推荐系统需要强大的底层服务,在稳定性的基础上,还需满足低延时与弹性扩容,腾讯 TKE 结合小红书场景特点,与小红书一起进行容器化改造,解决推荐系统场景下容器主要面对高并发对容器网络吞吐、稳定性与集群统一管理两大风险,实现了模型的小时级快速迭代, 大大提升了小红书笔记展示给用户的精准性与时效性。 在训练场景,借助容器服务的弹性能力,小红书也大幅降低了资源成本,节约成本达到 40% 以上。日常只需要 2 个 AI 工程人员负责训练平台底层资源运维的相关事项,团队可以把更多的精力和人力资源聚焦在算法优化上,不断提升模型的预测准确性。

2. EMR - 腾讯弹性 MapReduce

2.1.EMR 简介

官网:https://cloud.tencent.com/product/emr

腾讯弹性 MapReduce 提供了高性能、高稳定性、按需灵活搭配的 Hive、Spark、Presto、Hbase、Flink、IceBerg、Alluxio 等丰富开源大数据组件,腾讯基于开源组件深度优化器性能与功能,使得 EMR 具备以下特性:

- 丰富的一体化指标,支持用户自定义配置告警

- 支持重要事件及作业现场的故障快速回朔,大幅提升运维效率

- 按时间或按需自动负载、平滑扩缩集群资源、分钟级扩充海量算力,做到集群的缩放自如

- 基于 VPC 网络隔离与安全组件保证网络安全可信

基于以上特性,腾讯 EMR 做到了资源的按需使用,在降低企业闲置成本的基础上,做到了集群的易于维护,完美适配推荐系统场景下的大数据任务需求。

2.2 EMR x 知乎大数据集群升级实践

知乎是中文互联网最大的知识分享平台,数亿用户通过知识建立连接,找到感兴趣的高质量内容。为了将全平台的优质内容与终端用户更智能更高效的结合在一起,知乎对大数据平台对数据工具提出更实用要求,由于原集群存在资源交付率低,运维成本高等问题,知乎选择基于开源 Hadoop 技术栈构建的数千台规模的大数据集群无缝升级到腾讯云大数据云原生方案,该场景面临如下挑战:

A.业务迁移 - 无感知

为了保证改动对原先业务完全透明,需要在业务无感知情况下,对原大数据集群进行托管。为了实现该诉求,腾讯云采用定制化开放方案,构建基于知乎软件版本的镜像版本并产品化上线。由于在线资源 TKE 集群与离线 Hadoop 集群一般情况下均为错峰计算,为了解决原有资源的整体资源利用率,采用 EMR on TKE 方案,离线在线混合部署模式,提升整体资源利用率。在大数据 EMR 与 TKE 的融合过程中,为了保证离线任务与在线任务的隔离线,采用 Cgroup、BT 调度算法等方式做好资源隔离,防止离线任务资源侵占在线任务资源,影响线上服务的稳定性。例如训练任务启动过多节点侵占集群资源,导致线上推理任务存在资源、网络、IO 等风险。

B.技术需求 - 版本兼容

由于知乎原本的集群是基于开源 Hadoop 构建,这与腾讯云大数据版本之间存在差异, 因此需要提供一个可行的产品化方案来解决该问题

除此之外,为了保证大数据 EMR 集群中任务运行的稳定性,腾讯云也对 Yarn 资源调度进行改造升级,保证资源调度时 AM 管理节点分配的合理性,同时也能做到资源弹性扩容到队列维度。

2.3 实践价值

基于腾讯云原生 TKE 方案,腾讯云团队探索出了 EMR 离在线混合部署策略,协助知乎由开源 Hadoop 集群无感知迁移至腾讯云大数据云原生方案,帮助知乎极大提升了资源利用率,从而大幅降低了技术成本,低峰期资源利用率提升高达5倍,达到了真正的降本增效。结合小红书与知乎的案例可以看到大数据下的推荐系统实战离、在线任务混合,对资源高效利用要求高,非常适配 EMR x TKE 的云原生解决方案。

五.总结

好的工具已经备好,希望各位优秀的程序员能够在各个工作利器的加持下,码到成功,码出精彩。更多的好用工具可以扫码获取

2022年推荐算法效率开发必备工具榜单相关推荐

  1. Web前端开发必备工具推荐

    http://gaohaixian.blog.163.com/blog/static/12326010520114265223489/不管你做前端开发还是网页重构,前端工具都起着非常重要的作用,这里向 ...

  2. Mac开发必备工具(二)—— iTerm 2

    iTerm 2 简介 iTerm 2 is a terminal emulator for Mac OS X that does amazing things. iTerm 2 有很多能够提升效率的实 ...

  3. 移动应用开发必备工具盘点

     移动应用开发必备工具盘点 发表于2015-09-28 20:39| 3928次阅读| 来源作者投稿| 3 条评论| 作者欧开磊 开发者应用移动开发工具 width="22" ...

  4. Mac开发必备工具(一)—— Homebrew

    Homebrew 简介 macOS 缺失的软件包管理器.使用 Homebrew 安装 Apple 没有预装但 你需要的东西.官网有中文说明. 安装与配置 Homebrew 的安装非常简单,将下面这条命 ...

  5. 前端开发必备工具-网页调试工具

    前端开发必备工具-网页调试工具 在前端开发中我们经常会要调试页面,主要html.css调试和js调试,这里整理一些工具: 一.firefox网页调试插件 1.firefox插件Firebug 主要用于 ...

  6. chatgpt赋能python:Python对接接码平台:提高效率的必备工具

    Python对接接码平台:提高效率的必备工具 随着互联网技术的不断发展,越来越多的企业和个人都需要使用到短信.语音等类型的验证码进行验证,而接码平台则成为了这一领域的重要工具.Python作为一种最优 ...

  7. h5开发必备工具之草料二维码浏览器插件

    h5开发必备工具之草料二维码浏览器插件 做h5开发,的一个重点是如何适配手机,那么如何让你敲的代码可以在你手机上简单看到呢. 原理很简单,就是将你的电脑变成服务器,发射wifi给手机进行连接.然后在你 ...

  8. 微信开发必备工具:利用cpolar在公网上测试本地Web网站或移动应用程序

    作为Web网站或移动应用程序的开发人员,你是否希望将NAT或防火墙后面的本地开发主机暴露到公网上,然后方便地使用公网地址进行各种测试?在本教程中,我们将教你如何使用cpolar做到这一点. cpola ...

  9. 强大的iOS开发必备工具

    做iOS应用开发的,没有这些工具怎么行,强大的iOS开发必备工具!需要的速来拿! 1.ShareSDK 下载链接:http://sharesdk.cn/Download 软件首页:http://sha ...

  10. 微信开发必备工具 php和java开发语言

    微信开发必备工具下载地址: http://download.csdn.net/detail/wyx100/8801941 工具: xmlmarker_1_1_setup     xml文件转换工具 s ...

最新文章

  1. 《代码大全2》读后感czz
  2. python飞机大战的实训心得体会-python之基础总结(飞机大战)
  3. python自学步骤-Python入门深度学习完整指南
  4. 数据结构(一)---顺序表的实现---java版
  5. 支持海量数据的 MongoDB NoSQL
  6. Factory Method工厂方法
  7. Windows Server 2012之ISCSI目标服务器群集
  8. 【推荐实践】图片主题模型在推荐系统的应用实践
  9. 合并多行查询数据到一行:使用自连接、FOR XML PATH('')、STUFF或REPLACE函数
  10. ios 录音生成.aac录音文件
  11. vsto java,VSTO开发入门,C#基础篇
  12. PHPWord 表格居中和合并单元格
  13. android sd 权限修改,真正免root的sd卡权限修改软件详细使用教程
  14. android联想云服务,联想云服务手机客户端
  15. 罗翔陈佩斯:从狂妄到自省
  16. 详细解读Xbox Series X:比起堆料,它其实更在乎效率
  17. 过程与结果——独立思考——认真详谈
  18. 奇东锐腾服务器无法显示,奇东锐腾软件 Keydone Return Software
  19. 长短期记忆网络 LSTM
  20. Vue的created的使用示例

热门文章

  1. 三种常用的BIOS升级方法
  2. 冲击波病毒简介及解决方法
  3. Windows Phone SDK 7.1 RTM 发布
  4. BulkInsert导入CSV文件
  5. java解析搜狗词库scel文件到txt
  6. 中压变频器行业现状调研及趋势分析报告
  7. EDI系统都有哪些版本,有何特点?
  8. AnyLogic简介
  9. Anylogic 创建一个简单的人口演变模型
  10. java steam_Java,Steam控制器和我