KeenTune的演算法之心——KeenOpt 調優演算法框架 | 龍蜥技術
文/KeenTune SIG
KeenTune(輕豚)是一款 AI 演算法與專家知識庫雙輪驅動的作業系統全棧式智慧最佳化產品,為主流的作業系統提供輕量化、跨平臺的一鍵式效能調優,讓應用在智慧定製的執行環境發揮最優效能。自 2021年 9 月正式成立 SIG 並 宣佈開源以來,受到了廣大開發者的關注。KeenTune 的整體開源框架聚焦於通用和靈活的設計原則,其中對於調優場景的擴充套件,透過分散式架構以及標準化的場景配置模式,可以方便的實現對於 Linux 核心引數,應用配置引數,編譯器最佳化引數,benchmark 配置引數等調優物件和配套工具的快速適配。
今天, KeenTune 再次帶來開源重磅特性——新增通用的調優演算法框架:keenopt。有了 keenopt 的加持,KeenTune 不再僅僅是支援靈活擴充套件調優場景的調優工具,還成長為了具備靈活擴充套件調優演算法的調優平臺,不僅可以作為效能調優工程師的法寶,也可以成為演算法工程師的利器。Keenopt 調優演算法框架的開源設計,同樣旨在方便快捷的擴充套件學術界和工業界新提出的調優演算法,以及結合實際需要定製化的調優演算法。
聰明的童鞋一定會自然問出一個問題:為什麼不能只呼叫當前流行的調優演算法庫,而要打造一個演算法框架呢?這就要從我們調優過程中趟過的一個一個坑說起了...
坑窪調優路
一提起調優,首先進入讀者腦海的就是近年來愈發流行的針對機器學習模型,尤其是神經網路超引數的調優演算法。這些調優演算法從貝葉斯最佳化和遺傳演算法出發,凝聚了豐富多彩的調優思路,已經成為提升機器學習演算法研發效率的利器。那麼這些大多圍繞著機器學習模型超引數最佳化的演算法,是不是可以直接應用於比如系統軟體配置和引數調優上來呢?答案是經典的 yes and no。
首先,經典的貝葉斯最佳化演算法(基於高斯代理模型)及其衍生演算法(如 TPE),當然是可以直接應用於系統引數調優的。但概括來說,這類演算法整體的調優效率卻經常無法滿足無論是機器學習模型超引數調優還是系統引數調優。相應的,近年來的學術創新主要圍繞著進一步提升調優的整體效率展開。也就是在這個層面上,機器學習模型超引數的調優和系統引數調優,走上了不同的道路。
(圖1/條條調優路)
對於機器學習模型超引數調優來說,調優的時間開銷主要來自兩個方面:
(1)調優演算法搜尋策略所需要的運算耗時。
(2)機器學習模型訓練的耗時。
對於近年來逐漸廣為人知的基於高保真原理的最佳化演算法,如 Successive Halving[1],HyperBand[2] 等,主要聚焦於減少第二個方面的時間開銷,畢竟和訓練動輒千萬上億級引數的模型,調優演算法搜尋策略的開銷簡直不值一提。幸運的事,機器學習模型訓練的耗時確實是靈活可調整的。
然而,對於系統引數調優來說,雖然調優的時間開銷也主要來自兩個方面:
(1)調優演算法搜尋策略所需要的運算耗時。
(2)評估調優推薦引數配置的耗時。
但是其中(2)的耗時由於往往來自呼叫標準 benchmark 工具獲得,是固定不可調整的。具體例子可以設想一下執行 Fio、SPEC CPU 2017 這類 benchmark 工具的過程。因此,針對系統引數調優的演算法領域,無法透過最佳化(2)的開銷曲線救國,只能老老實實的提升調優演算法的搜尋策略。到此,我們來到了第二個坑。
(圖2/從滿天星到一團火)
引數調優可謂是“維度災難”的一個重災區。基於貝葉斯最佳化框架的調優演算法,本質上是在一個漆黑的空間中摸索,而隨著維度的增加,這個漆黑的環境的 volume 急劇增大,摸索的時間成本的增加是不可避免的。對於機器學習模型超引數的調優來說,這個維度往往在十幾到二十幾這個量級,維度的鐵拳仍然比較溫柔。而對於系統引數調優來說,這個維度往往在幾十到上百甚至過千的量級。在這個量級維度的鐵拳下,經典的貝葉斯調優演算法及其衍生演算法,往往就會被錘成齏粉。以基於高斯代理模型的貝葉斯最佳化演算法來說,我們可以比較粗糙的概括這種演算法為“散點”法,這並不是說這類演算法就是亂槍打鳥,畢竟有強大的貝葉斯原理作為引領,搜尋的策略和路徑還是有跡可循的。
然而,當維度足夠高的時候,已經有相關研究證明,貝葉斯最佳化演算法和隨機搜尋演算法基本上是一對臥龍鳳雛的存在[3]。因此,近年來 AI 領域頂會的學術成果,已經開始關注高維空間中的貝葉斯最佳化問題,由這種“散點”法,逐漸過渡到“局域”法[4,5]。這裡“局域”又是我們的一個比較概括的說法,主要原理是在高維空間中,搜尋主要被限制在於較小的區域性區域進行,而各個區域性區域本身的取捨依然服從貝葉斯原理。這類“局域”法有效的限制了搜尋區域的 volume,因此往往有更高效的收斂和更好的調優效果。尤其是更好的收斂效果這種特性,對於系統引數的調優實踐來說,可謂一定程度上減輕了燃眉之急,因為實際的系統引數調優實踐,往往要考慮系統資源開銷和整體時間限制,從而需要在儘可能少的調優輪次中給出最優或略低於最優的調優結果。當我們欣喜的準備吸取這些演算法進入 KeenTune 去磨刀霍霍的時候,我們來到了第三個坑。
如前所述,當前主流的調優演算法庫或工具,往往圍繞著機器學習模型超引數調優的場景進行擴充套件。因此如 Scikit-Optimize (skopt)[6] 和 NNI[7] 這類演算法庫,更多的聚焦於支援 Successive Halving 和 HyperBand 這些針對模型訓練開銷最佳化的演算法,而對於解決高維貝葉斯最佳化問題的演算法不夠及時。此外,即使想在這些演算法庫中定製化實現這些演算法,也依然需要詳細的研讀這些庫中演算法的實現,照貓畫虎的在複雜的程式碼邏輯中前進,這種苦楚只能說懂得都懂。因此,當我們拔劍四顧的時候,刀鞘卻阻礙了我們披巾斬棘的身影。至此,讀者已經和我們來到了同樣的境地,也看到那臨門一腳的必選項 -- 打造更靈活通用的調優演算法框架。
KeenOpt 的初心
當我們談論引數調優演算法框架的時候,我們談論的是 :
(1)演算法整合和定製化的方便快捷。
(2)演算法的標準化和模組化。
圍繞著這兩個設計初心,我們的演算法框架儘可能的將各個主要功能模組獨立的抽象成類。
(圖3/ KeenOpt框架概圖)
如圖 3 所示,自頂向下的從最佳化總體控制類,衍生出如隨機和網格搜尋的經典最佳化演算法類,和基於貝葉斯最佳化的最佳化演算法類。其中最佳化總體控制類,只要求提供 acquire() 和 feedback() 函式,分別負責選取引數和獲得 benchmark 執行的反饋結果。其中針對貝葉斯最佳化的演算法類,又進一步抽象出:
-
調優控制類:提供貝葉斯最佳化必須依賴的介面引數。在最基礎的最佳化類中,一定程度上實現了對於貝葉斯最佳化演算法介面的標準化,包括引數空間,歷史資料記錄,代理模型,和搜尋策略。
-
引數空間類:引數空間可以靈活定義整型,浮點型,類別型的引數和其取值範圍。由於實際的調優場景中,無可能出現真正意義上的連續引數空間,因此每個引數相應的還搭配了可定義的步長。
-
代理模型類:代理模型的選擇可以根據具體需要,靈活的選擇經典迴歸類機器學習模型和基於 pytorch 實現的神經網路類模型。
-
搜尋策略類:具體的搜尋策略可以實現經典的貝葉斯最佳化演算法,也可以實現如上所述的“局域”搜尋策略,整個類只要求實現具體的 search()方法。
下圖 4 中展示了當前 KeenOpt 的支援的部分演算法(TPE, LA-MCTS-Bo和LA-MCTS-TuRBO) 在 4 中常見的 synthetic 函式在低維(20)和高維(100)情況下的對比結果,可見“局域”演算法確實比經典貝葉斯最佳化演算法有更好的最佳化結果和更高的收斂效率。
(圖4/ KeenOpt支援演算法效果對比)
後記
因為篇幅優先,帶領大家走馬觀花的看一看 keenopt 的部分能力,今天的 KeenTune 旅行就先到此結束。具體詳細資訊及功能,請大家關注後續的 KeenOpt 的介紹,期待與各位開發者一起討論交流。
近一年來,KeenTune 在龍蜥社群、阿里集團內外的專案中積極參與共建,在此期間,也遇到到了一起做專案的小夥伴,非常感謝能夠一起並肩作戰的大家,非常歡迎有更多的小夥伴參與 SIG 共建(SIG 地址見文末)。
keenopt 的倉庫(連結見文末)也將近期基於keentune-brain進行更新,原始碼部分也在逐步的開放給大家。
有興趣的小夥伴,歡迎加入我們 KeenTune SIG,這裡匯聚了一群有想法有能力的小夥伴~(每雙週週四上午11:00-12:00 是 KeenTune 的雙週會,會議日程在龍蜥官網首頁可以檢視)。
相關連結地址:
KeenTune SIG地址:
keenopt 倉庫連結地址:
龍蜥官網:
引用
[1] Kevin G. Jamieson, Ameet Talwalkar: Non-stochastic Best Arm Identification and Hyperparameter Optimization. AISTATS2016: 240-248
[2] Lisha Li, Kevin G. Jamieson, Giulia DeSalvo, Afshin Rostamizadeh, Ameet Talwalkar: Hyperband: A Novel Bandit-Based Approach to Hyperparameter Optimization. J. Mach. Learn. Res.18: 185:1-185:52 (2017)
[3] Marc-André Zöller, Marco F. Huber: Benchmark and Survey of Automated Machine Learning Frameworks. J. Artif. Intell. Res.70: 409-472 (2021)
[4] David Eriksson, Michael Pearce, Jacob R. Gardner, Ryan Turner, Matthias Poloczek: Scalable Global Optimization via Local Bayesian Optimization. NeurIPS2019: 5497-5508
[5] Linnan Wang, Rodrigo Fonseca, Yuandong Tian: Learning Search Space Partition for Black-box Optimization using Monte Carlo Tree Search.NeurIPS2020
[6]
[7]
—— 完 ——
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70004278/viewspace-2920876/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 軟體調優方法有哪些?看看飛騰技術專家怎麼說 | 龍蜥技術
- 技術門檻高?來看 Intel 機密計算技術在龍蜥社群的實踐 | 龍蜥技術Intel
- 跨語言程式設計的探索 | 龍蜥技術程式設計
- 龍蜥利器:系統運維工具 SysAK的雲上應用效能診斷 | 龍蜥技術運維
- 助力Koordinator雲原生單機混部,龍蜥混部技術提升CPU利用率達60%|龍蜥技術
- 萬里資料庫加入龍蜥社群,打造基於“龍蜥+GreatSQL”的開源技術底座資料庫SQL
- eBPF 雙子座:天使 or 惡魔?| 龍蜥技術eBPF
- 龍蜥開源核心追蹤利器 Surftrace:協議包解析效率提升 10 倍! | 龍蜥技術協議
- 龍蜥開源Plugsched:首次實現 Linux kernel 排程器熱升級 | 龍蜥技術Linux
- 國內首發視覺化智慧調優平臺,小龍帶你玩轉KeenTune UI視覺化UI
- 龍蜥社群高效能儲存技術 SIG 11 月運營回顧 | 龍蜥 SIG
- 讓 AI 更簡單 人工智慧平臺 SEAL 攜手龍蜥落地達摩院演算法能力 | 龍蜥案例AI人工智慧演算法
- 利器解讀!Linux 核心調測中最最讓開發者頭疼的 bug 有解了|龍蜥技術Linux
- 浪潮資訊AI演算法研究員:解讀人工智慧大模型在產業中的服務新態勢 | 龍蜥技術AI演算法人工智慧大模型產業
- 基於 Coolbpf 的應用可觀測實踐 | 龍蜥技術
- SysOM 案例解析:消失的記憶體都去哪了 !| 龍蜥技術記憶體
- 虛擬化解決方案 virtio 的技術趨勢與 DPU 實踐解讀 | 龍蜥技術
- 深入解讀雲場景下的網路抖動 | 龍蜥技術
- 技術解讀:Dragonfly 基於 P2P 的智慧映象加速系統 | 龍蜥技術Go
- 直播回顧:隱私計算的關鍵技術以及行業應用技巧 | 龍蜥技術行業
- 演算法與演算法工程師,技術與技術人員演算法工程師
- 【演算法框架套路】回溯演算法(暴力窮舉的藝術)演算法框架
- 入門即享受!coolbpf 硬核提升 BPF 開發效率 | 龍蜥技術
- 一文解讀機密容器的崛起和發展 | 龍蜥技術
- JVM調優:基本垃圾回收演算法JVM演算法
- 龍蜥社群&龍蜥開發者獲CSDN2021年度技術影響力「年度開源專案」獎和「年度社群之星」
- 如何透過 open-local 玩轉容器本地儲存? | 龍蜥技術
- 依然順滑!Dragonwell 11如何改造全新垃圾回收器ZGC? | 龍蜥技術GoGC
- 致敬 hacker :盤點記憶體虛擬化探索之路|龍蜥技術記憶體
- 效能提升 57% ,SMC-R 透明加速 TCP 實戰解析 | 龍蜥技術TCP
- SysAK 應用抖動診斷篇—— eBPF又立功了! | 龍蜥技術eBPF
- 如何保證 Java 應用安全?標準答案來了 | 龍蜥技術Java
- 螞蟻安全科技 Nydus 與 Dragonfly 映象加速實踐 | 龍蜥技術Go
- 深入解讀基礎軟體雲原生面臨的挑戰 | 龍蜥技術
- 技術解讀倚天 ECS 例項——Arm 晶片的 Python-AI 算力最佳化 | 龍蜥技術晶片PythonAI
- 技術解讀:現代化工具鏈在大規模 C++ 專案中的運用 | 龍蜥技術C++
- 龍蜥白皮書精選:基於 SM4 演算法的檔案加密(fscrypt)實踐演算法加密
- 龍蜥開發者說:聊一聊我技術生涯的“三次迭代” | 第 3 期