重磅開源狠裹!阿里首款自研科學(xué)計(jì)算引擎 Mars 來了

阿里妹導(dǎo)讀:日前,阿里巴巴正式對(duì)外發(fā)布了分布式科學(xué)計(jì)算引擎 Mars 的開源代碼地址炫加,開發(fā)者們可以在Github上獲取源代碼并參與開發(fā)。

Mars 突破了現(xiàn)有大數(shù)據(jù)計(jì)算引擎的關(guān)系代數(shù)為主的計(jì)算模型铺然,將分布式技術(shù)引入科學(xué)計(jì)算/數(shù)值計(jì)算領(lǐng)域俗孝,極大地?cái)U(kuò)展了科學(xué)計(jì)算的計(jì)算規(guī)模和效率。目前已應(yīng)用于阿里巴巴及其云上客戶的業(yè)務(wù)和生產(chǎn)場景魄健。

下面赋铝,我們將詳細(xì)介紹Mars的設(shè)計(jì)初衷和技術(shù)架構(gòu),希望和大家共同交流探討沽瘦。

Github地址:

https://github.com/mars-project/mars

概述

科學(xué)計(jì)算即數(shù)值計(jì)算革骨,是指應(yīng)用計(jì)算機(jī)處理科學(xué)研究和工程技術(shù)中所遇到的數(shù)學(xué)計(jì)算問題。比如圖像處理析恋、機(jī)器學(xué)習(xí)良哲、深度學(xué)習(xí)等很多領(lǐng)域都會(huì)用到科學(xué)計(jì)算。有很多語言和庫都提供了科學(xué)計(jì)算工具助隧。這其中筑凫,Numpy以其簡潔易用的語法和強(qiáng)大的性能成為佼佼者,并以此為基礎(chǔ)形成了龐大的技術(shù)棧(下圖所示)喇颁。


Numpy的核心概念多維數(shù)組是各種上層工具的基礎(chǔ)漏健。多維數(shù)組也被稱為張量,相較于二維表/矩陣橘霎,張量具有更強(qiáng)大的表達(dá)能力。因此殖属,現(xiàn)在流行的深度學(xué)習(xí)框架也都廣泛的基于張量的數(shù)據(jù)結(jié)構(gòu)姐叁。

機(jī)器學(xué)習(xí)/深度學(xué)習(xí)的熱潮席卷而來,張量的概念已逐漸為人所熟知洗显,對(duì)張量進(jìn)行通用計(jì)算的規(guī)模需求也與日俱增外潜。但現(xiàn)實(shí)是如Numpy這樣優(yōu)秀的科學(xué)計(jì)算庫仍舊停留在單機(jī)時(shí)代,無法突破規(guī)模瓶頸挠唆。當(dāng)下流行的分布式計(jì)算引擎也并非為科學(xué)計(jì)算而生处窥,上層接口不匹配導(dǎo)致科學(xué)計(jì)算任務(wù)很難用傳統(tǒng)的SQL/MapReduce編寫,執(zhí)行引擎本身沒有針對(duì)科學(xué)計(jì)算優(yōu)化更使得計(jì)算效率難以令人滿意玄组。


基于以上科學(xué)計(jì)算現(xiàn)狀滔驾,由阿里巴巴統(tǒng)一大數(shù)據(jù)計(jì)算平臺(tái)MaxCompute研發(fā)團(tuán)隊(duì)谒麦,歷經(jīng)一年多研發(fā),打破大數(shù)據(jù)哆致、科學(xué)計(jì)算領(lǐng)域邊界绕德,完成第一個(gè)版本并開源。?

Mars摊阀,一個(gè)基于張量的統(tǒng)一分布式計(jì)算框架耻蛇。使用 Mars 進(jìn)行科學(xué)計(jì)算,不僅使得完成大規(guī)陌耍科學(xué)計(jì)算任務(wù)從MapReduce實(shí)現(xiàn)上千行代碼降低到Mars數(shù)行代碼臣咖,更在性能上有大幅提升。目前漱牵,Mars 實(shí)現(xiàn)了 tensor 的部分亡哄,即numpy 分布式化, 實(shí)現(xiàn)了 70% 常見的 numpy 接口布疙。后續(xù)蚊惯,在 Mars 0.2 的版本中, 正在將 pandas 分布式化灵临,即將提供完全兼容 pandas 的接口截型,以構(gòu)建整個(gè)生態(tài)。

Mars作為新一代超大規(guī)娜甯龋科學(xué)計(jì)算引擎宦焦,不僅普惠科學(xué)計(jì)算進(jìn)入分布式時(shí)代,更讓大數(shù)據(jù)進(jìn)行高效的科學(xué)計(jì)算成為可能顿涣。


Mars的核心能力

符合使用習(xí)慣的接口

Mars 通過 tensor 模塊提供兼容 Numpy 的接口波闹,用戶可以將已有的基于 Numpy 編寫的代碼,只需替換 import涛碑,就可將代碼邏輯移植到 Mars精堕,并直接獲得比原來大數(shù)萬倍規(guī)模,同時(shí)處理能力提高數(shù)十倍的能力蒲障。目前歹篓,Mars 實(shí)現(xiàn)了大約 70% 的常見Numpy 接口。

充分利用GPU加速

除此之外揉阎,Mars 還擴(kuò)展了 Numpy庄撮,充分利用了GPU在科學(xué)計(jì)算領(lǐng)域的已有成果。創(chuàng)建張量時(shí)毙籽,通過指定 gpu=True 就可以讓后續(xù)計(jì)算在GPU上執(zhí)行洞斯。比如:

稀疏矩陣

Mars 還支持二維稀疏矩陣,創(chuàng)建稀疏矩陣的時(shí)候坑赡,通過指定 sparse=True 即可烙如。以eye 接口為例么抗,它創(chuàng)建了一個(gè)單位對(duì)角矩陣,這個(gè)矩陣只有對(duì)角線上有值厅翔,其他位置上都是 0乖坠,所以,我們可以用稀疏的方式存儲(chǔ)刀闷。

系統(tǒng)設(shè)計(jì)

接下來介紹 Mars 的系統(tǒng)設(shè)計(jì)熊泵,讓大家了解 Mars 是如何讓科學(xué)計(jì)算任務(wù)自動(dòng)并行化并擁有強(qiáng)大的性能。

分而治之:tile

Mars 通常對(duì)科學(xué)計(jì)算任務(wù)采用分而治之的方式甸昏。給定一個(gè)張量顽分,Mars會(huì)自動(dòng)將其在各個(gè)維度上切分成小的 Chunk 來分別處理。對(duì)于Mars 實(shí)現(xiàn)的所有的算子施蜜,都支持自動(dòng)切分任務(wù)并行卒蘸。這個(gè)自動(dòng)切分的過程在Mars里被稱為 tile。

比如翻默,給定一個(gè) 1000 * 2000的張量缸沃,如果每個(gè)維度上的 chunk 大小為 500,那么這個(gè)張量就會(huì)被 tile 成 2 * 4 一共 8 個(gè) chunk修械。對(duì)于后續(xù)的算子趾牧,比如加法(Add)和求和(SUM),也都會(huì)自動(dòng)執(zhí)行 tile 操作肯污。一個(gè)張量的運(yùn)算的 tile 過程如下圖所示翘单。

延遲執(zhí)行和 Fusion 優(yōu)化

目前 Mars 編寫的代碼需要顯式調(diào)用?execute?觸發(fā),這是基于 Mars 的延遲執(zhí)行機(jī)制蹦渣。用戶在寫中間代碼時(shí)哄芜,并不會(huì)需要任何的實(shí)際數(shù)據(jù)計(jì)算。這樣的好處是可以對(duì)中間過程做更多優(yōu)化柬唯,讓整個(gè)任務(wù)的執(zhí)行更優(yōu)认臊。目前 Mars 里主要用到了 fusion 優(yōu)化,即把多個(gè)操作合并成一個(gè)執(zhí)行权逗。

對(duì)于前面一個(gè)圖的例子美尸,在tile 完成之后,Mars 會(huì)對(duì)細(xì)粒度的 Chunk 級(jí)別圖進(jìn)行 fusion 優(yōu)化斟薇,比如8個(gè)RAND+ADD+SUM,每個(gè)可以被分別合并成一個(gè)節(jié)點(diǎn)恕酸,一方面可以通過調(diào)用如 numexpr 庫來生成加速代碼堪滨,另一方面,減少實(shí)際運(yùn)行節(jié)點(diǎn)的數(shù)量也可以有效減少調(diào)度執(zhí)行圖的開銷蕊温。

多種調(diào)度方式

Mars 支持多種調(diào)度方式:

多線程模式:Mars 可以使用多線程來在本地調(diào)度執(zhí)行 Chunk 級(jí)別的圖袱箱。對(duì)于 Numpy 來說遏乔,大部分算子都是使用單線程執(zhí)行,僅使用這種調(diào)度方式发笔,也可以使得 Mars 在單機(jī)即可獲得 tile 化的執(zhí)行圖的能力盟萨,突破 Numpy 的單機(jī)內(nèi)存限制,同時(shí)充分利用單機(jī)所有 CPU/GPU 資源了讨,獲得比 Numpy 快數(shù)倍的性能捻激。

單機(jī)集群模式: Mars 可以在單機(jī)啟動(dòng)整個(gè)分布式運(yùn)行時(shí),利用多進(jìn)程來加速任務(wù)的執(zhí)行前计;這種模式適合模擬面向分布式環(huán)境的開發(fā)調(diào)試胞谭。

分布式 : Mars 可以啟動(dòng)一個(gè)或者多個(gè) scheduler,以及多個(gè) worker男杈,scheduler 會(huì)調(diào)度 Chunk 級(jí)別的算子到各個(gè) worker 去執(zhí)行丈屹。

下圖是 Mars 分布式的執(zhí)行架構(gòu):

Mars 分布式執(zhí)行時(shí)會(huì)啟動(dòng)多個(gè) scheduler 和多個(gè) worker,圖中是3個(gè) scheduler 和5個(gè)worker伶棒,這些 scheduler 組成一致性哈希環(huán)旺垒。用戶在客戶端顯式或隱式創(chuàng)建一個(gè) session,會(huì)根據(jù)一致性哈希在其中一個(gè) scheduler 上分配 SessionActor肤无,然后用戶通過 execute 提交了一個(gè)張量的計(jì)算先蒋,會(huì)創(chuàng)建 GraphActor 來管理這個(gè)張量的執(zhí)行,這個(gè)張量會(huì)在 GraphActor 中被 tile 成 chunk 級(jí)別的圖舅锄。這里假設(shè)有3個(gè) chunk鞭达,那么會(huì)在scheduler 上創(chuàng)建3個(gè) OperandActor 分別對(duì)應(yīng)。這些 OperandActor 會(huì)根據(jù)自己的依賴是否完成皇忿、以及集群資源是否足夠來提交到各個(gè)worker 上執(zhí)行畴蹭。在所有 OperandActor 都完成后會(huì)通知 GraphActor 任務(wù)完成,然后客戶端就可以拉取數(shù)據(jù)來展示或者繪圖鳍烁。

向內(nèi)和向外伸縮

Mars 靈活的 tile 化執(zhí)行圖配合多種調(diào)度模式叨襟,可以使得相同的 Mars 編寫的代碼隨意向內(nèi)(scale in)和向外(scale out)伸縮。向內(nèi)伸縮到單機(jī)幔荒,可以利用多核來并行執(zhí)行科學(xué)計(jì)算任務(wù)糊闽;向外伸縮到分布式集群,可以支持到上千臺(tái) worker 規(guī)模來完成單機(jī)無論如何都難以完成的任務(wù)爹梁。


Benchmark

在一個(gè)真實(shí)的場景中右犹,我們遇到了巨型矩陣乘法的計(jì)算需求,需要完成兩個(gè)均為千億元素姚垃,大小約為2.25T的矩陣相乘念链。Mars通過5行代碼,使用1600 CU(200個(gè) worker,每 worker 為 8核 32G內(nèi)存)掂墓,在2個(gè)半小時(shí)內(nèi)完成計(jì)算谦纱。在此之前,同類計(jì)算只能使用 MapReduce 編寫千余行代碼模擬進(jìn)行君编,完成同樣的任務(wù)需要?jiǎng)佑?9000 CU 并耗時(shí)10個(gè)小時(shí)跨嘉。


讓我們?cè)倏磧蓚€(gè)對(duì)比。下圖是對(duì)36億數(shù)據(jù)矩陣的每個(gè)元素加一再乘以二吃嘿,紅色的叉表示 Numpy 的計(jì)算時(shí)間祠乃,綠色的實(shí)線是 Mars 的計(jì)算時(shí)間,藍(lán)色虛線是理論計(jì)算時(shí)間唠椭√桑可以看到單機(jī) Mars 就比 Numpy 快數(shù)倍,隨著 Worker 的增加贪嫂,可以獲得幾乎線性的加速比寺庄。

下圖是進(jìn)一步擴(kuò)大計(jì)算規(guī)模,把數(shù)據(jù)擴(kuò)大到144億元素力崇,對(duì)這些元素加一乘以二以后再求和斗塘。這時(shí)候輸入數(shù)據(jù)就有 115G,單機(jī)的 Numpy 已經(jīng)無法完成運(yùn)算亮靴,Mars 依然可以完成運(yùn)算馍盟,且隨著機(jī)器的增多可以獲得還不錯(cuò)的加速比。

Mars 已經(jīng)在 Github 開源茧吊,點(diǎn)擊文末“閱讀原文”即可獲取贞岭。后續(xù)Mars?團(tuán)隊(duì)會(huì)全部在 Github 上使用標(biāo)準(zhǔn)開源軟件的方式來進(jìn)行開發(fā),歡迎大家使用 Mars搓侄,成為 Mars 的 contributor瞄桨。


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市讶踪,隨后出現(xiàn)的幾起案子芯侥,更是在濱河造成了極大的恐慌,老刑警劉巖乳讥,帶你破解...
    沈念sama閱讀 221,635評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件柱查,死亡現(xiàn)場離奇詭異,居然都是意外死亡云石,警方通過查閱死者的電腦和手機(jī)唉工,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來汹忠,“玉大人酵紫,你說我怎么就攤上這事告嘲〈砦” “怎么了奖地?”我有些...
    開封第一講書人閱讀 168,083評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長赋焕。 經(jīng)常有香客問我参歹,道長,這世上最難降的妖魔是什么隆判? 我笑而不...
    開封第一講書人閱讀 59,640評(píng)論 1 296
  • 正文 為了忘掉前任犬庇,我火速辦了婚禮,結(jié)果婚禮上侨嘀,老公的妹妹穿的比我還像新娘臭挽。我一直安慰自己,他們只是感情好咬腕,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,640評(píng)論 6 397
  • 文/花漫 我一把揭開白布欢峰。 她就那樣靜靜地躺著,像睡著了一般涨共。 火紅的嫁衣襯著肌膚如雪纽帖。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,262評(píng)論 1 308
  • 那天举反,我揣著相機(jī)與錄音懊直,去河邊找鬼。 笑死火鼻,一個(gè)胖子當(dāng)著我的面吹牛室囊,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播魁索,決...
    沈念sama閱讀 40,833評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼融撞,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了蛾默?” 一聲冷哼從身側(cè)響起懦铺,我...
    開封第一講書人閱讀 39,736評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎支鸡,沒想到半個(gè)月后冬念,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,280評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡牧挣,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,369評(píng)論 3 340
  • 正文 我和宋清朗相戀三年急前,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片瀑构。...
    茶點(diǎn)故事閱讀 40,503評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡裆针,死狀恐怖刨摩,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情世吨,我是刑警寧澤澡刹,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站耘婚,受9級(jí)特大地震影響罢浇,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜沐祷,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,870評(píng)論 3 333
  • 文/蒙蒙 一嚷闭、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧赖临,春花似錦胞锰、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至色乾,卻和暖如春誊册,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背暖璧。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評(píng)論 1 272
  • 我被黑心中介騙來泰國打工案怯, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人澎办。 一個(gè)月前我還...
    沈念sama閱讀 48,909評(píng)論 3 376
  • 正文 我出身青樓嘲碱,卻偏偏與公主長得像,于是被迫代替她去往敵國和親局蚀。 傳聞我的和親對(duì)象是個(gè)殘疾皇子麦锯,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,512評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容