【CSDN 編者按】Dropbox 藉助機器學習的預測功能,每年能為公司節省了一百多七十多萬美元的基礎架構成本。非常了不起的成就。本文,一起來看一看 Dropbox 採用機器學習的經過,以及分析一下其中的利弊。
最近,Dropbox 優化了生成和緩存文檔預覽的方式,並藉助機器學習的預測能力,每年為公司節省了 170 萬美元的基礎架構成本。Dropbox 的一些常用功能都採用了機器學習,例如搜索、文件與文件夾提示以及文檔掃描 OCR。雖然用戶看不到 Dropbox 採用的機器學習,但這些應用程式仍以其他方式推動了業務的發展。在本文中,我們就來看一看 Dropbox 採用機器學習的經過,以及其中的利弊。
預覽功能用戶可以利用 Dropbox 的預覽功能直接查看文件,而無需下載內容。除了常見的縮略圖預覽之外,Dropbox 還提供交互式預覽界面,可供用戶共享文件和共同編輯文件,包括添加批註和標記其他用戶。我們的內部系統 Riviera 負責安全地生成文件預覽,它可以處理數百種支持的文件類型的預覽。它可以將各種內容轉換操作連結在一起,創建適合特定文件類型的預覽。例如,Riviera 可以將 PDF 文檔的某一頁柵格化,在 Dropbox 的 Web 界面中顯示高解析度的預覽。完整內容的預覽功能支持批註和共享之類的交互。大型圖片可以轉換成縮略圖,以供在各種情況中顯示給用戶,包括搜索結果或文件瀏覽器。在 Dropbox 的規模下,Riviera 每天需要處理數十 PB 的數據。為了加快某些類別的大型文件的預覽,Riviera 會提前生成預覽,並緩存預覽結果(此過程稱為預熱)。由於我們支持的文件量非常巨大,因此預熱消耗的 CPU 與存儲也非常可觀。我們看到採用機器學習可以降低這些成本,因為有些預生成的內容從不會有人查看。如果我們可以有效地預測某個預覽是否會被使用,則只需預熱我們確信一定會被查看的文件,從而節省計算和存儲空間。我們的這個項目名叫 Cannes(坎城),這個名字的靈感來自法國坎城電影節。
機器學習的利弊權衡在預覽的優化過程中,機器學習的兩項折衷決定了我們的指導原則。第一個挑戰是權衡機器學習為基礎設施帶來的成本效益。減少預熱的文件可以節省成本,無人不喜歡,但也有可能漏掉一些文件,造成不良的用戶體驗。如果緩存中沒有相應的文件預覽,則 Riviera 需要動態地生成預覽,而在這期間用戶只能等待。我們與預覽團隊合作開發出了一種預防措施,防止用戶體驗降級,並通過這種預防措施來調整模型,以合理的方式節省費用。另一個需要權衡的是複雜性和模型的性能 vs. 可解釋性和部署的成本。通常,你需要權衡機器學習的複雜性與可解釋性:通常模型越複雜,預測就越準確,但代價是可解釋性會降低,你很難解釋為何得出了這樣的預測,而且部署的複雜性可能也會增加。在第一次迭代中,我們的目標是儘快提供可解釋的機器學習解決方案。由於 Cannes 是在現有系統內新構建的機器學習應用程式,因此我們偏向於使用一種比較簡單且可以解釋的模型,這樣我們就可以在研究更複雜的模型之前,集中精力建立模型、指標以及報告。如果出現問題,或 Riviera 出現意外行為,機器學習團隊也能夠進行調試,並了解是 Cannes 的原因還是其他問題。我們的解決方案必須相對簡單且成本低廉,因為我們每天都需要部署將近 5 億個請求。目前的系統只能預熱所有的可預覽文件,因此任何改進都可以節省成本,而且越快越好!
Cannes v1考慮到這些權衡之後,我們選擇了一個簡單、易於訓練且易於解釋的模型。第一版的模型是一個梯度提升分類器,訓練時採用了文件擴展名、存儲了文件的 Dropbox 帳號類型,以及該帳號最近 30 天的活動等作為輸入特徵。在離線預留數據上訓練時,我們發現該模型經過預熱後,預測的預覽準確率可以在最多 60 天內超過 70%。該模型拒絕了預留數據中大約 40%的預熱請求,並且性能在我們為自己設定的預防指標以內。假陰性的數量很少,假陰性指的是我們預測不會被查看、但最終在接下來的 60 天內被查看的文件,一旦出現這種情況,我們就需要動態生成預覽。我們估算了一下成本:「拒絕百分比」- 假陰性,結果發現每年可以節省 170 萬美元。在探索預覽優化之前,我們想確保節省的成本能夠超過構建機器學習解決方案的成本。我們大致估算了一下 Cannes 項目可以節省的成本。在大型分布式系統中設計和部署機器學習系統,你需要考慮系統的變化隨著時間的推移對你的估計產生的影響。我們希望初始的模型儘量簡單,這樣一來即使相鄰系統發生一些很小的變化,成本的影響也不會出現數量級的變化。通過分析訓練好的模型,可以讓我們更好地了解第一版實際可以節省的成本,並確認這項投資是值得的。我們利用內部的功能開關服務 Stormcrow,在 Dropbox 流量 1%的隨機樣本上,針對模型進行了 A / B 測試。我們驗證了模型的準確率和預熱「節省」的成本符合我們離線分析的結果,這是個好消息!由於 Cannes v1 不再預熱所有符合條件的文件,因此我們知道預計緩存命中率會下降。在實驗期間,我們觀察到緩存命中率比 A / B 測試中的對照組低了幾個百分點。儘管百分比下降了,但總體的預覽延遲基本上保持不變。我們非常關心尾延遲(第 90 個百分位數以上的請求延遲),因為緩存未命中會導致尾延遲過高,進而嚴重地影響用戶的預覽功能。然而,我們並沒有觀察到預覽尾延遲或總體延遲明顯上升,這很讓人欣慰。這次實時測試讓我們信心大增,我們決定將 v1 模型部署到更多 Dropbox 流量。
大規模的實時預測我們需要一種方法,當某個文件進入預熱路徑時,實時地告訴Riviera該文件是否需要預熱。為了解決這個問題,我們將 Cannes 構建成了預測流水線,負責提取與文件相關的信號,並將其發送給模型,供模型預測未來使用預覽的可能性。從Rivieraprewarm path(預熱路徑)接收文件 ID。Riviera 會收集所有可進行預熱的文件 ID。(Riviera可以預覽 Dropbox 存儲的大約 98%的文件。只有很少一部分文件的文件類型不支持,或無法預覽。)Riviera 發送一條預測請求,其中包含需要預測文件 ID 以及文件類型。獲取實時信號。為了收集預測期間文件的最新活動信號,我們使用了一個名為「Suggest Backend」(建議後臺)的內部服務。該服務會驗證預測請求,然後查詢與該文件相關的信號。信號存儲在 Edgestore(Dropbox 主要的元數據存儲系統)或 User Profile Service(RocksDB 數據存儲,負責聚合Dropbox 活動信號)中。將信號編碼為特徵向量。收集到的信號會被發送到 Predict Service(預測服務),由該服務將信號編碼為表示文件所有相關信息的特徵向量,然後將這個向量發送給模型進行評估。生成預測。模型使用特徵向量,返回該文件可能會被預覽的概率。接著,這個預測結果會被發送回 Riviera,並由 Riviera 預熱未來 60 天內可能會被預覽的文件。記錄請求的相關信息。SuggestBackend(建議後臺)會記錄下特徵向量、預測結果和請求狀態,這些都是調查性能下降和延遲問題的關鍵信息。
其他考慮事項減少預測延遲很重要,因為上述管道位於 Riviera 預熱功能的關鍵路徑上。例如,當將這個模型擴展到 25%的流量時,我們觀察到了一些極端的情況,導致建議後臺的可用性降低到了內部 SLA 以下。經過分析後,我們發現上述第 3 步出現了超時的問題。因此,我們改進了特徵編碼處理,並優化了預測路徑上的幾個問題,降低了這些極端情況下的尾延遲。
優化機器學習在推出機器學習模型的過程期間(及其之後),我們非常注重穩定性,並確保不會對預覽界面的用戶體驗產生負面影響。多個層面的監視和警報是部署機器學習的關鍵組成部分。
Cannesv1 的指標預測服務基礎設施的指標:共享系統有自己內部的 SLA,主要都是圍繞正常運行時間和可用性。我們依靠 Grafana 等現成的工具進行實時監控和發送警報。我們監控的指標包括:預覽指標:我們有一些預覽性能方面的關鍵指標,即預覽延遲分布。我們保留了3%的存檔數據,用於比較使用 Cannes 與不使用 Cannes 兩種情況下的預覽指標,以防止模型漂移或可能會降低模型性能的系統變化。Grafana 是一款應用程式級指標的通用解決方案。主要指標包括:預覽延遲分布(使用 Cannes 與不使用 Cannes),需要特別注意第 90 個百分比以上的延遲。緩存命中率(使用 Cannes 與不使用 Cannes):緩存命中總數/預覽內容的總請求數量。模型性能指標:我們為機器學習團隊使用的 Cannes v1 的模型建立了指標,並建立了自己的流水線來計算這些指標。我們關心的指標包括:ROC 曲線下的面積:雖然我們直接監視了混淆矩陣的統計信息,但我們也希望計算 AUROC,以便將來比較模型的性能。上述模型性能指標每小時計算一次,並存儲在 Hive 中。我們使用 Superset 來可視化重要的指標,並創建了一個 Cannes 的實時變化儀錶板。Superset 是在各項指標的基礎之上構建的,如果底層模型行為發生變化,它會趕在客戶受到影響之前主動通知我們。然而,僅憑監視和警報不足以確保系統健康,明確責任並建立上報問題的流程也是必要的。例如,我們記錄了機器學習系統的上遊依賴項,因為它們可能影響到模型的結果。此外,我們還創建了一個手冊,詳細介紹了解決問題的步驟,幫助值班的工程師判斷問題來自 Cannes 內部還是其他的其他部分,並提供了在根本原因是機器學習模型的情況下,上報問題的流程。機器學習團隊與非機器學習團隊之間的緊密合作有助於確保 Cannes 的平穩運行。
目前的狀況與未來的探索目前 Cannes 已部署到幾乎所有的 Dropbox 流量中了。結果,我們每年 170 萬美元的預熱成本變成了如今每年 9,000 美元的機器學習基礎設施(主要用於建議後臺和預測服務的流量增加)。對於該項目的下一個迭代,我們有許多期待的探索方面。如今 Cannes 已投入生產,我們可以嘗試更為複雜的模型類型。我們還可以根據更詳細的內部費用和使用情況數據,為模型開發更細緻的成本函數。我們還討論過新建一個預覽應用程式,通過機器學習更細緻地控制預測決策,而不是針對每個文件進行預熱/不預熱的二元分類。我們可以通過具有預見性的預熱來發揮更大的創造力,降低成本,同時又不會破壞用戶的文件預覽體驗。我們希望將 Cannes 項目積累的經驗和工具推廣到 Dropbox 的其他基礎設施。利用機器學習優化基礎設施是一個振奮人心的投資領域。參考連結:https://dropbox.tech/machine-learning/cannes--how-ml-saves-us--1-7m-a-year-on-document-previews
☞「面向對象就是一個錯誤!」