数字世界的发展离不开各种数字工具,火星是推动科学计算的有力武器。
在现代科学技术的演进中,随着计算环境的复杂化和数据的大规模爆炸,研究人员和开发人员往往要面对巨大的计算量。比如在金融工程、基因测序、气候研究等领域。,我们不仅需要强大计算能力的支持,还需要数学理论的抽象性和严谨性,以及编程的实用性和实践性。

基于此,阿里巴巴推出了基于张量的分布式计算框架Mars,并与英特尔合作,借助英特尔傲腾持久内存提供的更大内存容量和低延迟,大幅加速了科学计算任务中产生的中间进程的数据I/O,显著提升了分布式科学计算的计算效率。
分布式计算很难应用于科学计算。
基因、自然、宇宙充满了未知的秘密,科学计算是人类揭开一些隐藏信息的钥匙。随着数字化发展的逐渐成熟,除了科学研究,科学计算还为金融、交通、气象等一些工程技术提供了可行的解决方案。
科学计算的过程往往伴随着巨大的数据量和很高的计算能力,于是诞生了一些专门为科学计算开发的工具,比如SciPy。SciPy自诞生以来已经经历了二十年的发展。作为Python的开源科学计算库,SciPy一直是科学计算的核心,代表了Python的一个行业标准。在SciPy提供的基础算法中,涵盖了现有的数学软件分类体系,可以为微分和积分方程的计算提供完整的流程,这也使得SciPy在数学、工程和科学计算领域发挥了非常重要的作用。
在整个SciPy系统中,Numpy是各种工具的基础。它不仅提供了多维数组的数据结构,还支持SciPy系统中的各种计算。多维数组也叫张量。这一概念近年来被广泛传播。它是深度学习的基础。张量有很多优点。与二维表格/矩阵相比,张量可以创建更高纬度的矩阵和向量,因此具有更强大的表达能力。
在AI创新的推动下,出现了机器学习和深度学习的热潮,张量的使用逐渐增多。Numpy简单易用,性能强大,在企业中应用广泛。但Numpy只适用于单机条件,大部分功能无法并行化,无法利用CPU的多核处理能力提高计算效率,使得Numpy无法突破现有的规模瓶颈。
在此背景下,分布式计算引擎的出现为处理海量数据提供了另一种途径。分布式计算是一种非常高效且具有成本效益的方案,不仅可以平衡任务调度,而且在处理大数据集时可以大大提高计算效率。
但值得注意的是,分布式计算引擎在科学计算领域并不能发挥很大的作用。原因是前者的诞生与后者没有必然联系,分布式计算引擎的上层接口不匹配,导致用传统的SQL/MapReduce很难写出科学的计算任务。而且在执行过程中,计算引擎本身并没有对科学计算进行优化,使得后者的计算效率难以满足行业的发展需求。
基于此,阿里巴巴推出了开源的分布式科学计算引擎Mars,将分布式技术引入科学计算领域,突破了大数据计算引擎基于关系代数的计算模型,将大规模科学计算任务从MapReduce中的几千行代码缩减到Mars中的几行代码,大大提高了科学计算的效率。
火星增强科学计算核心
火星在科学计算中的应用是一个突破。作为新一代大规模科学计算引擎,Mars使大数据能够进行高效的科学计算,并将其带入分布式时代。目前,Mars已经广泛应用于阿里巴巴及其云上客户的业务和生产场景,帮助用户发掘数据背后的价值。
具体来说,火星具有以下独特的优势和特点,使其在科学计算领域具有广阔的前景:
第一,符合使用习惯的界面好用。Mars通过内部张量模块提供了与Numpy兼容的接口。用户只需要导入Mars就可以将现有的基于Numpy编写的代码移植到Mars上,直接获得比原来大几万倍的运算规模。
在实际的移植过程中,可以发现代码只需要很少的改动。一种是将import numpy改为importmars.tensor二是通过execute触发执行。目前,Mars已经实现了大约70%的常见Numpy接口。据悉,在Mars后续的升级迭代中,SciPy技术栈中的工具将逐步分发,比如提供完全兼容的pandas接口,从而完善整个Mars应用生态系统。
其次,它支持GPU加速,这也是火星在科学计算领域的一个突出优势。用户可以轻松设置gpu加速:在创建张量时,通过指定gpu=True,可以在GPU上执行后续计算,进一步提高计算效率。
第三,支持二维稀疏矩阵。通过设置sparse=True,用户可以在Mars中创建稀疏矩阵,优点是节省了空的存储时间,提高了计算效率。
第四,扩展性。Mars可以扩展到独立的计算机,也可以扩展到拥有数千台计算机的服务器集群。因为本地和分布式版本共享相同的代码,所以随着数据的增加,从单机迁移到集群非常方便。
粗粒度图
也是基于这些特点和独特的优势,Mars支持多种调度模式,如多线程模式、分布式模式和单机集群模式,保证了Mars的可扩展性,使其能够支持更多的科学计算场景。与Numpy相比,Mars可以看作是一个包含粗粒度图和细粒度图的计算图。给定一个张量,Mars会在每个维度把它分成小块,然后处理这些块,调度到多核或者分布式集群上执行。
这主要是因为Mars不在客户端执行真正的操作。当用户写下代码时,数据会以图形的形式记录在内存中,用户用execute触发执行后,图形会提交给Mars的分布式执行环境。本质上,Mars是一个细粒度的异构图执行调度系统。
Mars块级别的执行图
值得注意的是,虽然Mars矩阵运算的数据输入输出量并不大,但是在chunk后的运算过程中会产生大量的中间过程。在上图中,生成的中间流程在红框内。毫无疑问,这些进程会占用大量的内存资源。为此阿里巴巴在Mars中加入了数据溢出控制手段,将暂时不用或未使用的数据放入磁盘进行存储,防止内存溢出,保证计算安全。
英特尔傲腾帮助Mars打破计算瓶颈
数据溢出控制手段可以有效减少Mars运行时内存资源的不必要消耗,但同时,在TCO相当的情况下,内存系统的构建会成为制约Mars计算效率的又一瓶颈。
传统硬盘价格低廉,可以提供大量存储空,但在可靠性、物理空要求、散热等因素方面会带来新的应用成本。而在I/O速度方面,从硬盘中访问数据会伴随着严重的延迟。在这一点上,DRAM优势明显,可以将延迟时间降低一千倍,但在容量上会有新的麻烦。
在此背景下,阿里巴巴与英特尔合作,在运行Mars的服务器上配置英特尔傲腾持久内存,通过其大容量、低延迟的特点,为Mars提供足够的共享内存,从而保证Mars科学计算效率的高水平实现。
英特尔傲腾持久内存有两种工作模式:内存模式和应用直接模式。前者适用于大内存容量,后者是非易失性的,应用程序可以直接在内存中执行操作,大大降低了堆栈中的复杂度。再者,英特尔傲腾持久内存可提供128G、256G、512G容量,每GB内存成本低于传统DRAM,可满足玛氏大规模应用的需求。
火星需要满足不断变化的科学计算环境。为此,英特尔对傲腾持久内存做了两处调整,一是在内存中启用AD模式的Snoop,二是在持久内存中共享等离子。前者可以保证傲腾持久内存的高I/O水平,后者可以使内存资源的应用更加合理,从而有效提升Mars的计算性能。

在实验环境中,Mars的工作量是通过两个矩阵相乘来科学计算的,分别由一台搭载英特尔傲腾持久内存的服务器和一台搭载DRAM内存的服务器执行。经过Mars不同数据集的工作负载测试,可以发现当数据集较小时,可以用DRAM缓存数据,持久内存的性能接近DRAM。当数据集规模越来越大时,持久存储的优势开始显现。当数据集规模增加到SF=0.5时,使用奥腾持久存储器的性能比DRAM 1.11高1.11倍
可以说,使用英特尔傲腾持久内存将有效提升Mars的计算性能,尤其是对于大规模数据集。英特尔傲腾持久内存不仅能解决数据缓存溢出问题,还能大幅降低数据延迟,从而让科学计算更加高效。
先前的建议
01
从创新到主流选择,奥腾向用户输出更多价值。
02英特尔着眼于整体业务情况,重点是全覆盖。
03至强2021强势出击:生态赋能,恒大。
04助力企业转型升级,英特尔打造数字时代三叉戟。
05“三新”组合拳,英特尔为数据创新解除后顾之忧。



