電腦效能應用與安全研究室 Performance, Applications and Security Lab


我們的研究範圍很廣,從嵌入式系統、手機應用、一直到雲端計算、商務應用、資訊安全都有做。
我們的合作研究夥伴很多,包括聯發科、IBM、中研院、資策會,還有和台大、清大、交大的教授合組研發團隊
,包括高階應用處理器架構研究、虛擬化技術、異質計算、系統軟體等重要技術的研究與創新,我們很關切台灣人才與產業的未來。

2018年4月1日 星期日

眾說紛紜的AI

昨天(3/31)參加一整天的AI論壇,遇到很多內行人和外行人。主辦單位的目的在於橋接業界和學術界,連哄帶騙把許多AI專家,以及業界與政府的重量人士找來,可謂用心良苦,不過在裡頭坐上一整天也真是辛苦,好像一個人去參加一場長達一天的婚宴,必須一邊跟同桌人士哈拉,一邊「欣賞」舞台上的表演...

我因為前晚熬夜寫報告,昨天在會場頭痛了一整天,一直抽空閉目養神,不是偷懶,是頭痛到不行。不過還是得完成主辦單位交付的任務:花費二個多小時跟15位希望引進(或是正在從事)AI的業界/政府人士談話,瞭解他們的問題,個別給出一些建議,最後還要上台給三分鐘的心得報告。

就當作是做功德吧?因為AI紅透半邊天,迫不及待想引進AI的人太多,平常都有一些個案來找我談,但多半是想找一些有即戰力的技術或計畫,在最短時間可以幫到忙,而真的願意花大手筆做研發的倒是少之又少,大部份在談完之後,摸摸鼻子走了。昨天在最短時間內一次談了15位,也很不錯,只希望對方不要覺得這傢伙沒什麼真功夫,幫不了忙。

昨天最後上台報告時,我說我只是配角中的配角,各位如果開始建置AI系統,就會發現系統端的疑難雜症多得不得了,解決這些系統性問題的辛苦可能遠多於機器學習的部份,這時候才可能會需要我這種配角上場救援。

我沒有大聲說的是,反之,如果對AI沒有起碼的瞭解,分不清楚專家系統、機器學習、類神經網路的差異,可能不要貿然找那些做AI研究的大師,除非這些大師很喜歡做功德,像孔祥重院士偕同陳昇瑋博士那樣願意帶著一群學生「下海」,進到製造業的場域去動手做。不過,孔陳兩位大師現在也不可能親自去幫您的忙,想多認識AI的業界人士,可以繳學費去參加他們辦的人工智慧學校。

我希望人工智慧學校能補足業界的一些人才缺口。好比當年個人電腦出現後,很多中小企業開始導入試算表、文書處理,或是寫一些簡單的程式來做自動控制,需要很多人力來做,而我們當年念高中、大學時靠著自學就可以去做這些事,不一定要念資訊系,這也是目前產業AI化的重要途徑。

但是在AI產業化的方面,需要較長遠的規劃和耕耘。如果要在新興的AI產業上有足夠的競爭力,應該不是膚淺的作為就能做到,因此我認為AI產業化與產業AI化兩大方向雖然相關,但應該劃分和解釋清楚,不宜混雜在一起談,否則容易失焦,浪費彼此時間。

不過我還是跟AI的專家朋友說,昨天這場就算是您在做功德,有些參與的人士很少有機會跟AI大師們對談,有些以為AI很好做,各位大師親自出馬釐清真相,也是莫大功德。

例如我這邊在頭痛的情況下勉力為之,應該算是盡到公民的責任,與業界人士大致交流如下:

  1. 遇到一群在政府做水利規劃的研究員與顧問公司,一起思考如何運用AI技術,或許他們更了解AI後,挑戰一些可行的目標,不要太好高鶩遠,可以少浪費一些民脂民膏;
  2. 遇到一群醫院主管,和我先前遇過的醫界人士一樣,已經開始導入AI,面對的標籤化資料蒐集困難的關卡,但其實國內醫療界素質頗高,有機會結合AI做出新產業,但是要拿得出足夠資源;
  3. 遇到立法委員,跟她談我常講的教育界的問題,也希望她幫忙看緊人民的荷包,不讓政府以導入AI為名胡亂撒錢買設備;
  4. 遇到不恥下問技術問題的電子業大廠董事長,有點意外,還是想辦法用自然語言釋疑;
  5. 遇到急於引進AI的製造業小廠,建議要找上下游業者合縱連橫打群架,不一定要自己做;
  6. 遇到想引進AI幫忙自動產出精華影片的媒體,建議這種國外強到不行的應用,不要貿然自己研發,因為這類軟體遲早會普及,除非你有國外沒有的利基,否則不容易做出比人家好的東西。

總之,千萬不要一窩蜂,無論各位要走產業AI化還是AI產業化的道路,最好先搞清楚狀況,走適合自己的道路。

學生也是,資訊系學生可以去幫產業AI化,但是必須願意跨足產業,例如農業、醫療、製造業,不是宅在房間裡就行的,其他科系的學生也可以修一些AI的課,嘗試走這條路;資訊系學生想走AI產業化的道路,要知道AI系統錯綜複雜,要在此產業競爭,往往不是只懂機器學習的一招半式就行的。

2018年3月29日 星期四

NVIDIA的高效能AI旗艦機DGX-2的賣點

高效能AI受到重視,NVIDIA剛發表專為AI打造的DGX-2,正好做為明天到臺大醫院演講以及下次上課的教案。

DGX-2幾乎是以暴力法解決我們從HGX-1上面看到的一些問題,沒有太大的意外。姑且假裝我是NVIDIA的銷售人員,來述說DGX-2的厲害之處:

- 一台機器8張GPU不夠嗎? 沒問題,一台放進16張。

- 每張GPU只有16GB記憶體太少? 那就加倍給你32GB。

- 這麼多張GPU在交換資料時不會大塞車嗎? 啊,您真是內行人,沒關係,我們用12個NVSwitches打造一秒可讓這些GPU互傳4TB的超高速網路,看您有多少資料要傳都行!

- 嫌一台16張GPU還是不夠力嗎? 太好了,請多買幾台! 每台DGX-2上有8條高速網路通道,比DGX-1還多一倍,而且是Infiniband/Ethernet兩用的喔,不用擔心多台機器之間會塞車了!

- 您說即使GPU很強,CPU不夠力也是枉然? 不好意思,我們特別選了Intel最快的Xeon Platinum 系列,夠誠意了吧? (吐槽技術人員: GPU都加倍了,為什麼只放兩顆CPU,不給四顆呢? 機器都這麼貴了,省這幹嘛? 是做不出來嗎?)

- 不費話,給您兩倍的主記憶體... 雖然現在記憶體很貴,不過貴公司應該負擔得起1.5TB的成本,不過只是60萬台幣上下而已。

- 機器這麼強,硬碟存取的速度跟得上嗎? 哎呀,我們早就不用硬碟,直接給您超快的NVMe SSD陣列,讓你放常用的30TB資料,不夠的話,可以增加到60TB喔。

- 當然,做大數據的您,應該會嫌這60TB太小,不過剛剛才跟您說過每台機器上有8條高速網路通道,請以此連接您資料中心的高速儲存系統,相信做大數據的貴公司,應該有無比強大的儲存系統,對嗎?

- 關於價錢嘛,不貴啦,這台如此強大,比前代賣台幣450萬元的DGX-1快十倍,但是定價不到台幣1200萬元,真的是佛心來著... 提醒您,我們的GPU都賣到缺貨,趕快下訂,買到賺到喔!

- 喔,對了,不要小看這台機器,體積有點大,而且很會吃電,請準備好10000瓦的電力來供養它,最好預先提撥未來幾年的電費...

但是NVIDIA黃總裁和旗下的銷售人員不會告訴你,Google的TPU還有其他公司針對深度學習所研發的晶片,可能比GPU的效率高出十倍以上,Intel也正在急起直追。

不過我想,NVIDIA在市場上,還會領先一陣子。

對了,非NVIDIA經銷商的我,必須提醒大家,比DGX-1快十倍的說法,指的是某個測試程式。以極速(peak performance)來論,DGX-2約略是DGX-1的兩倍,怎麼會高十倍呢? 這就給大家自己想了...

參考資料:

[1] https://www.anandtech.com/show/12581/nvidia-develops-nvlink-switch-nvswitch-18-ports-for-dgx2-more
[2] https://www.inside.com.tw/2018/03/28/jensen-huang-unveils-nvidia-dgx-2-gpu-supercomputer-and-cards
[3] https://news.xfastest.com/nvidia/47580/nvidia-has-announced-dgx-2-and-quadro-gv100/

2018年3月28日 星期三

以優化Tensorflow作為系統研究的教案

前天在課上用TensorFlow Performance Guide [1]為案例,解說「人工智慧」與「系統研究」的關係,嘗試啟發學生的視野。

很多人會用TensorFlow開發深度學習應用,但我不知道有多少人真正在意TensorFlow應用的優化。如果只是分析「小的大數據」,或是不在乎多等幾天,那麼就不用看接下來的長篇大論了。

“This guide contains a collection of best practices for optimizing TensorFlow code.”

首先要知道什麼是best practices? 根據網路字典,best practices是"commercial or professional procedures that are accepted or prescribed as being correct or most effective”,換句話說,在各種商業或專業考量下,最為眾人所接受的,能夠最有效解決實際問題的招數。

可是,要看懂這裡所提到的best practices,恐怕沒那麼簡單,需要懂得系統軟體與計算機結構的實務。不,資工系的同學們,請不要高興得太早,我講的是「實務」,不是應付考試的那種功夫。

業界在談論best practices的時候,通常是搔到癢處、點到為止,提出大原則,但不解說幕後的學理依據和細節,也不提供完整的實驗數據。其目的在告訴大眾(潛在客戶): 我們有能力做這些別人不大會做的工作,看得懂最好,知道我們很厲害;看不懂也沒關係,反正找我們就對了,只要付了錢我們就幫你 :)

好吧,我們就來看看,為了協助TensorFlow使用者優化應用, Google官網建議了哪些best practices呢?

洋洋灑灑寫了很多,分了三大類:
  1. General best practices covers topics that are common across a variety of model types and hardware. 泛用招數
  2. Optimizing for GPU details tips specifically relevant to GPUs. GPU專屬招數
  3. Optimizing for CPU details CPU specific information.CPU限定招數
第一類提出很多應用和硬體都可以用到的招數,其中又分為五小類:
  • Input pipeline optimizations解決資料取得與前處理管線的瓶頸
  • Data formats降低資料格式轉換的時間
  • Common fused Ops使用融合運算節省運算成本
  • RNN PerformanceRNN專屬的效能因素
  • Building and installing from source編譯與安裝的效能選項
光是講第一小類,就花了我大半小時。各位要知道,一個完整的深度學習系統不是只有類神經網路,還包括了資料的取得和前處理。如果是分散式系統,資料取得和前處理會更加複雜,也可能造成效能的瓶頸,因此這段對實際運作很重要,但是往往被忽略。

剛好前一陣子幫業界朋友分析他們手頭上TensorFlow系統效能問題,瓶頸就出在前端的Input pipeline。各位不要笑,如果您的手頭上有一台裝有16張NVIDIA V100 GPU卡的HGX-1高效能伺服器,前處理的難度會高出許多... 如何將影像檔案有效率地從高速網路或高速磁碟陣列所構成的儲存系統中預先提出來放置在記憶體中?如何有效率地用兩顆CPU晶片上的40個處理機核心來做前處理? 如何有效率地用將CPU處理後的Tensors送到16張GPU卡的記憶體上?

一般缺乏軟硬兼備素養的工程師,往往毫無頭緒。我在當時給了一些best practices的建議,請工程師做一個實驗,把資料送進一個超簡單、超快的model,看看速度會不會變快?如果不變快的話,就表示資料取得和前處理可能是瓶頸。一周之後,工程師回報說只變快一點點,我請他做進一步的測試和估算,跟這個Performance Guide講的幾乎相同:

Determining if the input pipeline is the bottleneck can be complicated. One of the most straightforward methods is to reduce the model to a single operation (trivial model) after the input pipeline and measure the examples per second. If the difference in examples per second for the full model and the trivial model is minimal then the input pipeline is likely a bottleneck. 
  • Check if a GPU is underutilized by running nvidia-smi -l 2. If GPU utilization is not approaching 80-100%, then the input pipeline may be the bottleneck.使用效能監測工具確定GPU忙還是不忙?
  • Generate a timeline and look for large blocks of white space (waiting). An example of generating a timeline exists as part of the XLA JIT tutorial.使用工具畫出事件在時間軸上的分佈圖,是否有空窗期?
  • Check CPU usage. It is possible to have an optimized input pipeline and lack the CPU cycles to process the pipeline.確定CPU忙還是不忙?
  • Estimate the throughput needed and verify the disk used is capable of that level of throughput. Some cloud solutions have network attached disks that start as low as 50 MB/sec, which is slower than spinning disks (150 MB/sec), SATA SSDs (500 MB/sec), and PCIe SSDs (2,000+ MB/sec). 算算網路或磁碟夠不夠快?
以上所述,對於一個受過系統研究訓練的工程師,應該一點都不會很難吧?即使沒看過這篇,也應該可以想出類似的招數,因此不會「卡住」,可能一下子就搞清楚問題所在。反之,一個菜鳥工程師,如果沒有人帶,又不會自己看懂人家寫的招數,那要如何解決問題?加班加到爆肝可能都沒有用。

接下來我又花了一個多小時解說後面列舉的一些招數,其實都只是將我們(系統研究老鳥們)司空見慣的老招數應用在TensorFlow上,看起來沒什麼了不起,但是菜鳥們就是不會。做理論研究的學者可能覺得這些沒學問、沒創新,但要做深度的系統研究,不能沒有這些功夫。

接下來,就是要學生做Lab,練習解決一些小問題。動手做很重要,可以幫助學生把看來得知識內化成經驗和學問。動手做的過程中,不是按表操作,最好是不斷思考為何如此,如果能發現新新問題和發明新招數,那就更好了。

我想再次強調,培育系統架構師並不容易,一流的系統架構師需要會做系統研究,往往具備Ph.D.等級的研究能力,對於前瞻系統研發扮演舉足輕重的角色,不過台灣很少有這樣的人才,因為多數代工產業注重按表操作,給工程師發揮的空間不大。如果想公司想轉型,提升其系統軟硬整合的能力,最好是找到夠格的系統架構師。

這堂課以及後續課程希望讓學生們能體會以下概念:
  1. 如何從「系統研究」的角度改善「人工智慧」效能
  2. 做實務性的系統研究,需要解決的議題很多,需要好方法
  3. Best practices是前人解題的心得,多看會有幫助
  4. 學這些招數,要知其然,更要知其所以然才好
  5. 動手做是知識內化成經驗和學問的方法之一
  6. 寫報告(論文)是進一步整理心得、發想創意的好方法
  7. 要博聞,但不要強記招數,要會活用
講到要會活用招術,我自己有兩個作法:
  • 搞懂之後就把招數忘了吧,就像金庸小說中的「獨孤九劍」和「太極劍」,達到無招勝有招的境界。(其實是我記憶力不好,不得不如此做 :))
  • 不斷挑戰新的問題,看看是否能夠練到「乾坤大挪移」的境界: 看到人家的招術,就能夠瞬間理解,收為己用。(其實是電腦科技日新月異,不得不如此做 :))
多虧了這兩把刷子,我能夠一路從超級電腦、電子商務、嵌入式系統、智慧手機、雲端服務、物聯網、大數據,做到今天的深度學習系統和人工智慧,至少還能跟得上時代的脈動,研究如何將當紅的應用在最新的系統架構上做優化。

[1] Performance Guide | TensorFlow. https://www.tensorflow.org/performance/performance_guide