[Python]战“疫”期,阿里云云效团队在家高效开发实录( 二 )
Mars 的开发过程中 , 我们核心关注的几点包括:
- 我们希望 Mars 足够简单 , 只要会用 Numpy、pandas 或 scikit-learn 就会用 Mars 。
- 避免重复造轮子 , 我们希望能利用到这些库已有的成果 , 只需要能让他们被调度到多核/多机上即可 。
- 声明式和命令式兼得 , 用户可以在这两者之间自由选择 , 灵活度和性能兼而有之 。
- 足够健壮 , 生产可用 , 能应付各种 failover 的情况 。
Mars tensor:Numpy 的并行和分布式加速器 上面说过 , 我们的目标之一是 , 只要会用 Numpy 等数据科学包 , 就会用 Mars 。 我们直接来看代码 , 还是以蒙特卡洛为例 。 变成 Mars 的代码是什么样子呢?
import mars.tensor as mtN = 10 ** 10data = http://news.hoteastday.com/a/mt.random.uniform(-1, 1, size=(N, 2))inside = (mt.sqrt((data ** 2).sum(axis=1)) < 1).sum()pi = (4 * inside / N).execute()print('pi: %.5f' % pi) 可以看到 , 区别就只有两处:import numpy as np 变成 import mars.tensor as mt, 后续的 np. 都变成 mt. ;pi 在打印之前调用了一下 .execute() 方法 。也就是默认情况下 , Mars 会按照声明式的方式 , 代码本身移植的代价极低 , 而在真正需要一个数据的时候 , 通过 .execute() 去触发执行 。 这样能最大限度得优化性能 , 以及减少中间过程内存消耗 。
这里 , 我们还将数据的规模扩大了 1000 倍 , 来到了 100 亿个点 。 之前 1/1000 的数据量的时候 , 在我的笔记本上需要 757ms;而现在数据扩大一千倍 , 光 data 就需要 150G 的内存 , 这用 Numpy 本身根本无法完成 。 而使用 Mars , 计算时间只需要 3min 44s , 而峰值内存只需要 1G 左右 。 假设我们认为内存无限大 , Numpy 需要的时间也就是之前的 1000 倍 , 大概是 12min 多 , 可以看到 Mars 充分利用了多核的能力 , 并且通过声明式的方式 , 极大减少了中间内存占用 。
前面说到 , 我们试图让声明式和命令式兼得 , 而使用命令式的风格 , 只需要在代码的开始配置一个选项即可 。
import mars.tensor as mtfrom mars.config import optionsoptions.eager_mode = True# 打开 eager mode 后 , 每一次调用都会立即执行 , 行为和 Numpy 就完全一致N = 10 ** 7data = http://news.hoteastday.com/a/mt.random.uniform(-1, 1, size=(N, 2))inside = (mt.linalg.norm(data, axis=1)
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 畜牧业@畜牧互联网再次引爆:阿里养猪,京东养鸡,快看大佬们都在干嘛
- 『腾讯科技』淘宝天猫蒋凡在阿里内网回应传闻:深表歉意,恳请公司展开调查
- #阿里巴巴#将饿了么卖给阿里,套现600亿的大学生,如今在干什么呢?
- 服务@云市场跨步式发展 打造ToB云市场阿里腾讯外“第三股势力”
- 『程序员』阿里程序员感慨:公司期权套牢了我,外面开五六万的薪资都不想接
- 「创作者来直播」阿里老师给检察官做直播,猜猜带的什么货?
- ■奶奶大学同学让我别学Python了,吃枣药丸,劝我学汇编,说是时髦
- 『湘潭』华为、京东、阿里云……湘潭欲打造的这个“英雄联盟”很是“牛”
- 「程序员小助手」奶奶大学同学让我别学Python了,吃枣药丸,劝我学汇编,说是时髦
- #新开普#阿里系进驻后股价翻倍,这家豫股却遭大股东减持套现63次丨立方财报眼
