新四季網

如何用Alluxio來加速雲上深度學習訓練(如何用Alluxio來加速雲上深度學習訓練)

2023-09-18 03:09:45 1

導讀:本文的主題是如何用Alluxio來加速雲上深度學習訓練,主要包括以下三大部分內容:

Alluxio及其POSIX API簡介使用Alluxio加速雲上訓練(三個層次)Alluxio POSIX API的發展

01

Alluxio及其POSIX API簡介

Alluxio是一個java的開源項目,是雲上的關於數據分析以及深度學習訓練的一個數據抽象層。在Alluxio之上可以對接不同的數據應用,包括Spark、Flink這種ETL工具,presto這種query工具,以及TensorFlow、PyTorch等深度學習框架。在Alluxio下面也可以連接不同數據源,比如阿里雲、騰訊雲、HDFS等。

使用Alluxio,可以對數據應用以及數據源進行無縫連接。Alluxio負責處理與不同數據源以及不同系統的對接。

Alluxio的一個很重要功能是能夠對數據進行讀寫緩存。大家可能很多數據是在雲存儲上,或者是在遠端的HDFS和Ceph集群上,如果每一次的數據應用都要去遠端不斷重複地拿同樣的數據,那麼整個拿數據的流程是非常耗時的,而且可能會導致我們整體訓練或數據處理效率不高。通過Alluxio,我們可以把一些熱數據在靠近數據應用的集群進行緩存,從而提升重複數據獲取的性能。

另一方面,我們也可以對元數據進行本地緩存。每一次獲取元數據都要通過網絡去獲取是比較慢的。如果通過Alluxio,可以直接從本地集群獲取元數據,延時會大大縮短。同時,模型訓練的元數據需求是非常高壓的,我們在與螞蟻金服的實驗中,可以看到成千上萬QPS。如果全部壓力都壓到存儲系統中,存儲系統可能會不穩定,或進行一定的限流處理,導致一些讀取錯誤。通過Alluxio可以很好地分擔這部分元數據的壓力。

接下來重點講解一下Alluxio的POSIX API

深度學習訓練框架PyTorch、TensorFlow、Caffe,它們的原生數據源都是本地文件系統。企業數據量日益擴大,導致我們需要去使用分布式數據源。Alluxio可以把來自不同的遠端存儲系統,以及分布式文件系統的數據都掛載到Alluxio統一的命名空間之內。通過Alluxio POSIX API,把這些數據變成類似於本地文件的形式,提供給各種訓練任務。

上圖直觀地展現了Alluxio POSIX API把遠端的分布式數據變成了本地文件夾的形式。

--

02

使用Alluxio加速雲上訓練

下面來具體講解如何使用Alluxio來加速雲上訓練。

1. Level 1 讀取緩存與加速

一級玩法比較簡單,就是直接通過Alluxio來加速對底層存儲系統中的數據訪問。

如上圖示例,我們有一些數據存儲在我們的存儲系統中,它可能是已經經過數據預處理的數據,也可能是一些原始數據。我們的訓練在雲上的K8s集群上,與數據源之間存在一定的地理差異,獲取數據存在延時。我們的訓練需要重複去獲取同樣的數據源,在這種情況下,使用Alluxio集群,在靠近訓練的集群內進行數據的緩存可以極大地提升我們獲取數據的性能。

可以用簡單的命令來設置數據源,以及一些安全參數,讓Alluxio可以去訪問這些數據源提供了數據源地址以及安全參數之後,就可以把它掛載到Alluxio命名空間內的一個文件夾目錄下面。掛載後,可以用一個命令來把所有的數據都一鍵地分布式加載到Alluxio當中,這樣所有數據都會進行分布式的緩存,為我們的訓練任務提供本地數據性能。

上圖是阿里巴巴進行的一個實測,如果他們的訓練直接通過他們的oss Fuse直接去訪問阿里雲存儲,整個性能可能是幾百兆每秒。而通過Alluxio進行緩存後,可以達到千兆每秒。

在Microsoft,他們的場景是:訓練數據全部存在Microsoft Azure裡面,有超過400個任務需要從Azure讀數據,並寫回到Azure中。這400個任務會涉及到上千個節點,而他們的訓練數據又是比較統一的。在使用Alluxio之前,他們的方案是把一份數據從Azure中不停地拷貝到上千臺機器上。整個過程耗時大,並且由於任務量太大了,常常會導致Azure對他們的數據請求進行限流處理,從而導致下載失敗,還要人工去恢復下載。通過使用Alluxio之後,Alluxio可以從Azure拿取一份數據,然後同樣的一份數據可以供給不同的訓練任務以及不同的機器。這樣load一次數據,就可以進行多次讀取。

在使用Alluxio之後,訓練任務無需等待數據完全下載到本地就可以開始訓練了。訓練結束之後,也可以通過Alluxio直接寫回到Azure。整個流程非常方便,並且GPU的使用率比較穩定。

2. Level 2 數據預處理和訓練

接下來看二級玩法。之所以會有二級玩法,主要是因為一級玩法有一些先決條件,要麼數據已經處理好就放在你的存儲系統中,要麼你的訓練腳本已經包含了數據預處理的步驟,數據預處理與訓練同時進行。然而我們發現在很多用戶場景中,並不具備這些條件。

在很多用戶的場景裡,他們需要用其它方式來先對數據進行預處理,然後這部分預處理後的數據才能供給訓練。比如會用Spark、Flink等大數據ETL工具來進行數據預處理,處理好的數據寫到Alluxio,之後由Alluxio供給給訓練集群。同時,對這部分數據可以進行備份、加速,來更快地提供給訓練集群。

我們通過一個具體案例來了解這個流程。

在BOSS直聘,他們有兩個任務,首先是用Spark/Flink來對數據進行預處理,之後再對這部分預處理好的數據進行模型訓練。所有的中間結果和最後處理好的數據,都直接持久化到Ceph上,再由Ceph為模型訓練提供數據。把中間處理結果也放到Ceph中,會給Ceph增加很多的壓力。高壓的模型訓練給Ceph造成很大壓力。當ETL工作以及訓練多的時候,Ceph非常不穩定,整體性能受到影響。他們的解決辦法就是把Alluxio加到Spark/Flink和模型訓練之間。

Spark/Flink把中間結果寫到Alluxio之中,由Alluxio來提供給模型訓練。Alluxio在背後異步地把這部分數據持久化到Ceph中,以保證這些預處理好的數據不會丟失。所以無論我們的數據源是在本地還是遠端,即使數據持久化的速度比較慢,也不影響我們的訓練流程。並且Alluxio可以是一些單獨的集群,如果ETL或training任務多的時候,可以起更多的Alluxio cluster來分擔這些任務,也可以對不同的Alluxio集群進行資源分配、讀寫限額、權限控制等。

這個流程可以提升存儲系統的穩定性,同時加速從數據預處理到訓練的整個流程,並且可以用更多的Alluxio集群來應對更多的ETL或訓練需求。

我們發現大家會有不同的數據預處理方式。有些用戶用C 、python程序來進行數據清理、轉換等數據預處理。他們使用Alluxio把原始數據從底層存儲系統中加載到Alluxio的緩存內,由Alluxio提供這部分數據預處理的框架,處理好的結果再寫回到Alluxio當中,模型訓練就可以用這部分預處理好的數據進行訓練。

3. Level 3 數據抽象層

Alluxio的三級玩法,就是把Alluxio作為整個數據的抽象層。

整個訓練集群,不管它需要的數據源來自何方,來自一些存儲系統,由大數據ETL處理好的數據,或者是C 、python處理好的數據,都可以通過Alluxio進行讀緩存,供給給訓練。

另一方面,所有數據預處理的中間數據,以及訓練的中間數據,都可以通過Alluxio進行暫時的寫緩存。對於數據預處理和訓練的結果,我們也可以通過Alluxio持久化到不同的存儲系統之中。

不管大家有什麼樣的數據應用,都可以通過Alluxio來對不同的數據源中的數據進行讀寫操作。

比如陌陌,有很多Alluxio集群,數千個節點,存儲超過100TB的數據,服務於搜索以及訓練任務,他們還在不斷地開發新的應用場景。

陌陌把Alluxio用作一個二十億的小文件的訓練。

他們使用Alluxio來加速推薦系統模型的加載,以及ANN系統index的加載。

總結一下,Alluxio可能在以下這些場景幫助到你:

想要進行分布式訓練。有大量的數據,可能無法在本地磁碟完整地存下來,或者有大量的小文件/小圖片。想要通過網絡I/O直接去讀取數據,但網絡I/O性能無法滿足GPU需求。有不同數據源,以及多種不同的訓練/計算框架。保證存儲系統的穩定性,避免超出限額的情況。在多個不同的訓練任務中進行數據分享。

--

03

Alluxio POSIX API的發展

在這裡想重點感謝一下我們整個社區。

Alluxio在AI以及深度學習場景的使用,完全由社區推動。起初阿里巴巴以及南京大學團隊提出這個需求,我們一起來解決這個問題。在那之後,來自騰訊、微軟、Bilibili、AntFinance的一系列非常優秀的工程師都加入到社區,一起把這個項目做起來,並且把它在生產環境中做紮實。目前整個項目已經在很多大公司中進行了生產部署。

最新的2.8版本已經發布。在2.8版本中解決了在生產訓練中發現的一些穩定性以及性能的問題,讓大家在各種場景中更好的去使用Alluxio。

我們每兩周會有一次社區技術交流大會,討論如何把這個項目做得更好。

今天的分享就到這裡,謝謝大家。

分享嘉賓:邱璐 Alluxio 核心研發工程師

編輯整理:Liyao DataFun

出品平臺:DataFunTalk

01/分享嘉賓

邱璐|Alluxio 核心研發工程師

畢業於美國喬治華盛頓大學數據科學專業,是alluxio開源社區的 PMC maintainer,負責 Alluxio AI/ML 場景的研發工程。之前也負責研發 alluxio 的高可用系統,日誌系統,和監控系統。

02/報名看直播 免費領PPT

03/關於我們

DataFun:專注於大數據、人工智慧技術應用的分享與交流。發起於2017年,在北京、上海、深圳、杭州等城市舉辦超過100 線下和100 線上沙龍、論壇及峰會,已邀請超過2000位專家和學者參與分享。其公眾號 DataFunTalk 累計生產原創文章700 ,百萬 閱讀,14萬 精準粉絲。

,
同类文章
葬禮的夢想

葬禮的夢想

夢見葬禮,我得到了這個夢想,五個要素的五個要素,水火只好,主要名字在外面,職業生涯良好,一切都應該對待他人治療誠意,由於小,吉利的冬天夢想,秋天的夢是不吉利的
找到手機是什麼意思?

找到手機是什麼意思?

找到手機是什麼意思?五次選舉的五個要素是兩名士兵的跡象。與他溝通很好。這是非常財富,它擅長運作,職業是仙人的標誌。單身男人有這個夢想,主要生活可以有人幫忙
我不怎麼想?

我不怎麼想?

我做了什麼意味著看到米飯烹飪?我得到了這個夢想,五線的主要土壤,但是Tu Ke水是錢的跡象,職業生涯更加真誠。他真誠地誠實。這是豐富的,這是夏瑞的巨星
夢想你的意思是什麼?

夢想你的意思是什麼?

你是什​​麼意思夢想的夢想?夢想,主要木材的五個要素,水的跡象,主營業務,主營業務,案子應該抓住魅力,不能疏忽,春天夢想的吉利夢想夏天的夢想不幸。詢問學者夢想
拯救夢想

拯救夢想

拯救夢想什麼意思?你夢想著拯救人嗎?拯救人們的夢想有一個現實,也有夢想的主觀想像力,請參閱週宮官方網站拯救人民夢想的詳細解釋。夢想著敵人被拯救出來
2022愛方向和生日是在[質量個性]中

2022愛方向和生日是在[質量個性]中

[救生員]有人說,在出生88天之前,胎兒已經知道哪天的出生,如何有優質的個性,將走在什麼樣的愛情之旅,將與生活生活有什么生活。今天
夢想切割剪裁

夢想切割剪裁

夢想切割剪裁什麼意思?你夢想切你的手是好的嗎?夢想切割手工切割手有一個真正的影響和反應,也有夢想的主觀想像力。請參閱官方網站夢想的細節,以削減手
夢想著親人死了

夢想著親人死了

夢想著親人死了什麼意思?你夢想夢想你的親人死嗎?夢想有一個現實的影響和反應,還有夢想的主觀想像力,請參閱夢想世界夢想死亡的親屬的詳細解釋
夢想搶劫

夢想搶劫

夢想搶劫什麼意思?你夢想搶劫嗎?夢想著搶劫有一個現實的影響和反應,也有夢想的主觀想像力,請參閱週恭吉夢官方網站的詳細解釋。夢想搶劫
夢想缺乏缺乏紊亂

夢想缺乏缺乏紊亂

夢想缺乏缺乏紊亂什麼意思?你夢想缺乏異常藥物嗎?夢想缺乏現實世界的影響和現實,還有夢想的主觀想像,請看官方網站的夢想組織缺乏異常藥物。我覺得有些東西缺失了