2023 年 9 月,AI 領域的權威基準評測 MLPerf 推出了 Storage Benchmark。該基準測試透過模擬機器學習 I/O 負載的方法,在不需要 GPU 的情況下就能進行大規模的效能壓測,用以評估儲存系統的在 AI 模型訓練場景的適用性。
目前支援兩種模型訓練:BERT (自然語言模型) 和 Unet3D(3D醫學成像)。雖然目前不支援大語言模型如 GPT、LLaMA,但 BERT 與大語言模型同為多層 transformer 結構,大語言模型的使用者仍可從 BERT 訓練結果獲得一定的參考。
高效能儲存產品廠商 DDN、Nutanix、Weka 和 Argonne National Laboratory(簡稱 ANL)釋出了 MLPerf 的測試結果作為行業參考,我們也使用 JuiceFS 企業版進行了測試,讓使用者瞭解它在模型訓練中的表現。
測試中最直觀的指標是 GPU 利用率,大於 90% 為測試透過,表示儲存系統能夠滿足訓練業務的效能需求。JuiceFS 在 Unet3D 的 500 卡規模測試中,GPU 利用率保持在 97% 以上;在 BERT 的1000 卡規模測試中,GPU 利用率保持在 98% 以上。
01 測試準備
JuiceFS 企業版是基於物件儲存的並行檔案系統,相比社群版它提供了更強的後設資料引擎和快取管理能力,它的架構圖如下:
我們在華為雲上搭建了一套企業版 JuiceFS 檔案系統,使用華為雲 OBS 作為資料持久層,部署了 3 節點的後設資料叢集和多節點的分散式快取叢集,硬體規格如下:
-
後設資料節點:m7.2xlarge.8 | 8vCPUs | 64GiB
-
物件儲存:OBS,頻寬上限 300 Gb/s
-
客戶端節點:ir7.16xlarge.4 | 64vCPUs | 256GiB | Local SSD 2*1,600GiB | 網路卡頻寬 25 Gbps (乙太網)
準備好檔案系統後,我們使用 mlperf 的指令碼生成後續模擬訓練所需要的資料集,所有的測試中 batch size 和 steps 均採用預設設定。目前僅支援模擬 NVIDIA v100 GPU,後文中提到的 GPU 均是模擬 v100。
02 BERT 模型
MLPerf 為 BERT 模型生成資料集時,會按照每個資料集檔案包含 313,532 個樣本的規則來生成,每個樣本大小為 2.5 KB。訓練過程中每個模擬 v100 GPU 每秒能處理 50 個樣本,即每個 GPU 的 IO 吞吐需求為 125 KB/s,絕大部分儲存系統都能輕鬆滿足它的模型訓練需要,JuiceFS 也是一樣的,能夠滿足 1000 卡規模的模型訓練需要。
我們彙集了 MLPerf 的主要公開結果,包括 ANL、DDN、Weka 的資料,並新增了本次測試中 JuiceFS 的結果。
-
JuiceFS 在 1000 GPU 規模下保持 98% 以上 GPU 利用率。
-
ANL 的結果依然非常優秀,考慮到 ANL 測試的網路條件是高頻寬低延遲的 Slingshot 網路,能有這樣的成績也是意料之中的。
03 Unet3D 模型
Unet3D 模型的訓練對頻寬的需求高於 BERT 模型。我們首先在沒有任何快取(包括分散式快取和單機快取)的條件下測試了訓練 Unet3D 模型的情況。在這種設定下,JuiceFS客戶端將直接從物件儲存中讀取資料。
無快取測試
如下圖所示,隨著節點數的增加,GPU 利用率(圖中的綠色線條)會緩慢下降。當 GPU 增至 98 卡時,它出現了一個明顯的拐點,隨後 GPU 利用率隨節點數的增加而急劇降低。
下圖是根據 OBS 監控資料和 MLPerf 的結果繪製出來的曲線圖,可以看到 OBS 頻寬在 98 卡及更大規模的訓練中已經不再增加,成為效能瓶頸。
因此,在沒有快取的情況下,OBS 提供的 300Gb/s 頻寬在 98 卡同時訓練時就已經滿載。根據 MLPerf 90% 的測試透過標準來看,可以滿足最多 110 卡同時訓練 Unet3D 模型。
在對大型資料集進行多機多卡訓練時,單機快取由於其空間限制僅能快取資料集的一小部分;同時,由於訓練過程中資料訪問的隨機性,快取命中率較低。因此,這種情況下,單機快取對於提升整體 I/O 效能的貢獻有限(如上圖綠線,能看到單機的核心快取對讀頻寬有提升作用,雖然核心快取空間多達 200GB ,但效果有限),因此我們沒有進行單機快取的針對性測試。
開啟分散式快取
相比本地快取,分散式快取可以提供更大的快取容量以支撐更大的訓練集和更高的快取命中率,從而提升整個 JuiceFS 叢集的讀頻寬。
JuiceFS 的分散式快取架構如下圖所示,機器學習訓練叢集和 JuiceFS 的快取叢集可以是兩批獨立的機器組成的叢集,它們透過高速網路連線。這兩個叢集都掛載了JuiceFS 客戶端。訓練任務透過 JuiceFS 在本地的掛載點訪問資料。當本地掛載點需要資料時,它會首先從快取叢集請求資料;如果快取叢集中缺失所需資料,系統則會從物件儲存中獲取資料並更新到快取中。如果訓練叢集中的 GPU 節點自身也配置了充足的 SSD 儲存,那麼它們可以直接用作 JuiceFS 的快取盤並組成快取叢集,無需部署獨立的快取叢集。這種配置實際上是將訓練叢集和快取叢集的功能合併在一起。在本次測試中,我們採用了這種混合部署方式。
分散式快取及其容量對 GPU 利用率的影響
之前的測試表明,未開啟快取時,110 卡時的 GPU 利用率不足 90%。為了直觀展示分散式快取對效能的影響,我們對 JuiceFS 進行了進一步的測試。我們選擇 180 卡 GPU 規模的叢集作為測試物件進行新一輪的測試,以評估 JuiceFS 的快取命中率時跟 GPU 利用率關係。
下圖中,橫座標表示快取空間與資料集大小的比例,縱座標表示快取命中率和 GPU 使用率。當完全沒有快取時,GPU 的使用率只有 49%。隨著快取空間比例的增加,快取命中率(藍色線條)逐漸提高,進而帶動 GPU 利用率(綠色線條)上升,當快取命中率到 85% 時, GPU 利用率到了 93.1%, 已經能夠滿足 180 卡的訓練使用。當快取命中率達到 100% 時,GPU 利用率達到最高的 98.8%,幾乎滿載執行。
為了驗證 JuiceFS 的快取系統的擴充套件能力,我們按照資料集的大小調整了快取叢集的容量,確保了快取命中率達到 100%。這樣,所有訓練所需資料均可直接從快取中讀取,而不必從速度較慢的物件儲存中讀取。在這種配置下,我們測試了最多約 500 卡規模的訓練任務,隨著測試規模的增大,GPU 利用率的變化如下圖所示。
從圖中紅色線條可以看到,開啟分散式快取的 JuiceFS 突破了頻寬瓶頸的限制, GPU 利用率會隨著叢集規模變大僅緩慢線性下降。按照上圖的變化趨勢估計,在當期的網路配置 (25Gbps) 下,JuiceFS 可以支撐約 1500 卡訓練 Unet3D 時保持 GPU 利用率在 90% 以上。
對比 Unet3D 的測試結果:JuiceFS/ANL/DDN/Weka
DDN、Weka 公佈的資料中最大規模的模擬 GPU 總數低於 200。
ANL 在 512 卡的規模下依然沒有明顯衰減,GPU 利用率能夠達到 99.5%。ANL 的讀寫頻寬為 650 GBps,理論上最多能支撐 1500 卡訓練 Unet3D, 它的出色表現與充足的硬體配置密切相關,具體內容可以前往 ANL 的文章瞭解。
JuiceFS 的 GPU 利用率隨著叢集規模變大,緩慢線性下降,在 500 卡規模時保持 97% 以上。JuiceFS 遇到的效能瓶頸主要來自於快取節點的網路頻寬。由於快取節點的機型數量和網路頻寬有限,本次測試達到的最大規模為 483 卡。在這種規模下,JuiceFS 叢集的聚合頻寬為 1.7 Tb,而 ANL 叢集的頻寬是 5.2 Tb 。
04 小結
-
在 BERT 測試中,JuiceFS 在 1000 GPU 規模的訓練中能保持 98% 以上 GPU 利用率;
-
在 Unet3D 測試中,隨著叢集規模變大,JuiceFS 在接近 500 GPU 訓練中保持 97% 以上 GPU 利用率。若雲服務商可以提供更高的網路頻寬或更多的機器,這一規模還可進一步提高;
-
分散式快取的優勢在於極強的擴充套件性,可以利用更多節點上的 SSD 儲存聚合更大的快取空間,提高整個儲存系統的讀頻寬;當然它也會帶來一些 CPU 開銷,但在 AI 訓練場景中,使用閒置的 CPU 資源提升系統頻寬是值得,甚至必要的。
-
在雲上進行機器學習訓練時,高效能 GPU 機型通常都具有高效能的 SSD 和高頻寬的網路卡,這些裝置還可以作為分散式快取節點。因此,相比於專有的高效能儲存產品,使用 JuiceFS ,更具價效比,更易擴充套件。
大規模的 AI 訓練場景中,通常都需要專有高效能儲存,或是基於全閃架構和核心態的並行檔案系統才能滿足效能需求。但隨著計算負載增加、叢集增大,全閃的高昂成本和核心客戶端的運維複雜度會成為使用者面臨的一大挑戰。而 JuiceFS ,作為一款全使用者態的的雲原生分散式檔案系統,藉助分散式快取來大幅提升系統的 IO 吞吐量,使用便宜的物件儲存完成資料儲存,更適合大規模 AI 業務的整體需要。
關於 MLPerf
MLPerf 是一套基準測試套件,它主要用於評估機器學習在本地和雲平臺上的訓練及推理效能,為軟體框架、硬體平臺和機器學習的雲平臺提供了一個獨立且客觀的效能評估標準。該套件的測試包括測量機器學習模型訓練到目標準確度所需的時間以及訓練完成的神經網路在新資料上執行推理任務的速度。這個套件是由 30 多個與 AI 相關的組織共同建立的。點選此處瞭解詳情。
希望這篇內容能夠對你有一些幫助,如果有其他疑問歡迎加入 JuiceFS 社群與大家共同交流。