本次講座是清華大資料產業聯合會”技術前沿”系列講座的第一講,主講人為英特爾(中國)研究院院長吳甘沙。
吳甘沙院長從大資料技術前沿的十個問題入手,對大資料產業進行了深度解析。講座分為三部分:
– 領先的大資料科研單位和企業正在如何利用大資料
– 解決大量的資料前提下,優化實時計算技術
– 怎樣通過資料採集與分析做出更好、更精確的決策支援
演講正文:
謝謝大家那麼冷從四面八方的趕過來。另外,也是誠惶誠恐,剛才知道有很多清華非常著名的教授來參加,讓我覺得壓力山大。今天我只是一個非常個人的對大資料的一個認識。這十個前沿不代表是一個非常準確的定義。大家回去不用把這個分類作為自己研究的一個參考。而且今天我這個演講聚焦在技術上,別講太多大資料的理念、思維,甚至是應用技術都不講了。所以今天我主要是講核心的技術。也許大家聽起來會有一點枯燥,現在說乾貨是好事,但是有點太乾了。涉及到的名詞和特定的技術領域,這不代表我個人都很懂。在很多地方我都是一知半解。我希望把這個作為互動式的,大家有問題可以隨時打斷我。
首先我們公司要求要有一些免責方面的要求,個人也是免責,今天講的是我個人的認識。
現在說大資料,我希望大家做研究的有一種思維方式,在美國有一個未來研究院的發起人,他叫阿馬拉,他提到一個艾莫拉法則,人們往往會高估技術的短期影響力,而低估技術的長期影響力。技術的長期影響力代表著技術的積累效應。我們現在常常用指數效應來說明,在現在這個指數時代,指數效應或者指數的顛覆性效應是一種新的常態。我們經常在大資料的領域聽說,有人說我們現在的資料量非常大,最近兩年產生的資料量相當於人類歷史上產生的資料量總和的90%。有人說,最近一天產生的資料量相當於人類文明開始到2003年這數萬年人類產生資料量的總和。IDC說,現在人類產生的資料總量每兩年翻一番。所有這些都說了一個事情:指數的效應。
看一下這個曲線,在經歷很長時間的緩慢增長之後,突然在一個點它拐頭向上,產生了爆炸式的增長。在這個時間點,T如果是X的話,T 1就是X的平方。當X很大的時候,它在任何一個週期都會把前一個週期遠遠的拋離在深厚。
大家一定聽過棋盤和麥粒的故事,8乘8的棋格,第一格放1粒,第二格放2粒,到後面積累就會爆發式的增長,到一個國家承受不了的程度。
摩爾定律,這張泛黃的紙片是當時英特爾的聯合創始人之一戈登·摩爾(Gordon Moore)寫下的紙片,他推動了現在社會的飛輪效應。每過18個月,電晶體數翻一番,它進一步帶來了一系列指數式的鏈式反應。處理器的效能也翻一番,成本折半,功耗折半。同時,在一些臨近的領域也觸發了指數效應。比如說以氧化鐵為主要承載物的儲存,也有類似的指數效應。比如說主幹網的頻寬甚至每八個月都會翻一番。甚至是每美元能夠買到的數位相機的畫素的數目也呈現了指數級的效應。所有這些帶來了資料的摩爾定律。
所以我一直一個論點是,在這個社會,大資料是我們的蛋白質。蛋白質是我們生命活動的基礎,也是我們生命活動主要承載者,它對於我們這樣一個社會實在是太重要了。我們形容資料是資產、是原油、是原材料、是貨幣,無論哪種形容的方法都不過分。因為它關係到70億人資料化的生存,以及2020年500億個互聯裝置的感知、互聯和智慧。所有這些乘起來產生了2020年35個ZB的資料。在2020年一年會產生35個ZB的資料。一個ZB相當於一千個EB,谷歌已經把網際網路吸納在他的資料儲存中了。他的資料的儲存量差不多在個位數的EB或者幾十個EB之間。2020年一年就會產生一千個谷歌的資料。這是一個多大的量?當然我們不能只是強調資料量多大。而是說在這個資料裡面我們能夠提取出什麼樣的意義來。提取的過程就是這樣一個函式,F(資料,T)。
這麼大量的資料給我們帶來了什麼樣的挑戰。全集大於取樣。傳統的資料分析是能夠取樣的,他能夠抓到一定的統計的資料特徵。但是大資料要求的是傾聽每一個個體的聲音。他不希望把一些個體的東西變成噪聲過濾掉。所以這是帶來的第一個挑戰。
第二個挑戰是實時性。資料的價值是跟它的壽命成反比。當資料剛剛產生的時候,它的價值是最大的,尤其是個性化的價值是最大的。隨著時間的推移,它會蛻變到只有幾何的價值。我們需要實時處理,並且把這個實時的洞察跟我們長期積累下來的知識進行融合,變成之前或萬物皆明的全時的智慧,這是第二個挑戰。
第三個挑戰是F,我們的分析方法是不是能夠做到見微,又能夠做到知著。同時,也能夠理解每一個社會執行的規律。這對F要求非常高。第四,他反映了人與機器的關係,或者人與工具的關係。我們說希望資料能夠說人話,資料的價值是人能夠理解,並且能夠執行的。
很多大資料的技術基本上是為了解決這四個問題。我今天要講的十個技術前沿,基本上都落到剛才這四個需求裡。但是我又把它分成三大類:
第一大類,解決資料的問題。
第二大類,解決大量的資料前提下,如何能夠實時的計算問題。
第三大類,我的分析怎麼能夠提供更好的、更精確的價值的問題。
所以我下面會根據這十個技術前沿,跟大家介紹一下現在我們領先的大資料的科研單位以及企業都在做什麼樣的事情。
第一、膨脹的宇宙
IDC創造一個名詞叫做DATA UNIVERS——資料宇宙。它的膨脹速度是非常快的。現在我們的硬碟是TB,到PB到EB到ZB,甚至再到下一步DBMS。在這一條時間線上面,技術的演進,最早當然是TB,就是傳統的關係型資料庫以及在其基礎上延伸出來的資料倉儲。它基本上是能夠控制住TB級的資料。隨著資料量的增大,MPP這樣一種技術使得它的資料庫技術進一步的演進到接近於PB的規模。但是它還是碰到了瓶頸,於是,NoSQL的資料庫就出現了,NoSQL的資料庫有兩個特點:第一,無模式的。第二,它放棄了對於精確事物特性的追求,放棄了原子性、隔離等等方面的需求。這樣使得它的擴充套件效能夠得到提升。所以大家可以看到沿著這條路線,很快使得我們對於資料的儲存能力達到了PB的級別。
在這條路線延續的同時,檔案系統也在延續,檔案系統對於非結構化的資料具有更好的儲存能力。所以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。
新的儲存的介質又出現了,現在是發展最快的一直,因為Flash的吞吐量、延遲都要比機械的氧化鐵的硬碟更快。
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就是希望把資料的邏輯打破。
邁克是一個資料界的大師,他做這個東西我們很相信是代表著技術發展的方向,他根據某些條件查詢出來幾個選項,我們怎麼知道他們這幾個選項是代表著同一個東西呢?他開發了一種叫Data timer的東西,他點到不同的裡面,發現不同的線索,首先這些線索的網站是不一樣的,他發現這些資料不是一樣的資料。同時,他發現的地址又是一樣的,都是這樣一個地方。第一步他要發現這兩個是同樣的地址,但是他又發現聯絡的電話是不一樣的。這對我們帶來了很多的困擾。
他又去對資料進一步的發掘,發現資料描述的主體有很多特徵,在這些特徵上面,他又發現一些相似的特性。他通過這樣一種證據不斷的疊加,他來發現資料與資料之間的關聯性。
怎麼通過自動化的學習方式,怎麼能夠發現資料中的規律,尤其是文字這樣一種典型的非結構化資料,怎麼能夠發現規律。其次怎麼能夠發現重要的實體。本體論裡面一個重要的概念,反應我們一個描述物件的屬性的單位就是entity,我們怎麼找到這些entity,這一切是希望能夠通過自動化的學習來完成。而且希望能夠從半結構化或者多結構化的資料進一步推展到完全非結構化的資料。
你提煉出來的這些資料和原資料,需要有一種更好的組織方式。現在一個冉冉升起的組織的工具叫做Apache的UIMA。如果這個大家比較陌生,大家一定聽說過IBM的Watson。前兩年在美國的一個類似於開心辭典的節目,一個計算機戰勝了兩個非常高智商的人。在它的資訊的組織就是通過Apache的UIMA來組織,它的組織能夠使後期的分析最簡化。這個是解決巴別之難的現在的主要研究工作。
第三、資料有價
資料是位元,位元是可以低成本無限的複製,一旦一個資料或者一個東西失去了稀缺性以後,它的價值就是零了。所以,資料有價首先要保證你要定一些資料的權利。在這樣一些權利的指導下,你要保證資料的安全。大資料的安全本身又分為大資料系統的安全、資料本身的安全,以及資料使用當中的安全。最後是資料怎麼來進行定價。我在第三個前沿裡面希望能夠給大家分析一下這一塊主要的研究成果。
第一,資料權利的定義。資料我認為有五個基本權利:第一,擁有權,這個資料是屬於誰的,這個擁有權是不含糊的。就像我們現在擁有的其他的物理的財產一樣,擁有權可能會出現變更,比如說離婚了,這個權利怎麼分割,人死了怎麼來傳承。這裡面都涉及到資料擁有權的研究。第二,資料隱私權,我什麼東西不能給你看。第三,資料許可權,我什麼東西可以給你看,今天給你看了明天不能給你看。第四,資料審批權,我按照這樣一個規範許可給你以後,需要有一種機制審計,確保你是按照這種規範、按照這種許可的條例使用我的資料。第五,資料分紅權,對於新產品的資料價值,我有沒有可能得到分紅?這是我定義的資料幾種權利。
下面就是資料的安全問題,首先我怎麼保證一個大資料的系統安全,比如說Hadoop,慢慢加入了基於Kerberos的使用者和服務鑑權。HDFS檔案和資料塊許可權控制。未來是高度分佈、去中心化場景下的安全,資料使用實體之間並不需要存在信任。不存在單點可控制的機制。最典型的就是類似於比特幣和Ripple的獲取。比如說block chain,它是對資料最價值的獲取。
對資料的安全,第一個方法是加密,Hadoop新的功能就是可以對資料進行加密。第二,訪問控制。Apache Accumulo,它也是一個開源資料庫。在Hbase裡面也在加入類似訪問控制的安全。
動態資料的安全,這個資料只有你能訪問,我不能訪問。這種靜態控制不能防止一種攻擊,你有權訪問了,你把資料取出來了又給了我。因為他不存在一種動態的進行跟蹤的機制。所以現在有對資料的移動進行動態的審計。
個人對資料的控制。現在我們個人對自己的資料有了一定的控制許可權,比如說Do Not Track,現在瀏覽器都有這種功能,如果你不把它開啟,各種各樣的網際網路服務商就可以根據你的Cookie不斷的跟蹤你,你在京東上看中一雙鞋,你到淘寶上它就會一直跟蹤你。你開啟Do Not 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裡面進行計算的時候,才變成明文。
另外一個審計和定價的問題。系統安全了,資料安全了,使用安全了,我可能要進行一個審計。所謂審計就是,我給出一個資料使用的條款,你是不是按照這樣一個條款去使用我的資料了。這裡第一步要做的就是你把這個條款形式化,你要通過一種specification language來描述,他要形式化,形式化的目的就是希望能夠讓非專業人員來書寫這些條款。比如說這個企業法務人員,企業的資料要給另外一個企業用的話,這個法務人員要寫出來這些條款。根據使用規範,對資料的使用要進行審計,可能是靜態的或者是動態的。
定價,任何一個財產的定價,一個是根據效用,第二個是稀缺性。所謂效用就是你這個資料被使用的多頻繁,他對結果的影響有多大,根據這樣一種效果,我來判斷各方資料的貢獻,從而進行定價。稀缺性是根據資料價值的密度以及歷史的價格的稀缺性進行定價。剛才的研究我們做了一個技術叫資料咖啡館。咖啡館是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。
在儲存互聯的架構選擇上,第一個是大記憶體的伺服器,現在已經是主流。現在大家去做大資料,你買的伺服器如果是小於一百GB的記憶體,基本上是不能用。甚至現在微軟的Azure雲裡面,他提供的虛擬機器,不是物理機,最高能夠帶400多個GB的記憶體。當然記憶體計算需要解決容錯的問題,比如Spark的lineage,還有傳統的checkpoint,多資料冗餘,基於日誌的容錯機制等。
對於儲存而言,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化、物件儲存化,傳統的軟體棧需要重新設計。
再者,一體機。我現在賣東西不是隻賣給你伺服器,或者只賣給你軟體,而把軟體、硬體打包成一體機來賣。現在最有名的一體機就是HAP的HANA,這個一體機單英特爾就有十幾個工程師幫助他進行優化,比如它的B+樹是針對快取記憶體優化的,它能用SSE對資料進行流式的、線上的壓縮和解壓縮。
還有一個場景是雲化,Hadoop在雲化,Spark也有了Databricks Cloud,但一旦雲化了以後會帶來很多的問題,比如Hadoop、HDFS他對於資料的本地性要求非常高,你一旦虛擬化了以後,資料在虛擬機器中遷移,效能影響很大。所以VMWare貢獻了HVE,Hadoop Virtual Extensions。雲化另外要解決的問題是資源管理,YARN是第一步,但還有很多的研究問題沒有解決。另外,把Hadoop和Spark置於Docker中執行是目前的一個熱點。
所有這些都能夠幫助大資料的軟體站針對硬體來優化。
協同設計第二個大的方向是硬體可重構,尤其是英特爾現在推出的Rack  Scale  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  data  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是後者。不同的流式計算在容錯上有不同實現,尤其是時鐘語義和投遞保證上。關於投遞保證,假設我是一封信的話,最高的保證是一定能夠到達接受者有且只有一次,而較低的保證是至少到達一次。另外,流式計算可以是做簡單計算,比如基於時間窗的統計,或更復雜的流式線上學習。
程式設計模型這一塊,有資料並行,有流式計算的任務並行,還有圖並行。現在往往要求圖結構支援關係操作,比如跟一張表來join,這是現在很多圖計算程式設計模型新加入的。還有,最新出來一種概率程式設計模型,針對概率圖的機器學習是更好的程式設計模型。
在大資料領域最近也在推事件驅動程式設計模型。一個非常火的正規化叫reactive正規化。最早在Erlang裡,叫Actor模式,現在在Scala  Akka語言裡面,有更好的實現,他在針對非同步的處理邏輯的時候,有更好的可擴充套件性。
第七,融合。既然分了,就有合。
融合一直在發生。Big  Dawg是英特爾在MIT最近支援的研究工作。他提出了普適的程式設計模型,一種叫做BQL的語言,他支援關係和線性代數、複雜資料模型、迭代計算、平行計算。
Twitter Summingbird是在程式設計介面層面融合,同時支援批量(MapReduce, Spark)和流式(Storm)的。
Lambda架構則是在應用框架層面的融合,把實時和批量結合起來,兩者之間加入增量計算,同時批量那邊加入快取。
Spark則是在實現框架層面的融合。
最後微軟的REEF則是通過資源管理層,如YARN,來實現多計算模型的融合。
我拿Spark做為一個案例,它的BDAS軟體棧底層是HDFS加上Tachyon記憶體檔案系統,接著是Spark記憶體計算框架加上Velox的模型管理。在上面支援各種不同的計算正規化,如Spark Streaming的流計算,SparkSQL的互動查詢,GraphX的圖計算,MLlib的機器學習等。由於SparkSQL的核心資料結構SchemaRDD起到基礎性的作用,其他幾個計算正規化可能會建築在SparkSQL之上。
有了這個BDAS以後,大家可以想像處理不同場景,比如說流查詢,我把Spark Stremaing的流式和SparkSQL代表的資料倉儲整合在一起;實時加上批量,SparkStreaming是實時,Spark本身是批量,實時加上歷史資料分析獲得全時洞察;Spark Streaming的流處理加上MLlib的機器學習,實現線上學習。又比如說圖流水線,傳統上先要對圖資料進行處理,進行ETL,中間進行圖計算,最後後處理。傳統的圖計算引起只能做中間這部分,前後還得靠MapReduce去做。而在Spark之上,可以一條流水線做完。最後,SparkSQL和MLlib可以有機結合,把互動分析和機器學習揉在一起。
在其他方面,融合也在發生:
比如資料管理和資料分析的融合,在傳統的資料庫中,有兩類處理:一類叫做OLTP,做資料管理,一類叫做OLAP,做資料分析。兩者基於不同的資料格式,之間需要ETL。現在的趨勢是兩者融合,在一套資料上計算。
MPP和Hadoop各有優勢,現在也在融合。
就連高效能運算或超算也在跟大資料融合,前者原來是計算密集的,以模擬為核心的,現在也有很多資料密集的應用,重心也從模擬轉移到資料分析,出現了high performance data analysis和data intensivesupercomputing等新的子領域。

自 資料派&大資料文摘