天天看點

從Caffe開始深度學習實戰,徒手hack代碼樂趣更多

阿裡雲工程師蔔居接受csdn記者專訪,介紹了他在深度學習領域的實踐經驗和成長心得,以及完成caffe著作背後的原因和故事。

蔔居認為,深度學習具備強大的表達能力和靈活多變的模型結構,并在各種硬體加速方案的支撐下不斷成熟,而caffe具有高效的c++/cuda實作、matlab/python接口、獨特的網絡描述方式、清晰的代碼架構等優勢,徒手hack代碼的樂趣更多,同時caffe框代碼于穩定,掌握了閱讀技巧可以事半功倍,因而可以作為初學者學習的第一個深度學習架構,由此逐漸深入了解使用c++/cuda代碼實作深度學習的計算過程。

談到新書《深度學習—21天實戰caffe》,蔔居表示,這是一本透過源碼解讀深度學習的書,也是一本注重“實戰”的書。讀者可以從本書中學習caffe設計模式、程式設計技巧,以及深度學習最新的進展和生産環境批量部署等内容。而書中的一些思考題需要深入實踐和思考之後才能得到答案,這可以讓讀者養成獨立思考的習慣,進而更加從容地面對實際問題。

此外,對于不同的硬體加速方案,蔔居認為,深度學習本身在不斷演進,沒有哪個計算架構能夠一勞永逸,得到某方面優勢會喪失另一部分特性,最終起決定作用的仍然是應用需求,例如批量離線處理更适合利cpu/gpu叢集的規模優勢,而線上應用、移動端應用更适合利用fpga/asic的低功耗、低延遲特性。

以下為采訪實錄:

蔔居與深度學習

csdn:請介紹您自己,您是如何與深度學習結緣的,它的哪些特質吸引您?

蔔居:大家好,我部落格筆名是蔔居(出自《楚辭》),在阿裡花名是以亭(《鏡花緣》探花唐敖之字),真名趙永科,2014年畢業于中國科學院大學,目前就職于阿裡雲計算有限公司高性能計算團隊,從事cpu/gpu/fpga上的計算優化工作。

我最早接觸“神經網絡”、“深度學習”還是在中科院微波成像實驗室從事現代信号處理工作期間,通過閱讀simon heykin的大部頭著作《adaptive filter theory》《neural networks : a comprehensive foundation》,初次了解其設計理念,但當時僅僅停留在一些抽象理論上,一直希望有機會将它們應用到實際項目中。

直到2014年我到(當時我們團隊的名稱)阿裡巴巴集團核心系統部專用計算組實習,看到周圍同僚在用caffe做深度學習算法優化,而且已經有很多内部項目(即後來的拍立淘、ocr等)在使用該架構。當時首先被名字吸引:“快速特征植入的卷積結構”(convolutional architecture for fast feature embedding),諧音“咖啡”。當時的caffe還隻是雛形,我看了一遍代碼後深深被其設計所吸引,高效的c++/cuda實作、matlab/python接口、獨特的網絡描述方式、清晰的代碼架構……當時對深度學習的認識一下子從教科書上的抽象概念落地到實實在在的代碼實作,甚至對其稍作修改就可以應用于線上生産環境,直接面向廣大使用者!也是從那個時候,我開始關注每年的ilsvrc比賽,看到計算機視覺領域逐漸接受深度學習方法,并随後在語音識别、自然語言處理取得巨大成功,意識到這次深度學習高潮不是泡沫,而是逐漸邁向成熟的标志。

現在,深度學習強大的表達能力、靈活多變的模型結構、在cpu/gpu/fpga/asic上加速方案等,都是吸引我的閃光點。

csdn:阿裡巴巴的很多業務都使用了深度學習技術,能否介紹和您的工作有直接關系的技術環節包括哪些?

蔔居:在阿裡雲我們組主要是計算平台支援和計算效率提升兩個環節。

計算平台支援方面,我們的hpc支援目前大多數主流計算架構(caffe/torch/theano/mxnet/tensorflow/……),利用ib+雙萬兆網絡實作多機互聯,提供多機多卡并行訓練系統,最近使用專門為深度學習定制的tesla m40 gpu加速器将單節點計算能力提升到16 tflops。

深度學習及實踐經驗

csdn:目前深度學習的論文非常多,您會關注哪類論文?神經網絡最近的哪些進展讓您印象深刻?

蔔居:我比較感興趣的還是計算優化方面,包括計算體系結構優化和計算軟體優化兩類。

csdn:icml、cvpr上來自deepmind等大公司的論文比較出彩,這其中不乏大公司投入比較大要求少的因素,比如lecun說目前facebook對fair還沒有盈利要求,能否介紹您的團隊如何要求dl研究的投入?

蔔居:我不敢妄談公司戰略,單從個人角度談下。

dl不僅是我在阿裡雲高性能計算團隊工作時需要了解的内容,同時也是我個人愛好,對于論文和前沿的技術一般是用業餘時間學習,工作時間更多是面向使用者需求。在阿裡雲有得天獨厚的研究條件,我們有大規模gpu叢集可以折騰,周圍許多同僚自己攢機體驗最新的硬體(gpu、fpga),研發氛圍濃厚,讨論問題熱烈,都是自發行為。

總體來看,大公司在資料規模、基礎設施方面有較大優勢,初創團隊一般在業務算法、模型調參方面更有優勢。

從Caffe開始深度學習實戰,徒手hack代碼樂趣更多

csdn:論文雖多,深度學習理論體系卻不似svm那麼優美,在很多實際應用場景中的效果也還不盡人意,從開發人員的角度,您如何看待目前深度學習技術的缺陷?成功應用深度學習有沒有一些“黃金法則”?

蔔居:深度學習不需要專門特征工程師,降低了模型設計門檻,但對于調超參“黑科技”方面,經驗仍然很重要,不然會經常出現使用了深度學習技術效果反而不如傳統方法的尴尬局面。

模型參數遠大于資料量時,相當于求解一個欠定方程,存在多解的可能性大,容易産生過拟合問題。

模型參數遠小于資料量時,相當于求解超定方程,可能無解,或者有解但準确率很低,這屬于欠拟合問題。

模型參數與資料量比對時,相當于求解恰定方程,既能避免過拟合,又能兼顧準确率,但模型參數量和資料量怎樣才能做到比對,是一個工程問題。

是以,如果你選擇用某個模型處理資料,那麼應該考慮這個因素,越大的模型越難訓練,因為需要與之比對的資料量、一系列避免過拟合的方法才能訓練得到一個較為理想的模型。幸運的是,我們可以将大模型首先在較大的資料集(如imagenet)上預訓練,得到模型,再對特定資料集(如人臉資料)進行精調(fine-tuning),即可得到較為理想的結果。

深度學習目前的應用場景隻是冰山一角,對于更多傳統領域的應用,一方面需要引起該領域工程師對深度學習技術的關注,另一方面要重視資料,作為待開發的礦産資源。

csdn:您曾經做過cnn硬體加速的分享,重點談了阿裡雲用到的fpga方案,但目前還有很多asic的嘗試,包括google的tpu、中科院的寒武紀等,同時考慮到神經網絡的應用越來越廣,比如lstm在語音、機器翻譯中的應用,您認為未來dl平台應當是什麼樣的架構,主流的加速方案是什麼,應當具備哪些特性?

蔔居:阿裡雲hpc團隊是一個既注重技術創新、又貼近使用者實際業務的團隊,我們在平台選擇方面,會首先根據使用者需求進行優化和定制,而一些通用的子產品則逐漸沉澱成為公共服務。

dl本身在不斷演進,沒有哪個計算架構能讓dl一勞永逸,得到某方面優勢會喪失另一部分特性,最終起決定作用的仍然是應用需求,例如批量離線處理更适合利cpu/gpu叢集的規模優勢,而線上應用、移動端應用更适合利用fpga/asic的低功耗、低延遲特性。

csdn:阿裡雲已經在用docker來提供dl服務,您認為dl任務中使用docker有哪些坑需要填好?

蔔居:docker 的優點在于一次開發,處處部署,簡化了開發測試環境與生産環境的遷移。目前已經有越來越多使用者選擇docker,越來越多開源dl架構開始支援docker部署,進一步降低了這些架構使用難度。docker本身也在不斷發展中,存在一些坑也是正常的,對于個人使用者而言docker基本坑都已經填好,是時候學習和掌握這門技術了。

關于“21天實戰caffe”

從Caffe開始深度學習實戰,徒手hack代碼樂趣更多

csdn:深度學習開源工具衆多,您的新書寫的是caffe,而您最近的部落格在寫tensorflow,能否介紹您嘗試過哪些dl架構?如何看待它們的優缺點?

蔔居:在阿裡雲hpc平台上我們支援目前大多數主流計算架構(caffe/torch/theano/mxnet/tensorflow/……),我個人都使用過這些工具,還通讀過其中幾個架構的源碼。

caffe可以作為初學者學習的第一個深度學習架構,因為代碼組織較規範,徒手hack代碼的樂趣更多。但相比之下所需依賴庫比較多,适合在固定計算平台(如伺服器、帶gpu的桌上型電腦)上運作。

tensorflow提供了更靈活的設計,不僅可以部署在伺服器端,對資源受限的硬體支援也更好,例如内置了定點化運算庫,适合做移動、嵌入式裝置上的dl應用。

csdn:從kdnuggets的統計來看,用得最多的似乎是pylearn2而不是caffe,能否進一步介紹您的新書選擇寫caffe的原因?

蔔居:誠然,從上述統計結果看,caffe受歡迎程度可能不及pylearn2、theano。但我們在企業一線生産環境統計的結果來看,直接使用pylearn2、theano接生産任務的應用幾乎是鳳毛麟角。性能是一個關鍵的因素。

新書選擇caffe,是希望讀者不僅知其然,更要知其是以然,知道怎樣使用 c++/cuda代碼實作深度學習的計算過程。

csdn:caffe的架構還在發展,社群文檔也在不斷完善,您為什麼會在現在寫caffe的書?這本書适合的閱讀對象是誰?讀者需要一些知識基礎嗎?

蔔居:從誕生到現在已經過去2年時間,caffe經曆過很多變化,架構代碼其實變動不大,掌握了閱讀技巧可以事半功倍,寫這本書是希望更多讀者可以加入hack caffe、改進caffe的行列中。

建議讀者具備高等數學、線性代數、機率論等知識水準。程式設計方面,建議讀者至少具備c++、python、matlab基礎。對于大學生,建議大二以上閱讀本書。研究所學生、博士生理論基礎達标,可以從本書中學習caffe設計模式、程式設計技巧方面内容,充實自己的科研生活。企業一線工程師,可以通過本書了解深度學習最新的進展和生産環境批量部署等内容。

csdn:您認為這本書的最大的亮點是什麼?

蔔居:這是第一本透過源碼解讀深度學習的書,也是一本注重“實戰”的書。

csdn:如果開發者能完全吸收書中的營養,21天之後的dl水準是怎麼樣的?

蔔居:本書不是一部讓讀者從0開始,21天之後精通 caffe 的“武林秘籍”,更像是遊戲攻略,可以讓讀者更快地找到捷徑,避免在原地徘徊。每章後面的思考題,有些是需要深入實踐和思考之後才能得到答案的。相信通過這些鍛煉,讀者可以養成獨立思考的習慣,面對實際問題時更加胸有成竹。

csdn:開發人員在讀完這本書之後,如何繼續提升dl技能?還有一些dl書籍可以推薦?

蔔居:dl修行道阻且長,要有紮實的數學基礎、精湛的程式設計技術,還要有廣闊的視野,不斷吸取其他領域的營養。推薦繼續閱讀其他ml/dl大部頭著作(例如youshua bengio的《deep learning》值得深入閱讀),以及該領域的經典論文。

筆耕收獲

csdn:能否介紹您寫這本書的最大挑戰和收獲?

蔔居:克服惰性。寫書後,我養成了早起的習慣,每天精神了許多。

csdn:從您2008年發表第一篇csdn部落格文章,到現在已經8年,能否介紹您堅持寫部落格的動力和收獲、心得?部落格創作對您的技術工作和完成著作有多大的幫助?

蔔居:2008年我還是在大一、大二剛剛學習程式設計的階段,每期《程式員》、《電腦報》、《黑客 x 檔案》都要細細閱讀。偶然的機會看到csdn上面的一些部落格寫得很好,于是也注冊了一個号,嘗試自己寫文章。在此之前我寫文章都是發表在qq空間、人人網,發一些程式設計相關的文章不太“合群”,于是逐漸淡出了這些圈子,全面轉向csdn。

早期的文章不成體系,很少堅持。真正開始寫系列文章是從研究所學生開始,結合自己學習cuda的心得體會,整理了十篇左右,反響不錯。後來又整理了關于zynq開發的系列文章,通路量暴增,進一步增加了寫部落格的動力和信心。再後來畢業後參加工作,接觸 dl,學習caffe、tensorflow,這時的部落格更像筆記,比較随性。

寫部落格最大的收獲,是查資料時可以先從自己部落格中找,如果cache命中,直接傳回;否則再找其他人部落格,學習後收藏。部落格相比網際網路上零散知識點而言更有凝聚性,可以集中解決一類問題,習慣從部落格中找答案可以觸類旁通。

此外,寫部落格也會認識更多同行者,可以在交流之間取長補短,互相促進,并打開視野,這對工作和學習有很大幫助。

原文連結:

<a href="http://geek.csdn.net/news/detail/88598?utm_source=tuicool&amp;utm_medium=referral">http://geek.csdn.net/news/detail/88598?utm_source=tuicool&amp;utm_medium=referral</a>

阿裡雲 hpc 産品頁:

<a href="https://www.aliyun.com/product/hpc">https://www.aliyun.com/product/hpc</a>

nvidia kepler gpu上的性能極緻優化(念鴻):

<a href="http://www.atatech.org/articles/58029">http://www.atatech.org/articles/58029</a>

為什麼要寫一個gpu的彙編器(長仁):

<a href="http://www.atatech.org/articles/58106">http://www.atatech.org/articles/58106</a>

【阿裡集團蔔居深度解析】卷積神經網絡的硬體加速:

<a href="https://zhuanlan.zhihu.com/p/21430333?refer=dlclass">https://zhuanlan.zhihu.com/p/21430333?refer=dlclass</a>

<a href="http://mp.weixin.qq.com/s?__biz=mzi1nte4ntuwoq==&amp;mid=2650324711&amp;idx=1&amp;sn=8d833edfa7d856f0fc8db1d82ba0ad11&amp;scene=0#wechat_redirect">http://mp.weixin.qq.com/s?__biz=mzi1nte4ntuwoq==&amp;mid=2650324711&amp;idx=1&amp;sn=8d833edfa7d856f0fc8db1d82ba0ad11&amp;scene=0#wechat_redirect</a>

繼續閱讀