[Python]战“疫”期,阿里云云效团队在家高效开发实录( 三 )
< 1).sum()pi = 4 * inside / N# 不需要调用 .execute() 了print('pi: %.5f' % pi.fetch())# 目前需要 fetch() 来转成 float 类型 , 后续我们会加入自动转换 Mars DataFrame:pandas 的并行和分布式加速器 看过怎么样轻松把 Numpy 代码迁移到 Mars tensor, 想必读者也知道怎么迁移 pandas 代码了 , 同样也只有两个区别 。 我们还是以 movielens 的代码为例 。import mars.dataframe as mdratings = md.read_csv('ml-20m/ratings.csv')ratings.groupby('userId').agg({'rating': ['sum', 'mean', 'max', 'min']}).execute() Mars Learn:scikit-learn 的并行和分布式加速器 Mars Learn 也同理 , 这里就不做过多阐述了 。 但目前 Mars learn 支持的 scikit-learn 算法还不多 , 我们也在努力移植的过程中 , 这需要大量的人力和时间 , 欢迎感兴趣的同学一起参与 。import mars.dataframe as mdfrom mars.learn.neighbors import NearestNeighborsdf = md.read_csv('data.csv')# 输入是 CSV 文件 , 包含 20万个向量 , 每个向量10个元素nn = NearestNeighbors(n_neighbors=10)nn.fit(df)# 这里 fit 的时候也会整体触发执行 , 因此机器学习的高层接口都是立即执行的neighbors = nn.kneighbors(df).fetch()# kneighbors 也已经触发执行 , 只需要 fetch 数据 这里要注意的是 , 对于机器学习的 fit、predict 等高层接口 , Mars Learn 也会立即触发执行 , 以保证语义的正确性 。
RAPIDS:GPU 上的数据科学 相信细心的观众已经发现 , GPU 好像没有被提到 。 不要着急 , 这就要说到 RAPIDS 。
在之前 , 虽然 CUDA 已经将 GPU 编程的门槛降到相当低的一个程度了 , 但对于数据科学家们来说 , 在 GPU 上处理 Numpy、pandas 等能处理的数据无异于天方夜谭 。 幸运的是 , NVIDIA 开源了 RAPIDS 数据科学平台 , 它和 Mars 的部分思想高度一致 , 即使用简单的 import 替换 , 就可以将 Numpy、pandas 和 scikit-learn 的代码移植到 GPU 上 。
本文插图
其中 , RAPIDS cuDF 用来加速 pandas , 而 RAPIDS cuML 用来加速 scikit-learn 。
对于 Numpy 来说 , CuPy 已经很好地支持用 GPU 来加速了 , 这样 RAPIDS 也得以把重心放在数据科学的其他部分 。
CuPy:用 GPU 加速 Numpy 还是蒙特卡洛求解 Pi 。import cupy as cp N = 10 ** 7data = http://news.hoteastday.com/a/cp.random.uniform(-1, 1, size=(N, 2))inside = (cp.sqrt((data ** 2).sum(axis=1)) < 1).sum()pi = 4 * inside / Nprint('pi: %.5f' % pi) 在我的测试中 , 它将 CPU 的 757ms , 降到只有 36ms , 提升超过 20 倍 , 可以说效果非常显著 。 这正是得益于 GPU 非常适合计算密集型的任务 。
RAPIDS cuDF:用 GPU 加速 pandas 将 import pandas as pd 替换成 import cudf , GPU 内部如何并行 , CUDA 编程这些概念 , 用户都不再需要关心 。import cudfratings = cudf.read_csv('ml-20m/ratings.csv')ratings.groupby('userId').agg({'rating': ['sum', 'mean', 'max', 'min']}) 运行时间从 CPU 上的 18s 提升到 GPU 上的 1.66s , 提升超过 10 倍 。
RAPIDS cuML:用 GPU 加速 scikit-learn 【[Python]战“疫”期,阿里云云效团队在家高效开发实录】同样是 k-最邻近问题 。import cudffrom cuml.neighbors import NearestNeighborsdf = cudf.read_csv('data.csv')nn = NearestNeighbors(n_neighbors=10)nn.fit(df)neighbors = nn.kneighbors(df)
推荐阅读
- 畜牧业@畜牧互联网再次引爆:阿里养猪,京东养鸡,快看大佬们都在干嘛
- 『腾讯科技』淘宝天猫蒋凡在阿里内网回应传闻:深表歉意,恳请公司展开调查
- #阿里巴巴#将饿了么卖给阿里,套现600亿的大学生,如今在干什么呢?
- 服务@云市场跨步式发展 打造ToB云市场阿里腾讯外“第三股势力”
- 『程序员』阿里程序员感慨:公司期权套牢了我,外面开五六万的薪资都不想接
- 「创作者来直播」阿里老师给检察官做直播,猜猜带的什么货?
- ■奶奶大学同学让我别学Python了,吃枣药丸,劝我学汇编,说是时髦
- 『湘潭』华为、京东、阿里云……湘潭欲打造的这个“英雄联盟”很是“牛”
- 「程序员小助手」奶奶大学同学让我别学Python了,吃枣药丸,劝我学汇编,说是时髦
- #新开普#阿里系进驻后股价翻倍,这家豫股却遭大股东减持套现63次丨立方财报眼
