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