雷锋网 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 雷锋网(公众号:雷锋网)雷锋网