重磅開源!阿里首款自研科學計算引擎 Mars 來了
阿里妹導讀:日前,阿里巴巴正式對外發布了分散式科學計算引擎 Mars 的開原始碼地址,開發者們可以在Github上獲取原始碼並參與開發。
Mars 突破了現有大資料計算引擎的關係代數為主的計算模型,將分散式技術引入科學計算/數值計算領域,極大地擴充套件了科學計算的計算規模和效率。目前已應用於阿里巴巴及其雲上客戶的業務和生產場景。
下面,我們將詳細介紹Mars的設計初衷和技術架構,希望和大家共同交流探討。
Github地址:
https://github.com/mars-project/mars
概述
科學計算即數值計算,是指應用計算機處理科學研究和工程技術中所遇到的數學計算問題。比如影像處理、機器學習、深度學習等很多領域都會用到科學計算。有很多語言和庫都提供了科學計算工具。這其中,Numpy以其簡潔易用的語法和強大的效能成為佼佼者,並以此為基礎形成了龐大的技術棧(下圖所示)。
Numpy的核心概念多維陣列是各種上層工具的基礎。多維陣列也被稱為張量,相較於二維表/矩陣,張量具有更強大的表達能力。因此,現在流行的深度學習框架也都廣泛的基於張量的資料結構。
機器學習/深度學習的熱潮席捲而來,張量的概念已逐漸為人所熟知,對張量進行通用計算的規模需求也與日俱增。但現實是如Numpy這樣優秀的科學計算庫仍舊停留在單機時代,無法突破規模瓶頸。當下流行的分散式計算引擎也並非為科學計算而生,上層介面不匹配導致科學計算任務很難用傳統的SQL/MapReduce編寫,執行引擎本身沒有針對科學計算優化更使得計算效率難以令人滿意。
基於以上科學計算現狀,由阿里巴巴統一大資料計算平臺MaxCompute研發團隊,歷經一年多研發,打破大資料、科學計算領域邊界,完成第一個版本並開源。
Mars,一個基於張量的統一分散式計算框架。使用 Mars 進行科學計算,不僅使得完成大規模科學計算任務從MapReduce實現上千行程式碼降低到Mars數行程式碼,更在效能上有大幅提升。目前,Mars 實現了 tensor 的部分,即numpy 分散式化, 實現了 70% 常見的 numpy 介面。後續,在 Mars 0.2 的版本中, 正在將 pandas 分散式化,即將提供完全相容 pandas 的介面,以構建整個生態。
Mars作為新一代超大規模科學計算引擎,不僅普惠科學計算進入分散式時代,更讓大資料進行高效的科學計算成為可能。
Mars的核心能力
符合使用習慣的介面
Mars 通過 tensor 模組提供相容 Numpy 的介面,使用者可以將已有的基於 Numpy 編寫的程式碼,只需替換 import,就可將程式碼邏輯移植到 Mars,並直接獲得比原來大數萬倍規模,同時處理能力提高數十倍的能力。目前,Mars 實現了大約 70% 的常見Numpy 介面。
充分利用GPU加速
除此之外,Mars 還擴充套件了 Numpy,充分利用了GPU在科學計算領域的已有成果。建立張量時,通過指定 gpu=True 就可以讓後續計算在GPU上執行。比如:
稀疏矩陣
Mars 還支援二維稀疏矩陣,建立稀疏矩陣的時候,通過指定 sparse=True 即可。以eye 介面為例,它建立了一個單位對角矩陣,這個矩陣只有對角線上有值,其他位置上都是 0,所以,我們可以用稀疏的方式儲存。
系統設計
接下來介紹 Mars 的系統設計,讓大家瞭解 Mars 是如何讓科學計算任務自動並行化並擁有強大的效能。
分而治之:tile
Mars 通常對科學計算任務採用分而治之的方式。給定一個張量,Mars會自動將其在各個維度上切分成小的 Chunk 來分別處理。對於Mars 實現的所有的運算元,都支援自動切分任務並行。這個自動切分的過程在Mars裡被稱為 tile。
比如,給定一個 1000 * 2000的張量,如果每個維度上的 chunk 大小為 500,那麼這個張量就會被 tile 成 2 * 4 一共 8 個 chunk。對於後續的運算元,比如加法(Add)和求和(SUM),也都會自動執行 tile 操作。一個張量的運算的 tile 過程如下圖所示。
延遲執行和 Fusion 優化
目前 Mars 編寫的程式碼需要顯式呼叫 execute 觸發,這是基於 Mars 的延遲執行機制。使用者在寫中間程式碼時,並不會需要任何的實際資料計算。這樣的好處是可以對中間過程做更多優化,讓整個任務的執行更優。目前 Mars 裡主要用到了 fusion 優化,即把多個操作合併成一個執行。
對於前面一個圖的例子,在tile 完成之後,Mars 會對細粒度的 Chunk 級別圖進行 fusion 優化,比如8個RAND+ADD+SUM,每個可以被分別合併成一個節點,一方面可以通過呼叫如 numexpr 庫來生成加速程式碼,另一方面,減少實際執行節點的數量也可以有效減少排程執行圖的開銷。
多種排程方式
Mars 支援多種排程方式:
多執行緒模式:Mars 可以使用多執行緒來在本地排程執行 Chunk 級別的圖。對於 Numpy 來說,大部分運算元都是使用單執行緒執行,僅使用這種排程方式,也可以使得 Mars 在單機即可獲得 tile 化的執行圖的能力,突破 Numpy 的單機記憶體限制,同時充分利用單機所有 CPU/GPU 資源,獲得比 Numpy 快數倍的效能。
單機叢集模式: Mars 可以在單機啟動整個分散式執行時,利用多程式來加速任務的執行;這種模式適合模擬面向分散式環境的開發除錯。
分散式 : Mars 可以啟動一個或者多個 scheduler,以及多個 worker,scheduler 會排程 Chunk 級別的運算元到各個 worker 去執行。
下圖是 Mars 分散式的執行架構:
Mars 分散式執行時會啟動多個 scheduler 和多個 worker,圖中是3個 scheduler 和5個worker,這些 scheduler 組成一致性雜湊環。使用者在客戶端顯式或隱式建立一個 session,會根據一致性雜湊在其中一個 scheduler 上分配 SessionActor,然後使用者通過 execute 提交了一個張量的計算,會建立 GraphActor 來管理這個張量的執行,這個張量會在 GraphActor 中被 tile 成 chunk 級別的圖。這裡假設有3個 chunk,那麼會在scheduler 上建立3個 OperandActor 分別對應。這些 OperandActor 會根據自己的依賴是否完成、以及叢集資源是否足夠來提交到各個worker 上執行。在所有 OperandActor 都完成後會通知 GraphActor 任務完成,然後客戶端就可以拉取資料來展示或者繪圖。
向內和向外伸縮
Mars 靈活的 tile 化執行圖配合多種排程模式,可以使得相同的 Mars 編寫的程式碼隨意向內(scale in)和向外(scale out)伸縮。向內伸縮到單機,可以利用多核來並行執行科學計算任務;向外伸縮到分散式叢集,可以支援到上千臺 worker 規模來完成單機無論如何都難以完成的任務。
Benchmark
在一個真實的場景中,我們遇到了巨型矩陣乘法的計算需求,需要完成兩個均為千億元素,大小約為2.25T的矩陣相乘。Mars通過5行程式碼,使用1600 CU(200個 worker,每 worker 為 8核 32G記憶體),在2個半小時內完成計算。在此之前,同類計算只能使用 MapReduce 編寫千餘行程式碼模擬進行,完成同樣的任務需要動用 9000 CU 並耗時10個小時。
讓我們再看兩個對比。下圖是對36億資料矩陣的每個元素加一再乘以二,紅色的叉表示 Numpy 的計算時間,綠色的實線是 Mars 的計算時間,藍色虛線是理論計算時間。可以看到單機 Mars 就比 Numpy 快數倍,隨著 Worker 的增加,可以獲得幾乎線性的加速比。
下圖是進一步擴大計算規模,把資料擴大到144億元素,對這些元素加一乘以二以後再求和。這時候輸入資料就有 115G,單機的 Numpy 已經無法完成運算,Mars 依然可以完成運算,且隨著機器的增多可以獲得還不錯的加速比。
Mars 已經在 Github 開源,點選文末“閱讀原文”即可獲取。後續Mars 團隊會全部在 Github 上使用標準開源軟體的方式來進行開發,歡迎大家使用 Mars,成為 Mars 的 contributor。
阿里妹:明天,阿里又一款重磅開源專案也將正式公開!對演算法同學來說,它絕對算得上新年前夕的神祕驚喜。劇透到這,明天早上8點8分,準點官宣!
你可能還喜歡
點選下方圖片即可閱讀
阿里去年新增12億行程式碼;即將開源自研科學計算引擎、圖學習框架;行人重識別演算法斬獲世界第一|周博通
如何“神還原”資料中心?阿里聯合NTU打造了工業級精度的模擬沙盤
關注「阿里技術」
把握前沿技術脈搏
相關文章
- 我們自研的 Ice 規則引擎開源了
- Calculator N+:一款智慧手機上的開源科學計算器
- 重磅!我國科學家成功研製全球神經元規模最大的類腦計算機計算機
- 八款開源Android 遊戲引擎Android遊戲引擎
- NumPy科學計算庫
- 重磅!重磅!Masonite 3.0 版本出來了!!
- 阿里雲重磅開源實時計算平臺,挑戰計算領域的“珠峰”阿里
- 設計了一款 Sensor Beacon 硬體,準備開源出來...
- Python科學測量與計算庫Pymeasure: 控制你的儀器進行自動測試和科學計算Python
- 收集的Java科學計算庫Java
- 在swift中接入微信開源庫MarsSwift
- 基於laravel的流程引擎偷偷開源了Laravel
- 又一大模型技術開源!網易有道自研RAG引擎QAnything正式開放下載大模型
- 騰訊PCG自研高效能大語言模型推理引擎「一念LLM」正式開源模型
- 自研 PHP 框架 1.1_模板引擎PHP框架
- 科學世界的人文關懷:開源科學與人工智慧人工智慧
- Wolfram Mathematica 13(科學計算軟體)
- 科學家用計算機破解西洋跳棋計算機
- ChatGPT 開源了第一款外掛,都來學習一下原始碼吧!ChatGPT原始碼
- 重磅!阿里巴巴開源首個邊緣計算雲原生專案 OpenYurt阿里
- 阿里去年新增12億行程式碼;即將開源自研科學計算引擎、圖學習框架;行人重識別演算法斬獲世界第一 | 周博通...阿里行程框架演算法
- 【科創人】Rancher江鵬:從清華工程物理學碩士到雲端計算開源創業者創業
- 重磅 | AI 聖經 PRML《模式識別與機器學習》官方開源了!AI模式機器學習
- 從大山走出的阿里首席通訊科學家,這次要重返課堂阿里
- [python][科學計算][pandas]使用指南Python
- [python][科學計算][numpy]使用指南Python
- Python科學計算 - Numpy快速入門Python
- Python科學計算——任意波形擬合Python
- 龍蜥雲原生機密計算 SIG 成立,7 大開源專案重磅亮相!
- 安全多方計算新突破!阿里首次實現“公開可驗證” 的安全方案阿里
- 重磅!京東雲自研第四代雲主機發布;曝國外物理學家開發出用於量子計算機的組合語言計算機組合語言
- 雲棲重磅:阿里兩款自研晶片明年面市,成立半導體公司平頭哥,馬雲力推新制造阿里晶片
- 重磅|中科院開源軟體點亮計劃,萬元獎金等你來拿!
- 重磅!李飛飛入選美國國家醫學科學院,她用AI改變了醫療AI
- Python科學計算之Numpy陣列生成與運算Python陣列
- 天橋腦科學研究院自研OMNE框架登頂GAIA榜首框架AI
- [python][科學計算][matplotlib]使用指南Python
- 專科學歷去學計算機,前景到底如何?計算機