Facebook利用人工智慧調整網路伺服器效能
機器學習近年來已被用於調整機器學習本身的效能,那麼為什麼不用機器學習來提高網路伺服器的效能呢?
Facebook的研究人員就是這樣做的,他們週一發表了有關用機器學習調整執行在社交網路伺服器基礎設施上的伺服器設定的文章。
Benjamin Letham、Brian Karrer、Guilherme Ottoni和Eytan Bakshy的文章(https://projecteuclid.org/euclid.ba/1533866666)發表在_Bayesian Analysis_期刊上,作者還在Facebook的人工智慧研究部落格上發了博文(https://research.fb.com/efficient-tuning-of-online-systems-using- bayesian-optimization/)。
Facebook與所有網際網路服務一樣也執行所謂的A/ B測試,目的是評估伺服器在各個變數發生變化時的執行情況。有些人調整過不同版本的網頁,例如改變按鈕的外觀或文字的佈局,他們就知道,調整(例如在一個商業網站上的調整)可以優化諸如點選率或購物車使用之類的東西。
Facebook的科學家在這項研究中研究了實時生產系統(JIT:Just- in-time)編譯器選項的改變對效能的影響,編譯器將Python轉換為Facebook用於提供HTTP請求的開源Web伺服器內的本機x86伺服器程式碼,即“HipHop虛擬機器”。
例如,可以將JIT設定為執行給定程式碼塊的內嵌之類的操作。這樣的調整會令程式碼更大些,因此需要進行A / B測試,原因是更大的程式碼會消耗更多的伺服器記憶體,因而有必要確定是否值得這樣做。
文章的作者用了名為“貝葉斯分析”的方法,貝葉斯分析是一種機器學習演算法,基本思想是強調使用過去或先前的資訊來確定最佳解決方案。貝葉斯分析在過去十年裡被廣泛用來(https://papers.nips.cc/paper/4522-practical-bayesian-optimization-of- machine-learning-algorithms.pdf)優化“超引數”機器學習,例如用來確定批量的大小或學習速度引數的大小。由於貝葉斯優化可以代替人手做超引數設計的苦差事,有人將用了貝葉斯優化的機器學習稱為“自動化”機器學習(http://www0.cs.ucl.ac.uk/staff /c.archambeau/publ/dali_archambeau18.pdf)。
文章的作者在使用JIT編譯器的設定執行A / B測試時在各種不同的地方用了貝葉斯。這樣做最大的好處是速度。由於必須在生產環境中進行測試以觀察不同設定的影響,因此希望能夠快速完成測試,以便將更改進一步用於網路伺服器。
作者在文章裡表示,典型的A / B測試是在每一次只測試一個配置的改變,而貝葉斯優化則“允許我們用更少的測試共同調整更多的引數並找到更好的值。”
這裡的關鍵是“共同”這個詞:貝葉斯機制可以從給定的A / B測試推斷出其他引數,以縮小“可行的“配置,因而無需進行相應的實際A / B測試就能排除某些配置選擇。作者用了廣泛搜尋能力的字眼,稱“連續空間裡引數值的測試不僅為我們提供了關於這些引數結果的資訊,而且還提供了關於附近點的資訊。” 貝葉斯模型可以從前期測試結果中獲得了新的經驗資料,這些經驗資料又可以用於進一步縮小搜尋潛在最優配置的範圍,因此整個A / B測試逐步地就越來越高效了。
Facebook這項貝葉斯優化研究的新貢獻是處理噪聲。作者指出,在A / B實驗中測試伺服器設定與優化機器學習網路不同,這時的測試結果和測量均存在很多噪音,在現實世界中,設定的變化對伺服器效能的影響可以是各種各樣的,而且還存在“噪聲”約束,例如伺服器記憶體的使用需要在合理的範圍之內。文章的作者提出了在貝葉斯演算法中解決這種噪聲的方法,他們得出的結論是,用新方法比用其他型別的貝葉斯方法更容易得到最優解。
用了此方法的A / B測試方法存在一個有趣的小問題,有些配置從不會被用到:因為貝葉斯優化分析的預測完全排除了那些配置,相應的變數已在測試中被移除。文章的作者則認為這是個好處,可以減少使用者進行大量不同實驗的煩惱。