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