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