NUMA架構下的預估系統性能優化

語言: CN / TW / HK

圖片來源:https://unsplash.com/photos/RgufvmXe4G4

作者:瑜鋒

1. 背景

在推薦業務中,經典的分層邏輯為三層:召回、精排、重排,其中精排層無疑又是最複雜、最具挑戰性的一個環節,預估系統主要是為精排業務提供線上推理的服務。

當前雲音樂線上預估系統經過三年多時間的不斷迭代,已經接入包括音樂、搜尋、直播、創新業務等多個場景模型。

預估系統主要的邏輯包含三個部分:

  • 特徵查詢:根據業務從分散式儲存中查詢使用者、場景、item等特徵,解析之後準備下一階段的特徵抽取;
  • 特徵抽取:根據模型定義的輸入特徵,對上一階段查詢回來的特徵逐個計算,轉換成模型需要的資料格式,例如embedding、hash等;
  • 前向推理:將特徵抽取後的資料輸入機器學習庫,經過一系列的矩陣運算等操作,最後輸出一個使用者對一個item的得分;

三個階段中,特徵查詢屬於IO密集型,其他兩個階段屬於CPU密集型,尤其是前向推理階段,需要完成大量的矩陣相乘等操作,並且期間有大量的記憶體申請和讀寫邏輯。

當前雲音樂線上預估系統部署數十線網叢集,上線數百物理機。系統上線初期主要使用至強E5 56核機器,去年開始採購的都是至強Gold 96核機器,兩種機型具體配置如下:

對比兩種機型配置,高配機器的計算能力至少是低配機器的兩倍。但是在上線執行時的效能表現以及日常壓測資料顯示,高配機器在實際業務處理能力上並沒有成線性增加,存在較大的效能損失。

下表中對比了兩個場景模型在兩種機型上的業務處理能力:

2. NUMA架構

當單核處理器計算能力無法滿足日益增長的算力需求,處理器製造廠商開始朝著多核的方向發展。

單機伺服器架構經歷了從 一致性訪存(UMA)非一致性訪存(NUMA) 架構的演變。

在UMA架構中,多路CPU無主次關係,共享記憶體、匯流排、作業系統等資源,此時每個CPU訪問記憶體任何地址所耗費的時間是相等的。由於所有CPU共享記憶體,導致了單機的擴充套件能力有限,隨著CPU數量增加,記憶體訪問衝突也會大大增加。

為了進一步提高單機CPU數量,同時還能保證計算資源利用率,於是NUMA架構出現,通過犧牲記憶體的訪問延時來提高機器的擴充套件性。

在NUMA架構中,每個CPU都有本地記憶體,同時可以通過高速交換矩陣實現其他CPU本地記憶體的訪問。這種架構的特點就是CPU訪問自己的本地記憶體速度非常高,但是訪問遠端的CPU本地記憶體因為需要經過的匯流排更長,延時也會有相應的增加。

通過lscpu命令檢視,當前線上的伺服器都是配置的2個CPU節點的NUMA架構,接下來將會測試是否是NUMA架構的訪存特性,導致在高配機器上單機處理能力無法達到預期的提升一倍的問題。

3. 親核性測試

為驗證在NUMA架構下的親核性對預估系統性能的影響,決定對單機三種部署方式進行測試:單節點、雙節點不綁核、雙節點綁核。綁核通過使用Linux作業系統上的numactl命令來實現。

測試的模型選擇了一個複雜場景(模型A)和簡單場景(模型B),測試這兩個模型在三種不同的部署方式下,CPU利用率達到60%時,單機的請求處理能力。

3.1 低配機器測試結果

模型 A:

模型 B:

雙節點綁核相對於單節點部署方式有10%~20%左右的單機請求量提升,但是模型A在雙節點綁核部署方式上平均耗時也增加約10%;同時在模型B上,雙節點不綁核相對於單節點部署方式,反而單機請求量降低了10%。

總體上看,在低配機器上,NUMA架構的親核性對系統的效能影響不明顯,主要原因是因為計算資源還比較少,預估系統產生的訪存競爭不大。

3.2 高配機器測試結果

模型 A:

模型 B:

無論在模型A還是模型B,雙節點綁核相較於單節點部署,單機請求處理能力有比較明顯提升,分別帶來了75%和49%的提升;同時雙節點不綁核效能表現最差,主要是因為雙節點的執行緒數相較於單節點有較大增加,導致了訪存的競爭、執行緒切換開銷更為明顯。

4. 測試結論

相較於低配機器上的單節點部署方式,高配機器通過採用雙節點綁核的部署方式,在模型A和模型B上,分別帶來了169%和112%的效能提升,符合計算資源增加一倍情況下請求處理能力相應提升的預期。

高配機器上效能提升相較於低配機器更為明顯,三種部署方式效能排序:雙節點綁核 > 單節點 > 雙節點不綁核

本文釋出自網易雲音樂技術團隊,文章未經授權禁止任何形式的轉載。我們常年招收各類技術崗位,如果你準備換工作,又恰好喜歡雲音樂,那就加入我們 [email protected]