忆忆往昔峥嵘岁月月,凝钢铁战魂演讲稿

【干货】英特尔中国研究院院长吴甘沙演讲全文吴甘沙院长的大数据分析讲座还记得小象之前给大家的#吴甘沙#院长讲座的PPT吗?现在讲座内容全公开!↓↓↓吴甘沙院长从大数据技术前沿的十个问题入手,对大数据产业进行了深度解析。讲座分为三部分:- 领先的大数据科研单位和企业正在如何利用大数据- 解决大量的数据前提下,优化实时计算技术- 怎样通过数据采集与分析做出更好、更精确的决策支持演讲正文:谢谢大家那么冷从四面八方的赶过来。另外,也是诚惶诚恐,刚才知道有很多清华非常著名的教授来参加,让我觉得压力山大。今天我只是一个非常个人的对大数据的一个认识。这十个前沿不代表是一个非常准确的定义。大家回去不用把这个分类作为自己研究的一个参考。而且今天我这个演讲聚焦在技术上,别讲太多大数据的理念、思维,甚至是应用技术都不讲了。所以今天我主要是讲核心的技术。也许大家听起来会有一点枯燥,现在说干货是好事,但是有点太干了。涉及到的名词和特定的技术领域,这不代表我个人都很懂。在很多地方我都是一知半解。我希望把这个作为交互式的,大家有问题可以随时打断我。首先我们公司要求要有一些免责方面的要求,个人也是免责,今天讲的是我个人的认识。现在说大数据,我希望大家做研究的有一种思维方式,在美国有一个未来研究院的发起人,他叫阿马拉,他提到一个阿马拉法则,人们往往会高估技术的短期影响力,而低估技术的长期影响力。技术的长期影响力代表着技术的积累效应。我们现在常常用指数效应来说明,在现在这个指数时代,指数效应或者指数的颠覆性效应是一种新的常态。我们经常在大数据的领域听说,有人说我们现在的数据量非常大,最近两年产生的数据量相当于人类历史上产生的数据量总和的90%。有人说,最近一天产生的数据量相当于人类文明开始到2003年这数万年人类产生数据量的总和。IDC说,现在人类产生的数据总量每两年翻一番。所有这些都说了一个事情:指数的效应。看一下这个曲线,在经历很长时间的缓慢增长之后,突然在一个点它拐头向上,产生了爆炸式的增长。在这个时间点,T如果是X的话,T+1就是X的平方。当X很大的时候,它在任何一个周期都会把前一个周期远远的抛离在深厚。大家一定听过棋盘和麦粒的故事,8乘8的棋格,第一格放1粒,第二格放2粒,到后面积累就会爆发式的增长,到一个国家承受不了的程度。摩尔定律,这张泛黄的纸片是当时英特尔的联合创始人之一戈登·摩尔(Gordon Moore)写下的纸片,他推动了现在社会的飞轮效应。每过18个月,晶体管数翻一番,它进一步带来了一系列指数式的链式反应。处理器的性能也翻一番,成本折半,功耗折半。同时,在一些临近的领域也触发了指数效应。比如说以氧化铁为主要承载物的存储,也有类似的指数效应。比如说主干网的带宽甚至每八个月都会翻一番。甚至是每美元能够买到的数码相机的像素的数目也呈现了指数级的效应。所有这些带来了数据的摩尔定律。所以我一直一个论点是,在这个社会,大数据是我们的蛋白质。蛋白质是我们生命活动的基础,也是我们生命活动主要承载者,它对于我们这样一个社会实在是太重要了。我们形容数据是资产、是原油、是原材料、是货币,无论哪种形容的方法都不过分。因为它关系到70亿人数据化的生存,以及亿个互联设备的感知、互联和智能。所有这些乘起来产生了2020年35个ZB的数据。在2020年一年会产生35个ZB的数据。一个ZB相当于一千个EB,谷歌已经把互联网吸纳在他的数据存储中了。他的数据的存储量差不多在个位数的EB或者几十个EB之间。2020年一年就会产生一千个谷歌的数据。这是一个多大的量?当然我们不能只是强调数据量多大。而是说在这个数据里面我们能够提取出什么样的意义来。提取的过程就是这样一个函数,F(数据,T)。这么大量的数据给我们带来了什么样的挑战。全集大于采样。传统的数据分析是能够采样的,他能够抓到一定的统计的数据特征。但是大数据要求的是倾听每一个个体的声音。他不希望把一些个体的东西变成噪声过滤掉。所以这是带来的第一个挑战。第二个挑战是实时性。数据的价值是跟它的寿命成反比。当数据刚刚产生的时候,它的价值是最大的,尤其是个性化的价值是最大的。随着时间的推移,它会蜕变到只有几何的价值。我们需要实时处理,并且把这个实时的洞察跟我们长期积累下来的知识进行融合,变成之前或万物皆明的全时的智慧,这是第二个挑战。第三个挑战是F,我们的分析方法是不是能够做到见微,又能够做到知著。同时,也能够理解每一个社会运行的规律。这对F要求非常高。第四,他反映了人与机器的关系,或者人与工具的关系。我们说希望数据能够说人话,数据的价值是人能够理解,并且能够执行的。很多大数据的技术基本上是为了解决这四个问题。我今天要讲的十个技术前沿,基本上都落到刚才这四个需求里。但是我又把它分成三大类:第一大类,解决数据的问题。第二大类,解决大量的数据前提下,如何能够实时的计算问题。第三大类,我的分析怎么能够提供更好的、更精确的价值的问题。所以我下面会根据这十个技术前沿,跟大家介绍一下现在我们领先的大数据的科研单位以及企业都在做什么样的事情。第一,膨胀的宇宙。IDC创造一个名词叫做DATA UNIVERS——数据宇宙。它的膨胀速度是非常快的。现在我们的硬盘是TB,到PB到EB到ZB,甚至再到下一步DBMS。在这条路线延续的同时,文件系统也在延续,文件系统对于非结构化的数据具有更好的存储能力。所以DFS能够处理比NoSQL更大的数据量。有一些NoSQL的数据就是建立在DFS的基础上。这时候有一部分人就想NoSQL损失了很多的特性,但是在商业场景里面,我从帐号里面取了钱,我要保证这笔交易是符合事物特性的,不会存在我取了一百块钱,但是在数据库里面显示那一百块钱还在里面。怎么在更大量数据的基础上来实现这种事物特性呢?于是就出现了NewSQL,NewSQL一方面处理的数据量比传统的数据库更大;另一方面,它又能够满足事务的特性。当然NoSQL还在进一步的演进,从几十个PB的规模,进一步演进到EB的规模,进一步出现Globally
Distributed DB的规模,百万台服务器的规模。谷歌的Spanner就是一个典型的distributed
DB。它为了达到事务特性,它需要部署很多新的技术,比如说利用GPS进行全球的时钟同步。另外一个演进是Array
DBMS,很多计算是现行函数,它跟关系函数很不一样。Array
DBMS就应运而正了,最主流的是SciDB,它就是针对科学计算、针对现行计数的数据。这就是一个主流演进的图谱,但是它还没有结束。在文件系统方面,因为纯磁盘的访问使得它有吞吐量的瓶颈。于是出现了利用RAM做缓存的现象。比如说最著名的HDFS就有了内存、缓存的扩展。同时,也出新了in Memory的FS,它把文件系统放到大的内存里面。而且,现在主流的大数据的处理都是基于JAVA。JAVA内存回收是通过一个处理器。对于几百个EB的信息,垃圾回收器不是特别的有效。于是又出现了堆外面的内存,它在堆外面又放了大量的数据。另外一个是Erasure
Coding,它最早在通讯领域,是因为无线的信道有很大的出错的可能性。它通过编码机制能够使得我这个传输是能够容错,甚至是纠错的。现在它也被用到了大数据上面。大家如果熟悉Hadoop的话,就知道在DFS上面曾经出现了几种时限,每一种都是因为种种原因并没有得到推广。最近英特尔跟Cloudera一起,推了一种新的Erasure
Coding。DRAM
Storage也出现了,就是我所有的数据都存在DRAM里面,它进一步提升了吞吐量,减少了延迟。但是DRAM有一个问题,DRAM是易失的,一掉电这个数据就不存在了。你为了让他能够起到存储的作用,就必须要想办法,比如说通过冗余的方法在不同节点里面都存同一个数据,这样一台机器宕掉了,它的数据还能够存在。当你的数据都留在内存里面以后,不同节点之间数据的传输就变得非常重要。传统的数据传输是通过网卡、TCPIP的协议栈,这个效率是非常低的。在高性能计算里面,出现了RDMA,高性能计算里面都是非常高大上的,这些技术非常昂贵,本身的扩展性也不够。所以现在基于大数据的高扩展性的RDMA也是现在研究的热点。所以这几种新的介质放在一起就出现了Heterogeneous
Storage,你能够根据数据访问的频率,能够智能的把数据放在不同的介质上面。比如说访问最频繁的就放在DRAM或者是Flash,不太频繁的就放在传统的磁盘里。这做的好与不好关系非常大。谷歌有一个工作,他能够保证他只把1%的数据放在闪存里面,但是这1%的数据的闪存接受了28%的数据的访问。如果你的数据分布算法做的好的话,你可以以非常低的成本提供更大的吞吐量。未来,会出现Memory,它的性能跟DRAM相差不多,但是它的容量更大,它不会丢失,如果数据里面的内存不会丢失,整个系统的软件就有可能会发生一些革命性的变化。比如说你不用再做序列化和反序列化了。你甚至不用文件了。因为原来用文件是因为我在磁盘里的数据的状态跟内存里面数据状态是不一样了。但是你现在在这个状态里面,你休息的状态跟被使用的状态是一样的。你不需要从文件里面把数据读出来,转化成为计算的格式。所以non-volatile的出现会对大数据的软件化出现革命性的变化。non-volatile还有一种选择是磁带机。它还在被大量的使用。谷歌是全世界磁带系统最大的买家。因为他要备份他的几十个EB的数据。他大量的数据都是在磁带机里面,磁带本身的介质也在变化,最先出现的钡铁的形式,它的稳定性更好。第二,巴别之难。圣经里有一个巴别塔,最早人类都是同一种,讲的语言也都是一样的。上帝觉得你们太舒服了。他说人类要造一个巴别塔,他让你们说不同的语言,让你们沟通产生困难,让你们分布到不同的地方去。数据也面临同样的问题,数据并不是在同一个地方说同一种语言。数据能够相互说话,但是他们用不同的语言。他们的格式可能是不一样的,他们的语意不一样,他们的度量衡不一样。数据可能是不完备的,甚至是相互之间矛盾,这样导致了一个问题,我们没有办法利用更多的数据来产生更好的价值。为了实现这个一定要做一件事情叫Data
Curation,数据的治理,数据质量的提升。Data
Curation里面最有提升价值的是Data
Wrangling。在计算历史上有很多hard的问题,有一种NP—hard,还有一个叫DB—hard,它的意思是你在这个地方输入地址是这样写的,在另外一个地方输入地址的写法不一样,事实上他们代表的是同样一个东西。Data
Wrangling就是希望把数据的逻辑打破。怎么通过自动化的学习方式,怎么能够发现数据中的规律,尤其是文本这样一种典型的非结构化数据,怎么能够发现规律。其次怎么能够发现重要的实体。本体论里面一个重要的概念,反应我们一个描述对象的属性的单位就是entity,我们怎么找到这些entity,这一切是希望能够通过自动化的学习来完成。而且希望能够从半结构化或者多结构化的数据进一步推展到完全非结构化的数据。你提炼出来的这些数据和原数据,需要有一种更好的组织方式。现在一个冉冉升起的组织的工具叫做Apache的UIMA。如果这个大家比较陌生,大家一定听说过IBM的Watson。前两年在美国的一个类似于开心辞典的节目,一个计算机战胜了两个非常高智商的人。在它的信息的组织就是通过Apache的UIMA来组织,它的组织能够使后期的分析最简化。这个是解决巴别之难的现在的主要研究工作。第三,数据有价。数据是比特,比特是可以低成本无限的复制,一旦一个数据或者一个东西失去了稀缺性以后,它的价值就是零了。所以,数据有价首先要保证你要定一些数据的权利。在这样一些权利的指导下,你要保证数据的安全。大数据的安全本身又分为大数据系统的安全、数据本身的安全,以及数据使用当中的安全。最后是数据怎么来进行定价。我在第三个前沿里面希望能够给大家分析一下这一块主要的研究成果。第一,数据权利的定义。数据我认为有五个基本权利:第一,拥有权,这个数据是属于谁的,这个拥有权是不含糊的。就像我们现在拥有的其他的物理的财产一样,拥有权可能会出现变更,比如说离婚了,这个权利怎么分割,人死了怎么来传承。这里面都涉及到数据拥有权的研究。第二,数据隐私权,我什么东西不能给你看。第三,数据许可权,我什么东西可以给你看,今天给你看了明天不能给你看。第四,数据审批权,我按照这样一个规范许可给你以后,需要有一种机制审计,确保你是按照这种规范、按照这种许可的条例使用我的数据。第五,数据分红权,对于新产品的数据价值,我有没有可能得到分红?这是我定义的数据几种权利。下面就是数据的安全问题,首先我怎么保证一个大数据的系统安全,比如说Hadoop,慢慢加入了基于Kerberos的用户和服务鉴权。HDFS文件和数据块权限控制。未来是高度分布、去中心化场景下的安全,数据使用实体之间并不需要存在信任。不存在单点可控制的机制。最典型的就是类似于比特币和Ripple的获取。比如说block chain,它是对数据最价值的获取。对数据的安全,第一个方法是加密,Hadoop新的功能就是可以对数据进行加密。第二,访问控制。Apache Accumulo,它也是一个开源数据库。在Hbase里面也在加入类似访问控制的安全。动态数据的安全,这个数据只有你能访问,我不能访问。这种静态控制不能防止一种攻击,你有权访问了,你把数据取出来了又给了我。因为他不存在一种动态的进行跟踪的机制。所以现在有对数据的移动进行动态的审计。个人对数据的控制。现在我们个人对自己的数据有了一定的控制权限,比如说Do Not
Track,现在浏览器都有这种功能,如果你不把它打开,各种各样的互联网服务商就可以根据你的Cookie不断的跟踪你,你在京东上看中一双鞋,你到淘宝上它就会一直跟踪你。你打开Do
Track,它就不能跟踪你了。现在各种不同的AP可以跟踪你,你一旦关闭“跟踪”选项,他就不能跟踪你。个人数据的删除你可以要求一些互联网的服务提供商把你的数据删掉。这是MIT做的,他以隐私的方式向第三方提供数据,并且获得价值。数据安全中现在最热的一个研究领域,叫做数据脱敏。尤其是开放数据,我如果要把数据开放出去的话,我怎么能够保证这个数据里面不会把一些个人的隐私信息泄露出来,在历史上很多的数据开放就导致了这样的问题。美国的国会,有人把他的搜索数据跟美国选举公开信息进行了匹配,使得他个人的隐私被暴露了出来。去标识符往往是不彻底的,这里有一个准标识符,对于个人来说,姓名是标识符,准标识符是性别、出生年月、邮编,在美国做的研究,只要根据这三个信息,准标识符的信息,有90%几的可能可以把个人确定下来。你要防止这样的隐私供给。还有一种基于统计的攻击。如果我能够知道一个人的活动规律,同时我知道他一天在四个不同的时间点,出现在不同的基站周围,我有95%的可能性把他确定下来,所以要防止这些隐私攻击,现在推出了很多的技术,比如说K-anonymity,当你的准标识符都相同的话,这个数据组里面我还是至少有k个值,不是只有一个值,如果只有一个值,你马上把这个人确定下来。希望能够有K个值。L-diversity中,他是希望K个数据中至少有L个不同的值。第一种匿名的机制只保证有K个数据,但是他还是有类似性。左翼进一步要求这K个数据有L个不同的值。T-Closennss进一步保护你的隐私性。Differential
privacy会人为的插入一些噪声,但是又不干扰你进行分析,他在插入噪声的同时又不影响这些噪声的分析,这是插分隐私。当然这里面要注意隐私的安全性和数据的可用性。因为你插入的噪声太多了,数据本身的价值下降。第三种安全是数据使用的安全,我们希望数据使用能够做到可用但不可见,相交但不相识。我希望几个人的数据凑在一起产生更大的价值。但是我又不希望你能看到我的数据,或者我看到你的数据。这里面有几种技术,一种是同态加密技术,CsyptDB/Moomi。另外一种是基于加密协议的多方安全计算。第三种是基于可信计算环境的多方安全计算。可信计算环境需要一些硬件的支持。我这些列举的TXT、TPM、VT—d,都是英特尔现在平台上的,他能够保证你的数据是可信的,环境是隔离的。但是这个数据在磁盘里面是加密的,但是它被放在内存里面,就变成明文了,虽然我们有VT这样一种技术保证它的数据是隔离的,但是还是存在着被攻击的可能性。下一步技术叫SGX,它的攻击的可能性也没有了,因为在内存里面也是密文,一直到CPU里面进行计算的时候,才变成明文。另外一个审计和定价的问题。系统安全了,数据安全了,使用安全了,我可能要进行一个审计。定价,任何一个财产的定价,一个是根据效用,第二个是稀缺性。所谓效用就是你这个数据被使用的多频繁,他对结果的影响有多大,根据这样一种效果,我来判断各方数据的贡献,从而进行定价。稀缺性是根据数据价值的密度以及历史的价格的稀缺性进行定价。刚才的研究我们做了一个技术叫数据咖啡馆。咖啡馆是16世纪在英国出现的,它就是让三教九流不同的人能够聚在一起进行思想的碰撞,产生新的价值。数据咖啡馆就是希望能够让不同方的数据碰在一起,现在有很多垂直的电商,他们都是经营不同的业务。他们对于客户的认识是非常片面的,不精确的。比如说一家电商是卖衣服鞋帽的,另外一家是卖化妆品的,他们没有办法对一个客户获得像淘宝这样对个人精确的刻划。所以他们需要把精确的数据碰在一起,产生对客户全面的画像。在这里面还有不同的场景,比如说一个大电商,一个小电商,小电商肯定是缺乏数据的。他可以通过一种机器学习的方式来帮助这家小电商迅速的把他的对客户的认识建立起来。还有一种情况是这种小电商的数据比较少,标记数据比较少会出现机器学习中冷启动的问题,他可以利用另外一家电商的数据把他弄起来。还有一个案例是癌症的。癌症是一个长尾病变,过去五十年癌症的治愈率只提升了8%,在所有的疑难杂症中是提升最少的,它的很大的原因是研究不同机构癌症的基因组样本非常的有限。如果说能够通过数据咖啡馆把这些数据汇聚到一起,我们一定能够加速癌症研究的技术突破。我们现在跟美国几家研究机构有一个愿景,在2020年前我们希望能够达到这样一个目标。在一天之内一个癌症患者来到医院能够完成全基因组测序,同时分析出致癌的基因,并且给出个性化的治疗方案。这有赖于疾病的治疗。这就是我们刚才说的,数据相逢但不相识。数据的价值一定是根据使用来决定的,没有使用不应该有数据的买卖,你先使用再定价再买卖。我们专门做了一个数据的定价机制。底层是多方安全技术。在多方的架构里面,数据的提供方是不会让你的分析师看到数据的。不同的提供方也不会让另外一方看到数据。分析师的代码里面也有他的知识产权。他也不会让数据的提供方看到他的代码。这样形成了一种隔离,形成了相逢,但不必相识。这我认为是代表了这一领域的最前沿的研究。这个研究我们跟清华大学的贺飞老师有合作,他在形式化这一块有很好的工作。第四,软硬兼施。就是软的硬的两手抓。首先,对大数据来说,一定要选择更好的硬件架构。体现在:计算、存储、互联。在计算这一块,首先要选择的是大小核,Brawny cores是大核,主要是至强服务器芯片,wimpy
cores是小核,主要是ARM服务器芯片。前几年大小核争得很厉害,但最近随着某些ARM服务器芯片厂商破产,大家都比较明白了,对于绝大多数大数据应用,大核肯定优于小核。大家可以关注一下两个人的论述,一个是Urs Holzle,谷歌基础设施的一把手,另一个是James Hamilton,亚马逊AWS的主要架构师。第二,异构计算。首先是集成异构多核,英特尔有一类服务器芯片,在一个芯片上同时集成了CPU和GPU,现在百度在研究利用这类芯片做深度学习的可能性。第二类是GPGPU,单独的GPU的卡来做,比如大家都在用的深度学习框架Caffe就有针对GPGPU的优化。类似的,英特尔也有Xeon
Phi,也就是世界排名第一超级计算机天河2号中用的芯片。目前来说,GPGPU和Phi都是插在PCIe插槽上的加速器,它们的加速性能都受到PCIe带宽的限制。明年Phi的新版本可以独立启动系统,因此PCIe的限制就不存在了,这对GPGPU是一种优势。另外,FPGA是现在用的比较多的一种方法,美国自然科学基金会最近的一个报告说对于深度学习,FPGA比GPGPU还更有效。还有一种是ASIP(ApplicationSpecific Instruction Processor),比如说NPU(Neural Processing Unit),现在很多神经网络的应用希望有专门的神经网络的芯片来做。第三,大数据跟高性能计算的典型区别是在于,大数据是一个数据密集型的,数据是存在内存里面的。所以一个很重要的架构上的变化就是让内存跟处理器能够更加靠近。比如说利用eDRAM,使得处理器跟内存之间有更大的缓存。或者把内存和处理器堆叠起来,获得更大的带宽。或者把处理器反过来放到内存里面去,叫Computingin Memory。对于存储而言,SSD到PCIe SSD到闪存存储,这一路的发展需要重构系统的软件栈。尤其是对于全闪存存储,文件系统可能不需要了,我可能直接让应用操作在闪存里面的数据。NVRAM是未来,因为数据不会丢失,所以像checkpointing这样的技术就不需要了。另外,数据静态保存和动态使用的状态统一了,所以不需要文件,不需要序列化和反序列化,整个系统栈会更浅更简单。在互联上,节点和节点之间的互联已经到40Gbps,未来100Gbps甚至更高,现在最新的技术叫Silicon photonics(硅光),可以轻松上到几百个Gbps,基于硅光也好,高速以太网也好,为了发挥内存计算的效用,需要更便宜、更高扩展性的RDMA。在选择了硬件架构之后,软件跟硬件架构需要做协同的优化。协同优化反映在几个方面:第一,针对硬件的特点,对软件栈进行优化,这里又有不同的做法。首先,我们要把硬件暴露给软件栈。大家现在玩Hadoop、Spark的话,都知道它们是跑在JVM上面的,你没有办法针对硬件的架构特征做优化。那你就需要通过一种方式来打破这个界限。比如英特尔尝试的NativeTask,把MapReduce里面排序的那部分通过Java Native Interface转到原生代码里做,针对系统缓存架构做优化,MapReduce的总体系统提升了30-50%。Spark最近创了Terasort的世界纪录,其中网络通讯这块也通过Java Native Interface转到原生的netty来做。还有,现在很多基于JAVA的大数据计算库,它都能够利用底层非常优化的线性代数原生库。其次,重新设计软件栈,像刚才说过的全闪存存储和NVRAM。甚至硬盘现在也IP化、对象存储化,传统的软件栈需要重新设计。还有一个场景是云化,Hadoop在云化,Spark也有了Databricks Cloud,但一旦云化了以后会带来很多的问题,比如Hadoop、HDFS他对于数据的本地性要求非常高,你一旦虚拟化了以后,数据在虚拟机中迁移,性能影响很大。所以VMWare贡献了HVE,Hadoop Virtual Extensions。云化另外要解决的问题是资源管理,YARN是第一步,但还有很多的研究问题没有解决。另外,把Hadoop和Spark置于Docker中运行是目前的一个热点。所有这些都能够帮助大数据的软件站针对硬件来优化。协同设计第二个大的方向是硬件可重构,尤其是英特尔现在推出的Rack
Architecture,你能够对一个机架进行重构,重构的基础是资源的池化和disaggregation。我可能是一个抽屉的全部是计算模块,一个抽屉全部是存储模块,一个抽屉是网络,一个抽屉是内存。我把资源池化。通过非常高速的硅光进行互联,可以把这些资源池重新进行划分,把它配置成针对不同应用需求的虚拟的服务器。这是一个非常重要的发展方向。在机架之上,是针对多数据中心的软件定义基础设施。软硬件架构协同优化的典型体现是大学习系统。它是机器学习算法与底层系统更好的配合。我这里列出了比较有名的学习系统,VW,GraphLab,DistBelief,Project Adam,Petuum。其中VW和ProjectAdam跟微软研究院相关(VW最早在雅虎研究院开始),GraphLab和Petuum是源自英特尔支持的CMU云计算科研中心,DistBelief是谷歌的,他们的特点都是把机器学习的算法和底层架构做更好的协同优化。除了DistBelief,其他都有开源。第五,多快好省。就是处理数据量多,更快,质量好,成本还省。实现多快好省的方式,第一个是软硬件的协同设计,刚才说了。下面说一下内存计算,它不是在技术栈的某一层的技术,在硬件平台层,要大内存,全闪存,用最新的NVRAM、用RDMA。在数据管理和存储层,要有内存数据库,更好的内存缓存,要有堆外的内存,内存文件系统。在计算处理层,要用新的内存计算的平台如Spark,或者在传统的数据库上面再堆一层内存计算的新层次,如In memory datagrids。在数据分析和可视化层,你要重新设计数据结构。这里面举了几个例子,分析,现在大数据的问题中有很大一部分是图问题,或者是复杂网络问题,这里面选了两个:GraphLab,一个是GraphChi,GraphChi把数据的结构进行了改变,使它能够流处理,最后在一台机器上能够达到十台、几十台集群能够达到的性能。这就是重新设计数据结构带来的好处。这个数据结构是不是能够支持可改性,也是很重要的。现在新的趋势就是在线的机器学习,就是你一边训练,一边做识别。这个过程中涉及到核心模型数据结构的可改变性,GraphChi就能够支持图结构的修改。另一个场景是可视化,Nanocube在16GB内存上能够对TB级的数据进行实时的处理,他采用了一种新的数据结构叫做in—memory
cube。所谓的原位(in-situ)分析和可视化,就是在内存原地进行分析和可视化,而无需做数据的转化和移动。另外一种实现多快好省的方式就是降低空间和时间的复杂度。降低空间复杂度就是把大数据变小。变小的方式有很多,比如说压缩(尤其是列式存储),又如缓存和多温度存储,把最重要的大数据找出来放在内存和闪存里面。又比如说采用稀疏的结构。亚马逊在做商品推荐的时候,用户以及他购买的商品矩阵是稀疏的,你通过稀疏的结构能够把空间复杂度下降。把大数据变小太重要了,最近Spark采取了一种Shuffle机制的改变,从基于hash的变成了基于sort的,极大地降低了内存使用,无论是terasort的世界纪录也好,还是在实际的应用场景,如大规模的广告分析logistics regression,都非常有用。另外一种是时间复杂度降低。比如,使用简单的模型。在机器学习发展中有一度大家觉得复杂的模型更好。随着大数据时代的来临,研究发现用简单的模型就可以了,只要你数据量足够多。这里面有一篇典型的文章,谷歌PeterNorvig他们写的,大概意思是:数据有一种不可名状的魔力,使得一个非常简单的模型(用web文本处理为例是n-gram),大量的数据喂进去以后,针对机器翻译就有了一个很大的质的提升。而这种简单的模型往往它的计算复杂度是比较低的。第二种是通过简单模型的组合。模型组合(ensemble)是一个机器学习的专业领域。我不想说的特别专业,我只给大家举一个例子,Netflix曾经举办过一个竞赛,你只要把我推荐有效性提升10%,我给你一百万美金。很多团队参加这个竞赛,但是每个团队都没有达到10%,后来团队与团队之间进行组合,最后达到了10%,拿到了一百万美金。IBMWatson事实上是一百多种模型的组合。如果每种模型是O(N2),它们的组合一定比一个O(N3)的复杂模型更快。还有一种是采样和近似,采样是传统统计方法,但在大数据里面也有用武之地,比如BlinkDB,只要能够容忍百分之几的误差,它在TB级数据上能够实现秒级的延迟。近似也是类似,我用更简单的数据结构来做一些精确度要求不是那么高的判断。比如说在互联网中经常有一个计算叫UV。如果你用近似算法,复杂度一下子就能够下来了。还有一个是降维和混合建模。数据在高维空间中、但数据点很稀疏,这也催生了一些降低复杂性的方法。比如混合建模,把适用于小数据规模的带参数模型与大数据规模的无参模型结合起来,先用后者在不同的低维空间建模,再由前者把这些模型综合起来,这种方法能够有效地解决稀疏性和计算量的问题。还有一种方法是针对高维数据进行降维,然后再对其施以更快的通用算法。所有这些方法能降低降低学习的复杂性。关于多快好省我最后要讲的就是分布式和并行化。典型的分布式优化是ACID到BASE的变化。ACID是传统的数据库里面要获得事务特性必须得做的。但是这个成本非常高。大家就改成了BASE,他只要最终是一致的。这也是蛮有意思的。ACID在英文里面是酸的意思,BASE英文里面是碱的意思,后者实现了并行的可能。对于迭代计算,有两种方法,Jacobi方法和Gauss-Seidel方法。对于Gauss-Seidel方法,当前迭代可以使用最新的数据,因此收敛一般会快,但需要异步通信,实现复杂。对于Jacobi方法,当前迭代一定是基于上一个迭代的数据,问题是,一旦分布式了以后,上一个迭代的数据是分布在很多不同的节点上。如果说你要完全的获得新的数据的话,你就需要等待所有的节点算完,把这些新的数据拿过来。这是不利于分布式的优化的。因为很多机器学习算法能够容忍模糊性,他能够基于当前节点上过时的数据(而不是要等其他节点最新的数据)进行计算,打破迭代之间数据的依赖。这样使很多节点并行计算,最终他还是能够收敛。这里,谷歌采用了参数服务器的方式,CMU既有参数服务器,也有更通用的SSP,Stale Synchronous Parallel。机器学习都会碰到几种并行,首先是数据并行,更复杂的是图并行,或者是模型的并行。模型的并行需要基于模型或图的机构做相应的数据划分、任务调度,原来比较火的是GraphLab,最近比较火的是Petuum,都是源自CMU。总体来说,并行化和分布式的重点就是减少通讯,大家做系统,一定会碰到这些问题,一旦把一个系统分布式化,你要解决缓存的问题、一致性的问题、本地性的问题,划分的问题、调度的问题,同步的问题,同步有BSP的全同步,GraphLab的异步,或SSP的半同步。在状态更新时,可以批量进行更新,或者个别进行更新的问题。通讯是可以传输全部数据,也可以只传输改变的数据。有一个教授叫IonStoica,他有一篇论文,关于Bit Torrent,也就是现在大家下载电影常用的一个协议,他就是传输变量,在Spark中得到使用。第六,天下三分。在最早的时候,人们都希望能够用一套架构把所有的问题处理。后面Michael Stonebraker提出我针对不同的计算需求提供不同的引擎,效果更好。所以,出现了数据和计算的分野。现在主流的数据类型有几种:第一,表,或者是KV。第二种是数组或者是矩阵。第三种是图。他们可以用不同的计算范式处理。表格最适合的是关系的函数。数组和矩阵是以线性代数为代表的复杂的分析。图是需要图计算。同样,我对计算范式也做了分类。首先把大的计算范式分成了计算图和图计算。对于计算图,图上每一个节点是一个计算。先完成这个计算,再通过不同的边到下一个阶段的计算。它只有数据依赖,没有计算依赖。而图计算,图上的每一个节点是数据,边代表他们之间计算的依赖。在计算图里面又分成两类,一类叫做批量的计算,他的典型特征是数据量太大了,数据不动,计算扔过来算。另一类是流式计算,是计算不动,数据恒动,计算分到每一个节点上,源源不断的数据流经这些节点,进行计算。批量计算里面又分几类,一类是MapReduce,二阶段,BSP(比如Pregel)是三阶段,还有DAG(有向无环图)和多迭代计算,比如Spark、Tez。流式计算里面也有不同类型,比如一次处理一个记录(record-at-a-time)还是mini-batch,Storm是前者,SparkStreaming是后者。不同的流式计算在容错上有不同实现,尤其是时钟语义和投递保证上。关于投递保证,假设我是一封信的话,最高的保 
 文章为作者独立观点,不代表微头条立场
作者:微信号:123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500

我要回帖

更多关于 忆往昔峥嵘岁月下句 的文章

 

随机推荐