0
本文作者: 叢末 | 2019-01-18 15:21 |
雷鋒網(wǎng) AI 科技評(píng)論按:日前,阿里巴巴正式開源分布式科學(xué)計(jì)算引擎 Mars。Mars 是由阿里巴巴統(tǒng)一大數(shù)據(jù)計(jì)算平臺(tái) MaxCompute 研發(fā)團(tuán)隊(duì)歷經(jīng)一年多研發(fā)的基于張量的統(tǒng)一分布式計(jì)算框架,用其進(jìn)行科學(xué)計(jì)算時(shí),不僅使得完成大規(guī)??茖W(xué)計(jì)算任務(wù)從 MapReduce 實(shí)現(xiàn)上千行代碼降低到 Mars 數(shù)行代碼,還能大幅度地提升科學(xué)計(jì)算性能。
對(duì)于科學(xué)計(jì)算領(lǐng)域來說,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è)務(wù)和生產(chǎn)場(chǎng)景中都的得到了應(yīng)用。
作為新一代超大規(guī)??茖W(xué)計(jì)算引擎,Mars 主要具備三項(xiàng)核心能力:
符合使用習(xí)慣的接口:Mars 通過 tensor 模塊提供兼容 Numpy 的接口,用戶可以只需將已有的基于 Numpy 編寫的代碼進(jìn)行 import 替換,就可將代碼邏輯移植到 Mars,并直接獲得比原來大數(shù)萬倍規(guī)模,同時(shí)處理能力提高數(shù)十倍的能力。目前,Mars 實(shí)現(xiàn)了大約 70% 的常見 Numpy 接口。
可充分利用 GPU 加速:Mars 還擴(kuò)展了 Numpy,充分利用了 GPU 在科學(xué)計(jì)算領(lǐng)域的已有成果——?jiǎng)?chuàng)建張量時(shí),通過指定 gpu=True 就可以讓后續(xù)計(jì)算在 GPU 上執(zhí)行。
支持二維稀疏矩陣:創(chuàng)建稀疏矩陣的時(shí)候,通過指定 sparse=True 即可。以 eye 接口為例,它創(chuàng)建了一個(gè)單位對(duì)角矩陣,這個(gè)矩陣只有對(duì)角線上有值,其他位置上都是 0,所以,用戶可以用稀疏的方式存儲(chǔ)。
在系統(tǒng)設(shè)計(jì)方面,Mars 則具備以下四大特點(diǎn):
第一,對(duì)科學(xué)計(jì)算任務(wù)采用分而治之的方式。
給定一個(gè)張量,Mars 會(huì)自動(dòng)將其在各個(gè)維度上切分成小的 Chunk 來分別處理。對(duì)于 Mars 實(shí)現(xiàn)的所有的算子,都支持自動(dòng)切分任務(wù)并行,這一自動(dòng)切分過程在 Mars 這里被稱做 tile。
第二,采用延遲執(zhí)行機(jī)制和 Fusion 優(yōu)化。
目前,基于 Mars 的延遲執(zhí)行機(jī)制,Mars 編寫的代碼需要顯式調(diào)用 execute 觸發(fā),不過用戶在寫中間代碼時(shí),并不會(huì)需要任何的實(shí)際數(shù)據(jù)計(jì)算。這樣的好處是可以對(duì)中間過程做更多優(yōu)化,讓整個(gè)任務(wù)的執(zhí)行更優(yōu)。在優(yōu)化方面,Mars 目前主要使用了 fusion 優(yōu)化,即把多個(gè)操作合并成一個(gè)執(zhí)行。
第三,支持多線程模式、單機(jī)集群模式以及分布式等多種調(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í)行。
第四,支持代碼向內(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ù)。
目前,Mars 實(shí)現(xiàn)了 tensor 的部分—— numpy 分布式化,實(shí)現(xiàn)了 70% 常見的 numpy 接口。而后續(xù)的 Mars 0.2 的版本,也正在嘗試將 pandas 分布式化,即將提供完全兼容 pandas 的接口,以構(gòu)建整個(gè)生態(tài)。
Github 開源地址:
https://github.com/mars-project/mars
資料來源:阿里技術(shù),https://mp.weixin.qq.com/s/CmAzifMBgkaytd17xknjig 雷鋒網(wǎng)雷鋒網(wǎng)
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。