Uncategorized

【Botsnova】Facebook F8 2019後,來聊聊 Facebook 的那些 Open Source(一)

在Facebook的生態系中,有一個主題是我一直很想花些時間去撰寫的,那就是Open Source,自Facebook創立到現在已經默默地發佈了474個開源專案,光是2018年就新增了153個新專案,我每每晃到Facebook的Open Source到達頁或是他們在Github上的Repositiries時都有一個感嘆:

陳近南:我是看了三年,練了三十年,才有今天的武功境界
陳近南:我是看了三年,練了三十年,才有今天的武功境界

不過凡事都是積沙成塔,我接下來會透過一系列的文章來分享我在Facebook Open Source學習所得到的一些心得來分享給各位,我也就趁剛剛結束的Facebook F8 2019這個時機點,來啟動這一系列的文章,在本篇中,我會先從Facebook Open Source的概況來說起,然後先聚焦在今年F8議程中有提到的Open Source專案來撰寫起,並在之後逐漸地延伸到其他我們Botsnova團隊有在使用的Facebook Open Source專案,不過有件事得先跟各位說明,由於我們團隊並不走原生應用開發的路線,所以大部分跟Android與iOS開發相關的專案在這系列文章中我都會略過,留待更專業的行動應用開發團隊來補足。

在進入F8 2019的Open Source專題前,我們先來看看Facebook在今年一月所發佈的 Open source year in review

Caution:本系列文只是先整理出Facebook Open Source的武功目錄,我光是看就花了好幾天,詳細的修煉過程會在之後專文分享

PyTorch

毫無懸念的,PyTorch是超級重點項目,PyTorch被Facebook定義成深度學習的平台(Python-based deep learning platform)而不只是一個支援 Ptyhon 的深度學習應用的函式庫(PyTorch 目前已跟多家 IaaS 與晶片設計廠商進行深度的整合,我們會在後續文章中詳細說明),同時他也是在Github上成長第二快速的開放原始碼專案(第一名居然是 MicrosoftDocs/azure-docs

QNNPACK(Quantized Neural Network PACKage)

這專案中文翻譯起來超酷,量子化類神經網路工具包(?),根據官方提供的說明,QNNPACK是一個針對行動裝置最佳化的的低精確度、高效能的類神經網路API介面,奠基在量子化八位元張量(Tensor)上實作了多個常用的類神經網路運算子,包含 2D Convolution、Channel Shuffle、Sigmoid … 等等等,更詳細的說明可以看這裡

FBGEMM

FB (Facebook) + GEMM (General Matrix-Matrix Multiplication)
中文翻起來也是超酷,一般性矩陣對矩陣乘法器(?),相對於會使用到FP32或是FP64的高精確度卷積線性代數函式庫(Conventional Linear Algebra Libraries),FBGEMM是一個使用於Server-Side的低精度、高效能的矩陣對與矩陣相乘以及執行卷積運算的API介面,目前FBGEEM已經與Caffee2以及PyTorch 1.0整合在一起

PyText

一個奠基在PyTorch上的深度學習NLP模型框架,也就是說安裝PyText的同時也會強制安裝上PyTorch在你的OS上,PyText應該是利用PyTorch已內建的好的一些API來做一些深度學習相關演算法的運算,像是卷積、向量運算等等,PyText同也同時能跟Facebook其他的NLP開源工具協同運作,像是開發者可以透過FastText去做Word Embedding(詞向量)的處理,然後將處理結果輸入PyText去做後續的分析

PyText可以做的事情包含文件分類器(document classification)、序列標記(sequence tagging)、語意剖析(semantic parsing)以及多工模型(multitask modeling)等等跟自然語言處理相關的任務,目前在Facebook內部已經有多項產品在Production的環境下使用了PyText,包含Portal以及Messenger內的M Suggestions、貼文內容翻譯以及是否違反貼文政策的內容自動檢查等等。

PyText因為能夠利用GPU去大大加速模型訓練的速度以及更方便去實作分散式的模型訓練,更因為他與PyTorch是無縫整合的關係,PyText訓練出的模型可以直接輸入ONNX然後輸出成Caffee2去進行Production環境的部署(其實我還不太清楚這中間關係,會在後面的專文做更詳細的解析),Facebook規劃在未來將PyText作為主要的NLP平台並逐漸取代 DeepText 這些跟NLP相關的NLP開源專案。

Horizon

號稱是第一個開放原始碼的端對端(End-to-End)應用式增強式學習(Applied Reinforcement Learning)平台,奠基在深度學習平台PyTorch之上,目前已大量的運用在臉書內部的產品上,像是⭐強化Messenger內的M Suggestions的個人化、⭐提供對用戶更具意義與Context的Push Notification以及⭐串流影片的品質優化等等功能上,在之後我專文講到Horizon時,我會花更多時間來說明什麼是Reinforcement Learning(之後都簡稱RL),這邊先簡單的說一下Horizon的優點主要在於他提供RL訓練過程中需要的特徵正規化(Feature Normalization)、分散式訓練(Distributed Training)、高維離散(High-dimensional Discrete)、連續行動空間(Continuous-Action Spaces)以及數千組具備特徵與分佈多樣性的資料集等等,讓開發人員能夠輕易的將RL實驗快速的部署到正式的環境中。

Glow

給硬體加速器使用的機器學習的編譯器與執行引擎,這個離我的domain有點遠雃而且我的團隊不會用到它,所以我就不多作解釋,大家可以自己去 Github 上看看

Detectron

這是一個由FAIR所發佈並用Python實作並與Caffee2整合再一起的物件偵測工具包,Detectron實作了Mask R-CNN、RetinaNet、Faster R-CNN、RPN、Fast R-CNN以及R-FCN等等物件偵測演算法,上述每一個物件偵測演算法都有長長的論文要閱讀,我之後的專文中只會簡單的撰寫原理,會將大部分的篇幅都留在解釋我們團隊拿 Detectron 來實作與實驗的經驗分享。

Mask R-CNN2Go

跟原生應用有關的,目前我們不會用到,所以就留給更專業的朋友們來分享

Tensor Comprehensions

TC一樣是由FAIR所發表,目前支援Python與C++兩種程式語言,並已開始與PyTorch與Caffee2進行整合,開發者可以透過一個奠基於一般化愛因斯坦標註法(Generalized Einstein notation)上的標註法去進行多維度陣列的運算,其實我都不知道我在說什麼了…Orz 但是看到Github上的範例可以約略了解到,透過撰寫簡單(?)的Notation然後就能透過PyTorch去將撰寫出的數學運算標註去轉換成實際可在符合CUDA這一個統一運算架構硬體上的程式碼(簡直是神奇到不行),詳細的說明等我熟悉了TC的Notation後我再轉寫專文來跟各位分享學習的心得。

小結一下

就我自身而言,透過翻閱臉書所有的Open Source專案,除了有一種如入寶山的驚嘆之外(因為有很多開源工具可以大大的強化我團隊的技術能力),夠有一種學無止境的感嘆,Facebook真不愧是地球上最強大的網路公司之一,有許許多多我過往想都沒想過的可能性都可以在Facebook的眾多Open Source中找尋到,在這閱讀與研究的過程中也逐漸改變了我撰寫這一系列文章的目的,我將從原本流水式的介紹變更為更進一步的自我超越式的探索,同時也是個好機會讓我花更多時間去更熟悉Python與PyTorch跟Caffee2這些強大的軟體工具,就請各位期待我的一系列的專文,並還請熟稔深度學習的先進們不吝給予賜教。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *