戏说R语言系列6

讲一点R语言的高性能计算。

R语言有自己的官网,https://cran.r-project.org/,页面很“简陋”,十几年如一日,这事儿谢益辉抱怨过。“简陋”有一点不好,就是没有吸引力,不过谢益辉也说,再漂亮的网页,看久了也会烦,关键是要有内容。这句话很中肯。

在R语言官网里可以找到高性能计算部分,全称是“CRAN Task View: High-Performance and Parallel Computing with R”,所以严格说应该叫“高性能和并行计算”。这部分的主编或维护者是Dirk Eddelbuettel,这个人很厉害,用主编或维护者都不足以形容其在R语言的江湖地位,有人称他为Dirk Eddelbuettel大人,这个称谓比较贴切。

“高性能和并行计算”页面中的内容比较多,也比较难,找到一个可以讲得清楚的入口,其实不太容易,直到翻到页面的最下面,才发现有两篇文章是可以讲的。如果再找不到,估计就没什么可讲了。

一个是HPC computing notes by Luke Tierney for HPC class at University of Iowa,另一个是Schmidberger, Morgan, Eddelbuettel, Yu, Tierney and Mansmann (2009) paper on 'State of the Art in Parallel Computing with R'

先讲“HPC computing notes by Luke Tierney for HPC class at University of Iowa”。这是一些关于高性能计算的课程笔记。我从其中的介绍摘录一些内容。

关于32位和64位的讨论

简单点说,32位机器只能支撑4G的内存,如果导入的数据超过4G,或者计算过程产生的数据超过4G的话,那么无论如何,这个计算任务都是执行不下去的,所以要想扩大计算的容量,只能在集群上做。而64位机器可以支撑10EB的内容,10EB以现在的条件看,可以看做是无限大,理论上,机器上能装多少内存条,就能用上多少内存。换句话说,64位机器扩大了单机计算的能力。

虽然市面上大多数电脑是64位机器,但实际上很多人还在装32位的操作系统(使用Mac的同学可以不用考虑),所以,各位同学还是查一下自己装的是不是32位操作系统,不要把自己的电脑送回10年前。

使用R语言的同学,检查起来比较容易。只要输入一条命令即可。

我用的是64位的Linux系统

统计之都对陈天奇的访谈里,讲到了一段用32位机器的事情:

。。。比如我们实验室的 Hadoop 机器是 32 位的(笑),每台机器是 4 核 8G 的内存,我们如果想用机器去做分布式调参,那么每个模型只能用 2G 的内存。在这样的环境下,我们必须在 SVDFeature 中增加外存计算(编者:将数据储存在硬盘上,每次读入适量数据进入内存的方法)的功能,这也是我真正意义上的第一个外存计算的项目。

这是八年前的事情,本是一件很困难的事情,结果让大神做成了另外一件很有意思的事情。

摩尔定律、限制、GPU

这页讲的是摩尔定律,摩尔定律讲的就是芯片更新速度很快,每隔18个月,性能提升一倍。但无限增长是不可能的,有两个因素会限制增长速度,一个是散热,另一个是能耗。各位同学如果有机会去一下阿里云的千岛湖基地,可以看到是直接抽水给机器水冷的。另一个是多核CPU,再就是GPU。

如果放在现在,大家会不以为然,多核CPU、GPU计算很普遍啊,但这份PPT是10年前写的,这里面涉及了对nVIDIA的判断。如果有眼光10年前入手nVIDIA的股票,估计可以追上国内房价的增长速度。我看很多做量化交易的只看股价,其实科学也很重要,有些公司抓住的就是未来的趋势,那些鄙视价值判断的,太低估人类创造力了。

最近陈天奇又发了一篇文章 AutoTVM:让AI来编译优化AI系统底层算子,里面提到了10年前他用GPU的事儿。

Alexnet 横空出世的两年之前,我选择了深度学习作为本科毕设方向。当时的深度学习并没有现在那么火热,也没有现有的GPU卷积实现,我在实验室的 GTX 470上面第一次手写GPU卷积用以支持卷积RBM,当时针对CPU十多倍的加速比让我兴奋不已。虽然最终那段研究经历并没有结果,但是计算本身对于机器学习的推动作用却深深地印在了我的脑海里。

这点大多数人(包括我)估计就汗颜了。很多时候群里经常有人PK各种GPU的性能,或者讨论买GTX 1060好还是买GTX 1080好,人家大神当年只用GTX 470就已经手写卷积实现了。

再就是陈天奇在很多场合都提到他的很多研究经历并没有结果,或者是结果不是特别好。这得有一个比较开放宽松的环境才行。最近在看木心的《文学回忆录》,讲到国人太过现实,遂了愿,大家其乐融融,不遂愿,立刻翻脸。所以,创造力这东西,得看环境。

MPI、OpenMP

这页讲的是写并行计算程序其实挺难的,得用点工具。一些中等的工具是PVM、MPI、OpenMP,前两个是用在集群上的,其中MPI就是Dirk Eddelbuettel大人一直所坚守的对抗hadoop和spark的工具。OpenMP是用在单机上的,统计之都对陈天奇访谈中,他也提到过OpenMP:

做 XGBoost 的原因是做实验的时候发现效率太低了,因为原来 SVDFeature 里面的模型是单线程的。我在快从交大毕业时做的一个项目里接触到了 OpenMP,发现非常好用。所以我发现目前为止最适合写多线程的语言不是 Python 不是 Java,反而是有了 OpenMP 的 C++。至少机器学习里的很多算法直接用它就可以解决了。

可能很多同学都经历过用随机森林算法算了半天也算不出结果,然后把数据丢到XGBoost就焕然一新了,并惊诧于XGBoost的速度。要提升单机的计算性能,确实要做一些工作。R语言目前大量使用C++(通过Rcpp),计算性能提升了很多。

陈天奇在访谈中提到另外一个单机性能做得比较好的项目,就是GraphLab:

Graphlab 有很多很独到的东西,比如它的 data.frame 是目前为止唯一一个利用外存计算把单机性能推到极致的 dataframe 产品,还有他们的机器学习流水线和很不错。我们的重点应该是把我们擅长的工具做到极限,完成各个核心组件,然后让它们和已有的其他工具和平台更好地整合。

在这个访谈的第二年,Graphlab 被苹果公司收购。 看来一个企业还是得打磨产品和技术,光靠忽悠人不行。

另外一篇是是 'State of the Art in Parallel Computing with R',这篇和第一篇重合度比较大,只摘录其中一段。

把底层线性代数计算包替换成掉也是个办法

BLAS是一个比较底层的线性代数和矩阵操作的工具包。R语言作为一门计算语言,有大量的矩阵操作,所以文章建议使用性能更好的BLAS,例如ATLAS和Intel MKL。

这篇文章写于2009年,目前,国内中科院也贡献了一个高性能BLAS,就是OpenBlas,这应该算是国内为数不多的、很厉害的一个开源项目。

摘自http://arma.sourceforge.net/

从这张图可以看到,ATLAS已经没有了,还剩下Intel MKL和OpenBlas,能和Intel在这个细分的底层领域放在一起,确实很厉害的!

OpenBlas前年也成立公司了,澎峰科技 http://perfxlab.com/cn/#home,公司网站做得比较粗糙。看他们正在招聘金融高频交易系统者开发人员,可能是不差钱吧。

关于OpenBlas在R语言里的安装和使用,可以参考张丹老师的http://blog.fens.me/r-martix-openblas/。Linux系统非常好安装,就一条命令。安装之后可以在R里看到效果(还是用sessionInfo()命令)。

一定要装OpenBLAS啊
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容

  • 工欲善其事,必先利其器。总结一下,方便多了。R语言还是很牛逼的,可以干很多事情。有一把顺手的刀还是很重要的。 0....
    Liam_ml阅读 4,583评论 1 60
  • ** 转载自URl-team 本文链接地址: 机器学习各语言领域工具库中文版汇总 主要资源来自TensorFlow...
    风火布衣阅读 2,022评论 0 6
  • 写在六一节,写给老妹: 01 王文文是我的老妹,不,小妹吧,我比她大三岁,她只比我小一级。 上上上上周吧,是她的生...
    会飞的小蜗牛阅读 514评论 14 3
  • 一、FMDB开源第三方库 1.非ARC模式的第三方库 -fno-objc-arc 2.系统依赖libsqlite3...
    胡伟红阅读 852评论 0 0
  • 小新老师:最近骑车总是背疼,不知道怎么了? 老师“小新啊你骑车背疼,这个你你的补补啊” 小新补补???我还这么小也...
    侠玩骑游阅读 653评论 0 1