2022年推荐算法效率开发必备工具榜单
一.引言
一個優(yōu)秀的算法工程師應(yīng)該至少具備3類能力:
基礎(chǔ)能力:包含數(shù)理統(tǒng)計、機器學(xué)習(xí)、概率論以及深度學(xué)習(xí)等相關(guān)知識
編程能力:python、C++ or Java 以及基本的 Sql、linux、shell 命令
核心能力:對數(shù)據(jù)的敏感程度,對業(yè)務(wù)的理解程度以及 pipeline 的構(gòu)建能力
這些能力都需要我們不斷地學(xué)習(xí)并實踐開發(fā),好的工具可以使我們專注于算法的研究與實現(xiàn)落地,下面整理了一份 2022 年推薦算法效率開發(fā)10大必備工具,榜單主要分以下3類,快來提高自己的開發(fā)效率吧!
效率開發(fā)工具:Pycharm、Idea、Iterm2
輔助開發(fā)工具:Grafana、Jprofile、Postman、Wakatime、Xxl-job
云原生開發(fā)工具:TKE、EMR
二.效率開發(fā)
鑒于目前算法工程師大都需要具備一定大數(shù)據(jù)開發(fā)的能力,所以 Python + Java / Scala 的開發(fā)趨勢也逐漸興起,python 負(fù)責(zé) TF 相關(guān)算法的開發(fā),Java / Scala 負(fù)責(zé)一些框架以及大數(shù)據(jù)處理的開發(fā),下面介紹 3 款高效開發(fā)工具。
1.Pycharm
官網(wǎng):?https://www.jetbrains.com/pycharm/
Pycharm 是一種?Python?IDE(Integrated Development Environment,集成開發(fā)環(huán)境),帶有一整套可以幫助用戶在使用?Python?語言開發(fā)時提高效率的工具,例如調(diào)試、語法高亮、項目管理、代碼跳轉(zhuǎn)、智能提示、單元測試、版本控制以及依賴獲取等。在原始功能基礎(chǔ)上,其內(nèi)部增加了豐富的插件。推薦算法工程師日常使用中最多的就是?Tensorflow、Keras、Pytorch、Sklearn、Numpy、Pandas 等,其中深度算法模型主要通過?Tensorflow 實現(xiàn),由于?TF?不同版本的限制,用戶使用?Pycharm 配合?Anonconda 可以輕松實現(xiàn)多 python 環(huán)境的構(gòu)建,從而從容的切換多個?TF + PY?環(huán)境,實現(xiàn)多環(huán)境快速切換,效率開發(fā)。
智能補全示例:
2.Idea
官網(wǎng):?https://www.jetbrains.com/idea/
Idea 是?Java?語言開發(fā)的集成環(huán)境,是業(yè)界公認(rèn)最好的?Java?開發(fā)工具之一,其具備便捷的代碼提示、代碼重構(gòu)、智能補全功能,除此之外與各類版本工具例如?git、svn、github?都實現(xiàn)了完美整合,配合可定義的創(chuàng)新?GUI?設(shè)計,是Java / Scala 高效開發(fā)的不二之選。隨著大數(shù)據(jù)的興起,算法工程師的很多離線任務(wù)例如數(shù)據(jù)準(zhǔn)備、特征處理、日志分析都離不開?Spark,而線上的實時任務(wù)例如實時請求、實時推薦則離不開?Streaming、Flink,通過離線?Spark?+ 在線?Flink?的模式構(gòu)造?pipeline?管道,Idea?無疑是開發(fā)?Java?/ Scala 的利器,配合多款輔助插件,可以使開發(fā)更加得心應(yīng)手。
智能聯(lián)想示例:
3.iterm2
官網(wǎng):https://iterm2.com/
作為代碼與服務(wù)器溝通的橋梁,iterm2 是一款功能強大的終端工具,它支持分窗操作、自動補齊、粘貼歷史、回放功能等,同時支持快捷鍵操作與自定義 UI,既美觀又高效,正如官網(wǎng)說說,iterm2是 Terminal 的替代品,通過配置多個 Profiles 的 Advanced 選項,iterm2 可以實現(xiàn)多種自動化操作并支持多款插件,可以協(xié)助開發(fā)者更方便的進(jìn)入終端并與集群完成交互。?
分屏監(jiān)控示例:
通過快捷分屏可以同時實現(xiàn) GPU 與 Top 指令,監(jiān)測不同指標(biāo),也可以分屏處理終端的不同事務(wù)
當(dāng)然也可以換上自己最喜歡的背景,開發(fā)的感覺頓時煥然一新:
??
三.輔助開發(fā)工具
推薦算法工程師日常開發(fā)中離不開數(shù)據(jù)指標(biāo)的監(jiān)控、任務(wù)的部署、代碼的優(yōu)化、部門的協(xié)作以及工作總結(jié),下面將基于以上幾點為大家介紹經(jīng)過實戰(zhàn)考驗的輔助開發(fā)工具。
1.Grafana
官網(wǎng):https://grafana.com/grafana
隨著業(yè)務(wù)的不斷深化與發(fā)展,業(yè)務(wù)的種類增多、服務(wù)器數(shù)量加倍、數(shù)據(jù)網(wǎng)絡(luò)壓力增加的問題也接踵而至,這些問題都不可避免的帶來線上事故的增多,因此隨著業(yè)務(wù)體量逐漸擴大,相對應(yīng)的服務(wù)器、應(yīng)用狀態(tài)、數(shù)據(jù)指標(biāo)都應(yīng)全方位監(jiān)控,并且做到指標(biāo)異常提前預(yù)警,Grafana 的出現(xiàn)完美解決了該問題。推薦算法場景下,從用戶數(shù)據(jù)觸發(fā),到模型的訓(xùn)練上線,再到最終模型推理得到推薦結(jié)果,這一鏈路都存在諸多需要監(jiān)控的指標(biāo),最基本的數(shù)據(jù)庫以及數(shù)據(jù)集群、例如 Mysql、Redis、Hbase 以及 Kafka 等都需要做到時序的實時監(jiān)控并做到異常報警,通過輔助組件狀態(tài)的可視化提高線上作業(yè)的運維效率,有效減少故障發(fā)生后的響應(yīng)時間。為此 Grafana 提供了快速靈活的可視化效果,可以讓數(shù)據(jù)以任何想要的形式來可視化數(shù)據(jù),例如時間序列、表、柱狀圖等等。
Redis 流量監(jiān)控示例:
Zookeeper 流量監(jiān)控示例:
推薦場景下,由于與數(shù)據(jù)庫交互較多,因此經(jīng)常以時序的形式監(jiān)控數(shù)據(jù)的讀寫狀態(tài),除此之外還有很多的形式提供,開發(fā)者可根據(jù)自己的需求靈活使用:
2.Jprofile
官網(wǎng):https://www.ej-technologies.com/products/jprofiler/overview.html
JProfile?是一個重量級的?JVM 監(jiān)控工具,提供對?JVM?的精確監(jiān)控,其中堆遍歷、CPU?剖析、線程剖析可視為定位當(dāng)前系統(tǒng)瓶頸的得力工具,通過 JProfile 可以輕松定位?JVM?堆中的對象,優(yōu)化內(nèi)存并定位性能問題。除了可執(zhí)行軟件外,Jprofile 還支持?Idea?內(nèi)置插件,輕松與開發(fā)環(huán)境的任務(wù)相匹配并分析,提高?JVM?代碼分析能力,加速代碼優(yōu)化。推薦算法場景下,常見的就是召回、排序代碼的構(gòu)建,其中涉及很多需要優(yōu)化的指標(biāo),例如與內(nèi)存相關(guān)的物料庫、與網(wǎng)絡(luò)請求相關(guān)的 hbase訪問速率等等,其都可以使用?JProfile?進(jìn)行相關(guān)的分析,通過分析獲取代碼運行期間的瓶頸并作出響應(yīng)優(yōu)化,使得代碼的編寫更加合理高效。
相關(guān)指標(biāo)的分析:
通過啟動 JVM 進(jìn)程與 JProfile 可以實時監(jiān)測任務(wù)運行期間 JVM Memory、GC Activity、Classes 數(shù)量、Thread 數(shù)量、CPU Locd 參數(shù)
同時通過 Heap 分析可以分析 JVM 下各類數(shù)據(jù)占比,任務(wù)結(jié)束后可以通過 Snap 快照的形式獲取當(dāng)前任務(wù)內(nèi)存占用較大的 Class,從而對癥下藥,定點優(yōu)化,提升 JVM 程序效率。?
3.Postman
官網(wǎng):Postman
Postman 是一款強大的網(wǎng)頁調(diào)試工具的客戶端,postman 為用戶提供強大的 Web API & HTTP 請求調(diào)試功能。postman 能夠發(fā)送任何類型的 HTTP 請求 (Get, Post, Put, Patch, Delete ...),附帶任何數(shù)量的參數(shù)+ headers,是一款非常實用的調(diào)試工具。推薦算法場景下,經(jīng)常需要與其他團(tuán)隊進(jìn)行交互協(xié)作,除了采用數(shù)據(jù)庫交互外,常常使用?Http?接口的形式,返回一些代碼所需的基礎(chǔ)數(shù)據(jù)信息或者上下文信息。Postman?支持?多種?http?請求類型,支持在線存儲數(shù)據(jù),方便設(shè)置請求和?header 并支持不同的認(rèn)證機制,同時提供響應(yīng)數(shù)據(jù)自動高亮并在頁面清晰展示,通過?postman?可以在開發(fā)前快速便捷的測試?http?請求的訪問速度,訪問結(jié)果等,而后快速應(yīng)用到于實戰(zhàn)代碼中,非常的方便。
Http Get 請求:
下面給出了 postman 測試 get 請求的案例,開發(fā)者需指定 http 需求,并填寫對應(yīng)的 Headers 與 Query 請求參數(shù),最后的結(jié)果可以選擇通過 Json、Xml、Html 以及 Text 多種形式,同時 Http 響應(yīng)時間也會在界面展示,便于開發(fā)者評估請求耗時。
4.WakaTime
官網(wǎng):https://wakatime.com/dashboard
WakaTime 是一款輕量級工作統(tǒng)計軟件,其通過插件配置的方式內(nèi)嵌到開發(fā)常用的辦公開發(fā)軟件中,在無感知的情況下統(tǒng)計相關(guān)工作時間,推薦算法場景下,常用的 Pycharm、Idea、CLion、VS Code、Word、Excel、PowePoint、iterm2、Sublime Text 等均適配 WakaTime。每天各個項目的開發(fā)時長、每天瀏覽網(wǎng)頁與編碼時間的對比、每日代碼語言使用情況都可以詳細(xì)記錄其中。
?可以看到上面介紹的多款工具都可以用 WakaTime 進(jìn)行時間統(tǒng)計,配合上 Git 的提交記錄,頓時感覺自己的工作量滿滿,實戰(zhàn)開發(fā)中可以根據(jù) WakaTime 分析自己在各個項目的耗時情況,合理統(tǒng)籌分配時間。
5.xxl-job?
官網(wǎng):https://github.com/xuxueli/xxl-job/
xxl-job 是一個分布式任務(wù)調(diào)度平臺,其核心設(shè)計目標(biāo)是開發(fā)迅速、學(xué)習(xí)簡單、輕量級與易擴展。現(xiàn)已開放源碼,實現(xiàn)了開箱即用。其支持通過?Web?頁面對任務(wù)進(jìn)行?CRUD?操作,操作簡單,支持動態(tài)修改任務(wù)狀態(tài),啟動/停止任務(wù)以及終止運行中任務(wù),即時生效。其可以看做是在?crontab 基礎(chǔ)上的新型任務(wù)調(diào)度平臺。推薦算法場景下,開發(fā)者經(jīng)常需要打通?"數(shù)據(jù)-模型-上線-迭代-再上線"?的流程,而傳統(tǒng)?crontab?定時控制局限性高,不支持跨集群部署任務(wù),且在 shell 中部署串行任務(wù)每個子任務(wù)不易控制。為此 xxjob?解決了分布式環(huán)境下多機定時任務(wù)的調(diào)度問題,并提供了豐富的路由策略與完善的調(diào)度過期策略,支持動態(tài)分配與任務(wù)狀態(tài)監(jiān)控,適合推薦算法工程師部署數(shù)據(jù)分析、數(shù)據(jù)處理、模型訓(xùn)練、模型上線、模型 retrain 的定時任務(wù)鏈路。
新增任務(wù):
每個任務(wù)都有一個單獨的任務(wù) ID,可以通過子任務(wù) ID 連接父任務(wù)與子任務(wù),達(dá)到跨集群調(diào)度的效果,同時支持堵塞處理策略,可以在一定程度上防止父任務(wù)執(zhí)行失敗,依舊執(zhí)行錯誤子任務(wù)的情況。
四.云原生開發(fā)工具
云計算的概念從 2006 年提出距今已過 15 年,以宏觀時間觀看全社會對云計算的認(rèn)知過程,基本經(jīng)歷了 "概念模糊 - IT 從業(yè)者認(rèn)知 - IT 從業(yè)職推進(jìn) - 行業(yè)大眾認(rèn)知" 的四個過程,尤其 COVID-19 的出現(xiàn),更是讓大家體驗到云會議、云辦公、云協(xié)同、云課堂等云場景,加深了大家對云計算的認(rèn)知。隨著云計算的普及,推薦系統(tǒng)也由傳統(tǒng)的老式集群模式逐漸向云計算遷移,在云計算時代,集群的變遷并不是簡單的機房遷移,而是需要從思想到技術(shù)落地的全面改變。最理想的狀態(tài)是數(shù)據(jù)存儲、模型開發(fā)、單元測試、推薦系統(tǒng)部署等都在云上實現(xiàn),正是基于這樣的需求,促使了云原生技術(shù)的出現(xiàn),同時基于當(dāng)前推薦系統(tǒng)的演進(jìn)與挑戰(zhàn),計算云原生、數(shù)據(jù)云原生、計算云原生也在行業(yè)內(nèi)得到蓬勃發(fā)展。
1.TKE - Tencent?Kubernetes Engine
1.1 TKE 簡介
官網(wǎng):https://cloud.tencent.com/product/tke
容器服務(wù) TKE 是騰訊基于原生?Kubernetes 提供的高度可擴展的高性能容器管理服務(wù)。支持智能調(diào)度,獲得國家級科技卓越獎,針對不同層級運維訴求和資源可控訴求,推出原生節(jié)點與超級節(jié)點適配不同企業(yè)需求,同時基于業(yè)務(wù)特點針對節(jié)點進(jìn)行個性化優(yōu)化,形態(tài)靈活,功能完備,兼容原生 Kubernetes API,助理企業(yè)降本增效。
可以看到推薦系統(tǒng)在線、離線任務(wù)混雜、鏈路復(fù)雜,除此之外,還有各類數(shù)據(jù)倉庫、網(wǎng)絡(luò)接口、消息系統(tǒng)都內(nèi)嵌到推薦系統(tǒng)中,使得推薦系統(tǒng)整體復(fù)雜度較高。其次面對日益增長的用戶群體、商品庫的不斷豐富擴充,推薦系統(tǒng)面對的流量也日益增長,從而維持推薦系統(tǒng)的高并發(fā)與高可用對部署集群提出很高的要求。傳統(tǒng)集群運行不穩(wěn)定、運維不及時、無法適時擴容,影響推薦系統(tǒng)在線整體穩(wěn)定性,除此之外由于資源利用的不合理也會大大增加企業(yè)成本,而騰訊云 TKE 則完美解決上述場景問題。
1.2?TKE x 小紅書推薦系統(tǒng)實踐
小紅書的高速發(fā)展,得益于社區(qū)內(nèi)容與興趣用戶之間的精準(zhǔn)高效匹配,小紅書推薦系統(tǒng)會根據(jù)用戶的實時點擊、推薦、收藏、評論等行為數(shù)據(jù),實時更新用戶畫像,實時產(chǎn)生訓(xùn)練樣本,實時訓(xùn)練模型,小時級迭代線上模型。
正如我們前面所說,復(fù)雜的推薦系統(tǒng)需要強大的底層服務(wù),在穩(wěn)定性的基礎(chǔ)上,還需滿足低延時與彈性擴容,騰訊?TKE?結(jié)合小紅書場景特點,與小紅書一起進(jìn)行容器化改造,解決推薦系統(tǒng)場景下容器主要面對高并發(fā)對容器網(wǎng)絡(luò)吞吐、穩(wěn)定性與集群統(tǒng)一管理兩大風(fēng)險,實現(xiàn)了模型的小時級快速迭代, 大大提升了小紅書筆記展示給用戶的精準(zhǔn)性與時效性。 在訓(xùn)練場景,借助容器服務(wù)的彈性能力,小紅書也大幅降低了資源成本,節(jié)約成本達(dá)到 40% 以上。日常只需要 2 個 AI 工程人員負(fù)責(zé)訓(xùn)練平臺底層資源運維的相關(guān)事項,團(tuán)隊可以把更多的精力和人力資源聚焦在算法優(yōu)化上,不斷提升模型的預(yù)測準(zhǔn)確性。
2. EMR - 騰訊彈性 MapReduce
2.1.EMR 簡介
官網(wǎng):https://cloud.tencent.com/product/emr
騰訊彈性 MapReduce 提供了高性能、高穩(wěn)定性、按需靈活搭配的 Hive、Spark、Presto、Hbase、Flink、IceBerg、Alluxio 等豐富開源大數(shù)據(jù)組件,騰訊基于開源組件深度優(yōu)化器性能與功能,使得 EMR 具備以下特性:
- 豐富的一體化指標(biāo),支持用戶自定義配置告警
- 支持重要事件及作業(yè)現(xiàn)場的故障快速回朔,大幅提升運維效率
- 按時間或按需自動負(fù)載、平滑擴縮集群資源、分鐘級擴充海量算力,做到集群的縮放自如
- 基于 VPC 網(wǎng)絡(luò)隔離與安全組件保證網(wǎng)絡(luò)安全可信
基于以上特性,騰訊 EMR 做到了資源的按需使用,在降低企業(yè)閑置成本的基礎(chǔ)上,做到了集群的易于維護(hù),完美適配推薦系統(tǒng)場景下的大數(shù)據(jù)任務(wù)需求。
2.2 EMR x 知乎大數(shù)據(jù)集群升級實踐
知乎是中文互聯(lián)網(wǎng)最大的知識分享平臺,數(shù)億用戶通過知識建立連接,找到感興趣的高質(zhì)量內(nèi)容。為了將全平臺的優(yōu)質(zhì)內(nèi)容與終端用戶更智能更高效的結(jié)合在一起,知乎對大數(shù)據(jù)平臺對數(shù)據(jù)工具提出更實用要求,由于原集群存在資源交付率低,運維成本高等問題,知乎選擇基于開源 Hadoop 技術(shù)棧構(gòu)建的數(shù)千臺規(guī)模的大數(shù)據(jù)集群無縫升級到騰訊云大數(shù)據(jù)云原生方案,該場景面臨如下挑戰(zhàn):
A.業(yè)務(wù)遷移 - 無感知
為了保證改動對原先業(yè)務(wù)完全透明,需要在業(yè)務(wù)無感知情況下,對原大數(shù)據(jù)集群進(jìn)行托管。為了實現(xiàn)該訴求,騰訊云采用定制化開放方案,構(gòu)建基于知乎軟件版本的鏡像版本并產(chǎn)品化上線。由于在線資源 TKE 集群與離線 Hadoop 集群一般情況下均為錯峰計算,為了解決原有資源的整體資源利用率,采用 EMR on TKE 方案,離線在線混合部署模式,提升整體資源利用率。在大數(shù)據(jù) EMR 與 TKE 的融合過程中,為了保證離線任務(wù)與在線任務(wù)的隔離線,采用 Cgroup、BT 調(diào)度算法等方式做好資源隔離,防止離線任務(wù)資源侵占在線任務(wù)資源,影響線上服務(wù)的穩(wěn)定性。例如訓(xùn)練任務(wù)啟動過多節(jié)點侵占集群資源,導(dǎo)致線上推理任務(wù)存在資源、網(wǎng)絡(luò)、IO 等風(fēng)險。
B.技術(shù)需求 - 版本兼容
由于知乎原本的集群是基于開源 Hadoop 構(gòu)建,這與騰訊云大數(shù)據(jù)版本之間存在差異, 因此需要提供一個可行的產(chǎn)品化方案來解決該問題?
除此之外,為了保證大數(shù)據(jù) EMR 集群中任務(wù)運行的穩(wěn)定性,騰訊云也對 Yarn 資源調(diào)度進(jìn)行改造升級,保證資源調(diào)度時?AM 管理節(jié)點分配的合理性,同時也能做到資源彈性擴容到隊列維度。
2.3 實踐價值
基于騰訊云原生 TKE?方案,騰訊云團(tuán)隊探索出了 EMR 離在線混合部署策略,協(xié)助知乎由開源 Hadoop 集群無感知遷移至騰訊云大數(shù)據(jù)云原生方案,幫助知乎極大提升了資源利用率,從而大幅降低了技術(shù)成本,低峰期資源利用率提升高達(dá)5倍,達(dá)到了真正的降本增效。結(jié)合小紅書與知乎的案例可以看到大數(shù)據(jù)下的推薦系統(tǒng)實戰(zhàn)離、在線任務(wù)混合,對資源高效利用要求高,非常適配?EMR x TKE 的云原生解決方案。
五.總結(jié)
好的工具已經(jīng)備好,希望各位優(yōu)秀的程序員能夠在各個工作利器的加持下,碼到成功,碼出精彩。更多的好用工具可以掃碼獲取 👇👇👇
總結(jié)
以上是生活随笔為你收集整理的2022年推荐算法效率开发必备工具榜单的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: app启动页自动跳转源码_关于移动端Ap
- 下一篇: (转)WebSphere的web工程中怎