在整個SciPy體系中,Numpy是各種工具的基礎,它不僅提供了多維數(shù)組的數(shù)據結構,還支持SciPy體系中的各種計算。多維數(shù)組又叫張量,這個概念在近幾年被廣泛傳播,它是深度學習的基礎。張量擁有很多優(yōu)勢特性,相比于二維表/矩陣,張量能夠創(chuàng)造更高緯度的矩陣和向量,因此其具有更加強大的表達能力。
在AI創(chuàng)新的驅動下,掀起了一股機器學習和深度學習的熱潮,張量的使用也逐漸增加。Numpy由于簡潔易用且性能強大,在企業(yè)中被廣泛應用。不過,Numpy還只適用于單機條件,對于大部分函數(shù)都無法進行并行化操作,也不能利用CPU的多核心處理能力來提高計算效率,從而使得Numpy不能突破現(xiàn)有的規(guī)模瓶頸。
在這樣的背景下,分布式計算引擎的出現(xiàn)為處理海量數(shù)據的工作提供了另一種思路。分布式計算是一個十分高效且具備高性價比的方案,在應對大數(shù)據集的計算任務中,不僅可以均衡任務調度,還能大幅提高計算效率。
但值得注意的是,分布式計算引擎在科學計算領域并不能發(fā)揮太大作用,其原因就是前者的誕生與后者沒有必然關系,而分布式計算引擎的上層接口不匹配,導致科學計算任務很難用傳統(tǒng)的SQL/MapReduce編寫。且在執(zhí)行過程中,計算引擎本身沒有對科學計算進行針對性優(yōu)化,使得后者的計算效率同樣難以滿足行業(yè)發(fā)展需求。
基于此,阿里巴巴推出開源分布式科學計算引擎Mars,將分布式技術引入科學計算領域,突破大數(shù)據計算引擎以關系代數(shù)為主的計算模型,將大規(guī)模的科學計算任務從MapReduce的上千行代碼降低到Mars的數(shù)行代碼,使得科學計算的效率大幅提升。
Mars增強科學計算核心
Mars在科學計算領域的應用是突破性的。作為新一代大規(guī)??茖W計算引擎,Mars讓大數(shù)據可以進行高效的科學計算,并將其帶入到分布式時代。目前,Mars已經在阿里巴巴及其云上客戶的業(yè)務和生產場景中廣泛應用,幫助用戶探索數(shù)據背后的價值。
具體來看,Mars具備以下幾個獨特的優(yōu)勢和特點,使得其在科學計算領域擁有廣闊前景:
第一,符合使用習慣的接口,容易上手。Mars通過內部的tensor模塊提供兼容Numpy的接口,用戶只需要通過import Mars就能將已有的基于Numpy編寫的代碼移植到Mars中,直接獲得比原來擴大數(shù)萬倍的運算規(guī)模。
在實際移植過程中可以發(fā)現(xiàn),代碼只需要有少量改變,一是將import numpy改成import mars.tensor;二是通過execute來觸發(fā)執(zhí)行。目前,Mars 實現(xiàn)了大約 70% 的常見 Numpy 接口。據悉,在Mars后續(xù)的升級迭代中,將逐漸把SciPy技術棧中的工具分布式化,比如提供完全兼容的pandas接口,從而完善整個Mars應用生態(tài)。
第二,支持GPU加速,這也是Mars在科學計算領域十分突出的一個優(yōu)勢。用戶可以十分簡便地設置GPU加速:創(chuàng)建張量時,通過指定gpu=True就可以讓后續(xù)計算在GPU上執(zhí)行,進一步提升計算效率。
第三,支持二維稀疏矩陣。通過設定sparse=True,用戶可在Mars創(chuàng)建稀疏矩陣,這樣的好處是可以節(jié)省存儲空間,有利于計算效率的提升。
第四,可擴展性。Mars可以向內擴展到單機,也可以向外擴展到有數(shù)千臺計算機的服務器集群。由于本地和分布式版本都共享相同的代碼,因此隨著數(shù)據的增加從單機遷移到集群也是十分便利的。
粗粒度圖
也是基于這些特性和獨特的優(yōu)勢,Mars支持多種調度方式,如多線程模式、分布式、單機集群模式,這保證了Mars的擴展性,也讓其可以支持更多科學計算的場景。與Numpy相比,Mars可以看成是包含粗粒度圖與細粒度圖的計算圖,給定一個張量,Mars會將其在各個維度劃分為小的chunk,然后對這些chunk進行處理,將其調度到多核或者分布式集群中來執(zhí)行。
這主要是因為Mars不會在客戶端進行真正的運算操作,當用戶寫下代碼時,這些數(shù)據會在內存中用圖的形式來記錄下來,并在用戶使用execute觸發(fā)執(zhí)行后,將圖提交到Mars的分布式執(zhí)行環(huán)境中。本質來看,Mars是一個對細粒度、異構圖的執(zhí)行調度系統(tǒng)。
Mars chunk級別的執(zhí)行圖
值得注意的是,盡管在Mars矩陣運算中輸入和輸出的數(shù)據量并不大,但在chunk之后的運行過程會產生大量的中間過程,在上圖中,紅色框內部的就是產生的中間過程。毫無疑問,這些過程的產生會占用大量內存資源。為此,阿里巴巴在Mars中加入了數(shù)據溢出控制手段,將暫時不用或用不到的數(shù)據放到磁盤中存儲,防止內存溢出,保證計算安全。
英特爾傲騰助力Mars突破計算瓶頸
數(shù)據溢出控制手段會有效減少Mars運行時內存資源不必要的消耗,但與此同時,在TCO相當?shù)臈l件下,內存系統(tǒng)的構建會成為制約Mars計算效率的又一瓶頸。
傳統(tǒng)硬盤價位低,且可以提供大量存儲空間,但在可靠性、物理空間要求、散熱等因素上會帶來新的應用成本。且在I/O速度方面,從硬盤訪問數(shù)據會伴隨著嚴重的延遲,在這一點上,DRAM擁有明顯優(yōu)勢,可以減少千倍的延遲時間,但在容量方面又會有新的困擾。
在此背景下,阿里巴巴與英特爾合作,在運行Mars的服務器上配置英特爾傲騰持久內存,通過其容量大、低延遲的特點為Mars提供足夠的共享內存,保證Mars科學計算效率的高水平實現(xiàn)。
英特爾傲騰持久內存擁有兩種操作模式,內存模式和應用直接模式(AD),前者適用于大內存容量,后者具備非易失性,應用可直接在內存中進行運算,大幅降低堆棧中的復雜程度。不僅如此,英特爾傲騰持久內存可以提供128G、256G、512G容量,與傳統(tǒng)DRAM相比每GB的內存成本也更低,可以滿足Mars大規(guī)模應用的需求。
Mars需要滿足不斷多樣化的科學計算環(huán)境,為此,英特爾對傲騰持久內存進行了兩個調優(yōu),一個是內存啟用Snoop for AD模式,一個是Plasma在持久內存中實現(xiàn)共享。前者可以保證傲騰持久內存保持較高的I/O水平,后者讓內存資源應用更為合理,從而有效提升Mars的計算性能。
在實驗環(huán)境下,使用兩個矩陣相乘的科學計算為Mars的工作負載,分別采用裝配有英特爾傲騰持久內存的服務器和搭載DRAM內存的服務器來執(zhí)行,在對Mars進行不同數(shù)據集的工作負載測試后可以發(fā)現(xiàn),當數(shù)據集規(guī)模較小時,數(shù)據是可以被DRAM緩存的,持久內存的性能接近于DRAM;當數(shù)據集規(guī)模不斷上升后,持久內存的優(yōu)勢開始顯現(xiàn),當數(shù)據集規(guī)模增大到SF=0.5時,使用傲騰持久內存的性能就有相對于DRAM 1.11倍的提升。
可以說,利用英特爾傲騰持久內存,Mars的計算性能會得到有效提升,尤其是面向大規(guī)模數(shù)據集時,英特爾傲騰持久內存不僅能解決數(shù)據緩存溢出問題,還能大幅降低數(shù)據延遲,從而讓科學計算更為高效。