如何評價 Caffe 2?

Caffe 2 團隊於 2017 年 4 月 18 日發布首個 Production Ready 版 Caffe 2:Caffe2 Open Source Brings Cross Platform Machine Learning Tools to Developers


在各個論壇上回答得太多了,來抖個機靈,具體的技術細節還是看代碼吧。

Caffe2最重要的是工程實踐上把很多東西做到極致,比如說NVidia給的早期測試數據,在P100上面跑ResNet50,C2可以到235幀每秒,第二位大概可以到216幀,前東家...反正更慢一些。無他,只不過就是框架的overhead小而已。說大也不大,但是在Facebook這種5%的performance都能分分鐘上下以million記的地方,什麼事情都得做到這樣才行。

另外跨平台也不是吹的,比如說我今天晚上試了一下怎樣支持蘋果Watch:Support WatchOS build by Yangqing · Pull Request #321 · caffe2/caffe2。15行代碼搞定,你來告訴我哪個框架能那麼簡單。

當然就如 @Shicai Yang 兄所說,框架做到今天,更多的是如何符合用戶的習慣,而不是逼著大家換框架,喜歡Caffe的我們會繼續支持,因為C2的新功能逐漸考慮migrate的,我們肯定大力支持啊。

另外我還要強調的是我最近每個演講都會提到的「unframework」,或者說「unix philosophy」的觀點:framework不重要,重要的是技術,這也是我一直主張把核心軟體比如說Gloo,NNPACK,FAISS這些單獨放出來,不放在框架裡面的原因 - 每個框架都可以拿這些軟體來優化,這才是做community的道理。老實說,Caffe我也參加了,TensorFlow我也參加了,C2我也參加了,最重要的是大家開心,能學到技術,能用得方便。

我在Facebook接下去會推出一系列類似「爐邊談話」的技術博客,找寫這些軟體的大牛都出來聊聊他們對技術的看法,也是這個道理,希望大家能喜歡。

至於PR么,你懂的。。。我竊以為我本人已經很低調了。

最後給個標杆,這個pull request里的代碼是我組裡的前高盛前劍橋小哥在一天之內寫完的,如果你能達到這個水平,我幫你去要offer,條件你說。[iOS] Metal backend by ajtulloch · Pull Request #215 · caffe2/caffe2


作為一個圍觀者談談看法,坐等 @賈揚清 老師詳細解答。

Caffe 2 在 2016 年下半年開始有明顯的大規模開發跡象,可以從 caffe2/caffe2 感受一下。之前就一直很關注,果然在 F8 大的時候搞了個大新聞。


大家最關心的幾個問題,可以摘抄一下官方回答:

1. Caffe 2 跟 PyTorch 是什麼關係?

從訓練角度,Caffe2 提供最快的性能,而 PyTorch 提供最佳的靈活性。[1]

從發布角度,Caffe2 為產品設計,提供在各種平台包括移動設備的運行時。PyTorch 不為之優化。[2]

同時,FB 的兩個團隊計劃共享後端代碼,如使用 Gloo 來做分散式。[3]

2. Caffe 2 跟 Caffe 是什麼關係?

Caffe 2 是 @賈揚清 對 Caffe 的重新思考和重構。一些早期的思考參見: http://tutorial.caffe.berkeleyvision.org/caffe-cvpr15-improving.pdf

因為代碼結構不同,所以新開了個 repo 搞,但同時提供了轉換工具,可以把 Caffe 模型轉換到 Caffe 2 上。[4]

3. Caffe 2 跟 TensorFlow 是什麼關係?

這個問題在 Reddit 和 Hacker News 上都被問到,但都沒有正面回答。有一個人的回復 [5] 是說,TensorFlow 是 a) Google Lock-in b) 移動端 TF 比較屎,然後被 TF 的 mobile lead 反駁 [6] 說我們 TF 很開放也很努力,Issues 和 Pull Requests 處理的都很好。


摘抄完畢,然後談談我的看法。

從代碼來看,Caffe 2 的設計更像 TensorFlow 而不是 Caffe。例如添加 Operator 的方式跟 TF 如出一轍。目前看來,核心方面跟 TF 的一個區別是,對分散式的支持,TF 是核心提供(Send/Recv 節點,和 Rendezvous 設計)負責數據傳輸,自動切分,無需用戶放置通信節點。而 Caffe 2 則是完全通過 Operator 級別,比如提供 MPI Operator 來實現多機。這兩種設計,對於大規模分散式訓練有一定影響。

既然 Caffe 2 設計跟 TF 很像,底層運算又都是在用 cuDNN 這種庫,所以性能相差應該不大。上層用戶的 Python 介面,總能包裝成自己想要的樣子,比如套個 Keras 前端,所以不再比較。


核心問題還是,在 TF 生態圈已經很繁榮的情況下,FB 為什麼還要自立門戶,推廣 Caffe 2?

1. 實現問題。 @賈揚清 之前多次提到 TensorFlow 速度慢,代碼冗雜。雖然我覺得,這更多是口味問題,大框架和小框架,各有各的好處。自造輪當然是無可厚非的。

2. 姓 G 還是姓 F 的問題。總有人覺得 Google 不開放交代碼沒人管。這個問題還在 reddit/twitter 上爭論,但各位可以親自去 tensorflow/tensorflow 看看 PR 的處理情況,依我所見,大部分設計合理的代碼都被積極的 review 和 merge 了,包括對 IB Verbs 的支持。當然如果設計思路跟 TF 不合,比如硬要用 PyTorch 的思路搞,我估計還是很難。如果是自家代碼,大的設計決定,可以自己把控,這是對 FB 的好處,也是做產品級的模型發布所需要的。

3. 開發者社區。TF 的生態圈和社區,是 Google 大力氣建設的,已經初見成效,並且可以直接反饋到 Cloud ML Engine 上去。Caffe 2 對 Caffe 提供官方的轉換工具,也許可以遷移一部分社區過來,更容易建立 Caffe 2 的社區。但 FB 不搞雲服務,這個社區對 FB 的作用存疑。目前 Caffe 2 快速開發階段,大部分代碼也是從 FB 內部同步出來的,開放性不比 TF 好。


最後一個問題,如何選擇 TF 和 Caffe 2?

1. 非常類似,喜歡哪個用哪個,效果都不會太差。如果就是討厭 TF 的 codebase 那也沒辦法。

2. 目前 TF 的社區資源更多,文檔更全,如果是新手的話,用 TF 能得到更好的社區支持。

3. 想用 XLA 或者 OpenCL,則只能用 TF.

4. Caffe 2 號稱對 mobile 支持更好,還沒驗證,可以試試。


BTW, 從開源的角度,多說兩句。開源從來不是扔出來個代碼就不管了,而是建立生態圈所有人受益。百度改了個 TensorFlow 支持 All Reduce 操作 baidu-research/tensorflow-allreduce,但最下面放上一句:我們不對這份代碼提供任何支持。在 TF 主幹上也沒有見到 Baidu 的 PR. 這顯然不是做開源的態度。相比之下,Kubernetes 這個項目,出身於 Google,但現在最大的 Contributor 已經是 CoreOS. https://coreos.com/blog/coreos-kubernetes-community.html 把社區做大做強,所有人受益,這才是正確的開源。


瀉藥。。。

作為caffe重度使用者,pytorch的初學者,以及工業屆的一枚工程師,目前還沒找到一個讓自己使用caffe2的理由。

yangqing過早的放棄caffe,而caffe2的正式亮相實在是有點晚,我感覺非常可惜。

現在的工業屆用tensorflow,caffe,mxnet,cntk或者torch/pytorch等框架訓練模型,然後轉換個模型,部署到移動平台並不是多大問題。所以,caffe2適用工業屆的說法,並不能讓工業屆同仁真正接受,略有些勉強。


二圖流:

Why semilogx?

來源:Caffe2: Portable High-Performance Deep Learning Framework from Facebook | Parallel Forall


期待facebook股票大漲
感謝某人帶領人類進步
感恩沒有來facebook開live


據說fb計劃pytorch用於做research,caffe2做production。
最近在學習pytorch,確實非常方便靈活,動態圖的設計機制比tf之類的靜態圖更靈活,寫起來很像numpy,簡單。
caffe2還沒具體學習,待更


占沙發,坐等大佬。


估計大佬都在吃飯&<&>_&<&>

facebook現在主要的是torch(pytorch)和caffe(2)了,Yangqing Jia也說了這兩個項目的差別比較大,兩者的目標就不同,pytorch比較適合實驗研究用,適合開發一些結構新奇的網路,caffe2官方文檔裡面就交代了是production-ready,很明顯的偏向工業界,主要強化了便攜性和性能。

既然偏嚮應用,caffe2也提供了一些網路模型庫,目前主要有圖像分類,分割,標記等,還是很少的,隨著開源後更多開發人員的加入應該會有更多的模型庫。

下午有時間實驗一下,先睡覺


我們最近在官方授權下翻譯pytorch ,快出1.0了,Facebook動作好快啊,感覺f最近攢了好多人才啊


移動方面,我來胡說八道一下。

首先是F8的一個消息,讓我為之一振。Facebook和Qualcomm合作優化Caffe2和Snapdragon NPE

Caffe是由伯克利AI研究實驗室和社區開發者開發的深入學習框架。它使用FreeBSD許可證發布,因此,只要包含BSD版權聲明,就可以用於商業用途,修改和分發軟體。

Caffe2是開源Caffe框架的升級版,在組織運算方面具有更大的靈活性。

在Facebook F8開發者大會上,Facebook和Qualcomm宣布攜手合作,優化Caffe2和Snapdragon 神經處理引擎(NPE)軟體框架。

Facebook和Qualcomm的合作重點是提升部分任務對機器學習的依賴程度。通常而言,機器學習技術涉及運行於伺服器群和超級計算機的超快數據處理應用程序,將大數據集轉換為實際操作。Qualcomm希望將機器學習移植到個人設備,幫助應用程序以自己的方式頻繁利用機器學習技術。

Qualcomm Snapdragon NPE處理繁重的工作,為在Snapdragon設備上高效運行神經網路打造適宜的環境,使設備上的機器學習成為可能,從而為開發人員留出更多的時間和資源,專註於構建創新的用戶體驗。

Caffe2擁有先進的計算圖形設計、極簡模塊化,以及兼容多平台的特點,開發人員在設計深度學習任務方面(如計算機視覺、自然語言處理、增強現實和事件預測等等)具有更大的靈活性。

Snapdragon NPE的其中一項優點是開發人員可以根據應用的功能和性能要求,充分利用Snapdragon各個異構計算核心(CPU、GPU、DSP、ISP等等)。與CPU相比,在內置Qualcomm Adreno 540 GPU處理Caffe2工作負載時,Snapdragon 835可以實現高達5倍的性能提升。此外,Qualcomm Hexagon DSP中的Hexagon Vector eXtensions(HVX)也可以提供更高的性能和更低功耗。

NPE其實是一個雜燴,包括運行時軟體、庫、API、離線模型轉換工具、調試和基準測試工具,示例代碼和相關文檔。將於今年夏天提供給廣大開發者社區。(預計6月 or 7月吧,具體時間看老美心情)

底層API成為了基石

AMD一直在搞異構計算,從AMD收購ATi的那一刻起,3A平台就註定了是一個天生的異構計算平台。大概是2011年吧,AMD搞的APU就是最好的證明。還有今天的PS4、Xbox One無不是異構計算的明星產品。

AMD最初推出的Mantle具有巨大的歷史意義,它啟發了很多人。微軟搞的DirectX12,然並卵沒有發揚光大。蘋果自己搞的Metal,果粉開發者都很帶勁。後來整個行業定了一個Vulkan標準,Android小夥伴樂開懷了。Mantle、DirectX12、Metal、Vulkan,最終這些底層異構計算的API最大的應用,不是遊戲,更不是視頻編解碼,加速個pdf這種lowB的事兒。而是成為了Caffe2這樣的AI應用的基石。

我們看到移動設備的計算性能越來越強,10nm、7nm等精細製程下,也有了媲美桌面端的性能。Caffe2選擇在移動端發力,我覺得是非常有眼光的。不僅僅是說,你搞個HPC才能搞AI。移動設備更容易落地,你看今天的O2O、SmartHome、mobile payment等等無不是移動端在幫這些新概念落地。AI最終要想落地,還是要往移動端上靠。


Caffe2瞄著移動端,是不是意味著移動設備(例如手機)有趨勢成為下一個計算平台?
隨著硬體提速和框架的先進,會不會實現像類似電腦從 ENIAC 到PC一樣的演化啊?


跨平台不是感人?
能不用VS編譯就更好了


caffe2如果目標是移動平台的話,那麼f8同時推出的使用mask rcnn進行scene undestanding的AR studio就完全能解釋了


推薦閱讀:

TAG:人工智慧 | 開源軟體 | 深度學習(Deep Learning) | Caffe(深度學習框架) | Caffe2 |