丁香五月天婷婷久久婷婷色综合91|国产传媒自偷自拍|久久影院亚洲精品|国产欧美VA天堂国产美女自慰视屏|免费黄色av网站|婷婷丁香五月激情四射|日韩AV一区二区中文字幕在线观看|亚洲欧美日本性爱|日日噜噜噜夜夜噜噜噜|中文Av日韩一区二区

您正在使用IE低版瀏覽器,為了您的雷峰網(wǎng)賬號安全和更好的產(chǎn)品體驗,強(qiáng)烈建議使用更快更安全的瀏覽器
此為臨時鏈接,僅用于文章預(yù)覽,將在時失效
人工智能開發(fā)者 正文
發(fā)私信給AI研習(xí)社
發(fā)送

0

開源神經(jīng)網(wǎng)絡(luò)框架Caffe2全介紹

本文作者: AI研習(xí)社 2017-12-11 14:44
導(dǎo)語:雷鋒網(wǎng)按:本文作者吳逸鳴,整理自作者在GTC China 2017大會上的演講,首發(fā)于作者的知乎文章,雷鋒網(wǎng)獲其授權(quán)發(fā)布。我個人認(rèn)為這是一份很值得分享的資料,因

雷鋒網(wǎng)按:本文作者吳逸鳴,整理自作者在GTC China 2017大會上的演講,首發(fā)于作者的知乎文章,雷鋒網(wǎng)獲其授權(quán)發(fā)布。

我個人認(rèn)為這是一份很值得分享的資料,因為:

  • 這應(yīng)該是第一次使用全中文來講解Caffe2和FB的AI應(yīng)用的演講

  • 觀看這次演講不需要機(jī)器學(xué)習(xí)/神經(jīng)網(wǎng)絡(luò),甚至計算機(jī)科學(xué)的基礎(chǔ)。它適合每一個愿意了解人工智能、神經(jīng)網(wǎng)絡(luò)和Caffe2的人。

  • 我準(zhǔn)備了很久?。ㄟ@才是主要原因哈哈哈,但第一次上臺還蠻緊張

在觀看視頻前你可能需要注意以下幾點:

  • 該視頻所有權(quán)解釋權(quán)各種權(quán)全都?xì)w英偉達(dá)所有

  • 此次演講只是談?wù)摿宋易约旱囊恍┛捶?,和FB無關(guān)

  • 我的演講稿和視頻里說的可能有一些出入。有的地方為了更好地讓大家理解,我做了自己的解釋。演講稿中有可能有的地方我懶得寫但是我在演講中說了。有的地方是因為我理解不夠直接是錯誤的。還有各種錯別字。這些都?xì)g迎大家指正,互相學(xué)習(xí)。

以下是演講原文:

大家好 我叫吳逸鳴。我來自Facebook的Caffe2組。

演講開始前,想先給大家看一個demo。這是一個自動把圖片和視頻轉(zhuǎn)換成大師美術(shù)風(fēng)格的神經(jīng)網(wǎng)絡(luò)算法。在大約兩年前剛被發(fā)表的時候,在服務(wù)器上處理單張照片需要秒級別的時間。到現(xiàn)在,我們已經(jīng)成功做到實時的視頻風(fēng)格轉(zhuǎn)換。不僅實時,在我們同事的努力下,我們還做到了在手機(jī)移動端本地實施演算。這相較于之前,已經(jīng)有好幾個量級的效率提升。

今天,我想給大家介紹一下讓這一切變成現(xiàn)實,以及將各種AI算法部署到產(chǎn)品中的神經(jīng)網(wǎng)絡(luò)框架:Caffe2。

Caffe2是:

  • 一個輕量化的深度學(xué)習(xí)算法框架

  • caffe2 主要為產(chǎn)品級別的深度學(xué)習(xí)算法設(shè)計

  • 為移動端實時計算做了很多優(yōu)化

  • 同時支持大規(guī)模的分布式計算

  • Caffe2是一個跨平臺的框架

    支持移動端iOS, Android, 服務(wù)器端Linux, Mac, Windows, 甚至一些物聯(lián)網(wǎng)設(shè)備如Raspberry Pi, NVIDIA Jetson TX2等平臺部署

說到這里,我們需要暫停一下。深度學(xué)習(xí)框架是什么?若放在五年前,你甚至很難用這六個字造句。Caffe2是什么?你們會不會給咖啡拉花?這些問題別說外行,很多科技企業(yè)的內(nèi)行包括一些我的學(xué)長、別的部門同事也會有這些疑惑。

簡單來說,從我個人的理解,深度學(xué)習(xí),作為機(jī)器學(xué)習(xí)的一個分支,是一個尋找理想中的函數(shù)fx的過程。這個函數(shù)代表了從數(shù)據(jù)輸入x到期待輸出y的某種映射。在深度學(xué)習(xí)里, 這個函數(shù)是多層有疊加的。在這里你的輸入x可以是一些圖片,可以是音頻,可以是一些高緯度的向量用。函數(shù)的輸出y可以是推薦系統(tǒng)的排位、另一種語言的翻譯或者是無人車對下一秒操作的決策。

深度學(xué)習(xí),和別的AI的算法,要為社會創(chuàng)造價值,還得落到產(chǎn)品中去。在工業(yè)界,我們訓(xùn)練和部署深度學(xué)習(xí)算法的時候,通常有以下幾個環(huán)節(jié)

  • 你有數(shù)據(jù)

  • 你有模型

  • 你想要找到那個神器的函數(shù)fx。這個不斷嘗試和逼進(jìn)的過程,我們稱為訓(xùn)練

  • 你可能需要在移動端/服務(wù)器端/物聯(lián)網(wǎng)設(shè)備/嵌入式系統(tǒng)上部署你的神經(jīng)網(wǎng)絡(luò)算法

那么Caffe2作為一個神經(jīng)網(wǎng)絡(luò)框架,為你提供了模型搭建、訓(xùn)練、和跨平臺的部署。簡而言之,全包辦了。

在設(shè)計開發(fā)Caffe2中,我們認(rèn)為一個好的經(jīng)的起業(yè)界規(guī)??简灥纳窠?jīng)網(wǎng)絡(luò)框架需要具備:

  • 支持最新的計算模型

  • 分布式訓(xùn)練

  • 高模塊化

  • 跨平臺的支持

  • 高效率

今天我想大家展示一些Caffe2的例子。談一下在FB我們?nèi)绾斡肅affe2來搭建我們的AI產(chǎn)品。

在FB,我們使用Caffe2來搭建全套的AI產(chǎn)品和功能,其中包括

  • 計算機(jī)視覺相關(guān)

  • 機(jī)器翻譯

  • 語音識別

  • 推薦系統(tǒng)

首先是移動端的Caffe2

從設(shè)計之初,Caffe2就十分重視在移動端部署神經(jīng)網(wǎng)絡(luò)。我們一直在優(yōu)化Caffe2在移動端的性能,并保證我們能支持各類移動計算框架?,F(xiàn)在Caffe2主要為15年以后的機(jī)型優(yōu)化,但也支持13年以后的機(jī)型。

為了在手機(jī)上這里是一個使用OpenGL在iOS和安卓設(shè)備上加速的例子。通過我們在移動端的努力,原本在CPU上每秒只能處理4幀的算法,利用手機(jī)端的GPU,我們實現(xiàn)了24+fps每秒的效果,實現(xiàn)了實時計算修改。

開源神經(jīng)網(wǎng)絡(luò)框架Caffe2全介紹

我們和高通合作一起在搭載了高通芯片的移動端設(shè)備上加速神經(jīng)網(wǎng)絡(luò)。這是一個移動端圖像識別的例子,可以看到在移動端,不僅是神經(jīng)網(wǎng)絡(luò)風(fēng)格變換算法,圖像分類算法也可以做到超過實時的演算。

開源神經(jīng)網(wǎng)絡(luò)框架Caffe2全介紹

在這些移動端的樣例背后是我們在各種設(shè)備上的優(yōu)化。在蘋果設(shè)備上,我們是第一個完全把Metal,也就是iOS的GPU API完全融合到后端的框架。如果你是一個移動開發(fā)者,準(zhǔn)備好自己的模型后,通過簡單幾行調(diào)用,你就可以讓你的神經(jīng)網(wǎng)絡(luò)在蘋果設(shè)備上用GPU運行起來。

使用Caffe2移動端的GPU實現(xiàn)可以給你的網(wǎng)絡(luò)帶來實質(zhì)性的加速和能耗上的優(yōu)化,這一切都是開源的。

開源神經(jīng)網(wǎng)絡(luò)框架Caffe2全介紹

在安卓設(shè)備上 我們用OpenGL來使用GPU加速神經(jīng)網(wǎng)絡(luò)的執(zhí)行。這之中我們有一整套基于OpenGL的GPU底層運算實現(xiàn)。CPU只需調(diào)度,無需處理數(shù)據(jù)。

開源神經(jīng)網(wǎng)絡(luò)框架Caffe2全介紹

在部署產(chǎn)品的時候,有時用戶終端設(shè)備只有CPU的硬件支持。我們對arm架構(gòu)的CPU有Neon(一個并發(fā)指令集的拓展)的實現(xiàn)。我們也維護(hù)開發(fā)調(diào)用自己的開源CPU高性能運算庫NNPack。我們也會做Caffe2編譯文件的壓縮來保證把AI添加到你的產(chǎn)品不會成為空間上的負(fù)擔(dān)。

總而言之,Caffe2提供了從入門機(jī)到旗艦機(jī)的一整套移動部署解決方案。

開源神經(jīng)網(wǎng)絡(luò)框架Caffe2全介紹

另一個我想分享的Caffe2案例是我們的機(jī)器翻譯系統(tǒng)。

在我們的產(chǎn)品中,我們有來自世界各地的超過20億用戶。為他們提供高質(zhì)量的翻譯,是一個一個很復(fù)雜的問題。左邊的圖上是一個從土耳其語翻譯到英文的例子。上半部分翻譯的不好,在英語里是不流暢的。下半部分翻譯的好??梢姺g的質(zhì)量、支持語言類型的數(shù)量至關(guān)重要。在FB,如果中文到英文和英文到中文算兩種翻譯的話,每天我們需要提供2000多種翻譯。處理45億條翻譯請求。今天,我們可以很驕傲地說,這一切底下的算法和服務(wù),都是由Caffe2支持的。

在這個項目中我們使用了seq2seq LSTM model with attention。這是現(xiàn)在業(yè)界主流的翻譯模型。

我們使用Caffe2做大規(guī)模的訓(xùn)練,并在GPU/CPU上都對相應(yīng)的計算做了優(yōu)化。

開源神經(jīng)網(wǎng)絡(luò)框架Caffe2全介紹

在這些優(yōu)化中,最值得一提的是我們對循環(huán)神經(jīng)網(wǎng)絡(luò)的內(nèi)存優(yōu)化。循環(huán)神經(jīng)網(wǎng)絡(luò)的單元,英文里稱之為Cell,往往需要把自己的輸出,當(dāng)作自己的輸入,循環(huán)執(zhí)行。所以,我們稱之為循環(huán)。在真實實現(xiàn)的過程中,這就好比把同樣的單元展開很多遍。這種計算的模式,使得循環(huán)神經(jīng)網(wǎng)絡(luò)的計算量很大。要處理2000+種翻譯方向,計算量更是有量級上的增長。

優(yōu)化循環(huán)網(wǎng)絡(luò)的計算顯得極為重要。Caffe2為循環(huán)神經(jīng)網(wǎng)絡(luò)提供了:

  • 反向運算時的展開單元內(nèi)存重用

  • 替換內(nèi)存中部分參數(shù)的空間,當(dāng)需要的時候再重新計算參數(shù)

  • 專門正向推導(dǎo)模式提供進(jìn)一步的內(nèi)存空間優(yōu)化

  • 對于多層的循環(huán)神經(jīng)網(wǎng)絡(luò)單元,他們展開后會在計算圖中形成一個運算單元的陣列。我們盡可能地依照對角線的方式執(zhí)行這些運算來盡可能達(dá)到最大的并行化。

在這些優(yōu)化之后,我們把我們產(chǎn)品中的循環(huán)神經(jīng)網(wǎng)絡(luò)效率提高了2.5倍。達(dá)到了20億用戶級別的訓(xùn)練和部署要求。

開源神經(jīng)網(wǎng)絡(luò)框架Caffe2全介紹

更值得興奮的是,我們從上個月開始開源了我們的循環(huán)神經(jīng)網(wǎng)絡(luò)支持。開源社區(qū)和在座的每一位也可以開始用Caffe2來優(yōu)化你的循環(huán)神經(jīng)網(wǎng)絡(luò)。從框架本身,調(diào)用Caffe2的循環(huán)網(wǎng)絡(luò)引擎對性能幾乎沒有影響。Caffe2支持主流的循環(huán)神經(jīng)網(wǎng)絡(luò)單元包括LSTM,Multiplicative Integration LSTM(這是一種在單元里面加上乘法的更復(fù)雜的LSTM單元)和帶attention的模型等。之前我提到的內(nèi)存和正向推導(dǎo)時的優(yōu)化,都已經(jīng)開源。

開源神經(jīng)網(wǎng)絡(luò)框架Caffe2全介紹

和翻譯相關(guān)的一個例子是語音識別,在fb,和語音相關(guān)的應(yīng)用有以下這些。

1.自動語音識別

顧名思義,這項任務(wù)中輸入是一段音頻,輸出可以是對應(yīng)的文字,可以是一連串的音標(biāo)等。Caffe2提供了自動語音識別中非常常用的雙向LSTM單元,Caffe2支持CE和 CTC這兩種算法,并且對他們做了速度上的優(yōu)化。這兩種是現(xiàn)在ASR,自動語音識別中主流的輸出和真實標(biāo)注(真實句子)之間差異性的方法。

2.語音合成

剛才的自動語音識別是從音頻到文字。語音合成,是從文字,合成一段聽起來像人講話的音頻。一般語音合成現(xiàn)在有用多層神經(jīng)網(wǎng)絡(luò)實現(xiàn)的,有用LSTM實現(xiàn)的、有用卷積神經(jīng)網(wǎng)絡(luò)實現(xiàn)的。我們生成的模型回去模擬聲音的音長,頻率,峰值和聲音的間歇性。

我們還有一些別的聲音上的應(yīng)用,在這里由于時間的原因,不做過多的展開了。

開源神經(jīng)網(wǎng)絡(luò)框架Caffe2全介紹

那么,到現(xiàn)在,我們已經(jīng)通過在FB的例子講述了Caffe2在手機(jī)端的部署,包括移動端CPU,移動端GPU的優(yōu)化,這樣來支持從低到高各種類型的機(jī)型。

我們介紹了我們在自然語言處理領(lǐng)域, 也就是我們機(jī)器翻譯的成果。Caffe2對循環(huán)神經(jīng)網(wǎng)絡(luò)做了許多優(yōu)化,使得我們訓(xùn)練的模型經(jīng)受起了45億級別的單日訪問量的考驗

我們也介紹了在語音領(lǐng)域,包括ASR、TTS實現(xiàn)的各種模型,說明Caffe2對于不同模型都有良好的支持。

但是接下來,我想給大家分享的,是任何一個工業(yè)級的機(jī)器學(xué)習(xí)框架都需要解決的應(yīng)用場景——分布式訓(xùn)練。

這項工作的名稱,叫做 ImageNet in 1 hr,中文叫做1小時完成ImageNet挑戰(zhàn)。這項工作是由我們以下的同事一同完成的。

開源神經(jīng)網(wǎng)絡(luò)框架Caffe2全介紹

ImageNet是一個由斯坦佛大學(xué)主導(dǎo)的大型開源圖像數(shù)據(jù)集。ImageNet挑戰(zhàn)是一個經(jīng)典的計算機(jī)視覺挑戰(zhàn)。在這項任務(wù)中,我們的模型需要做圖像分類,也就是說,給它一張圖片,他需要告訴我這是貓還是狗還是飛機(jī)還是船還是汽車。

如果羅列一些簡單的數(shù)據(jù):

1. 使用當(dāng)前主流的圖像識別模型,單張圖片大概要做80億次浮點數(shù)計算

2. 在ImageNet數(shù)據(jù)集中大約有120萬張圖像

3. 為了訓(xùn)練出一個現(xiàn)在學(xué)界認(rèn)可的模型,我們大約需要把這120萬張圖片給我們的模型看100遍

4. 如果做一下簡單的計算,我們完成這項任務(wù)需要用到1個exa個浮點數(shù)計算。exa有多少呢?大約是10的18次方,是Giga往上走3級。這個任務(wù)的計算量,真的很大。

在這項任務(wù)里,我們把本來需要好幾天的訓(xùn)練量,用1個小時的時間訓(xùn)練完了。而且我們用的是全開源的軟件框架,深度學(xué)習(xí)用Caffe2,網(wǎng)絡(luò)調(diào)度同步用我們開源的gloo,硬件就是你也能買得到的英偉達(dá)的GPU。

好,那我們來自習(xí)地介紹一下這項任務(wù)。我們要在ImgeNet-1k數(shù)據(jù)集上做圖像分類。這其中ImageNet-1k 的圖像有一千種類別。每一張圖片只有一個類別訓(xùn)練數(shù)據(jù)集,像我之前說的,有120萬張圖片。驗證集中有5萬張圖片。我們在機(jī)器學(xué)習(xí)中,我們會單獨拿出一些數(shù)據(jù)作為驗證集,來調(diào)整一些模型的參數(shù),或者監(jiān)控一下模型訓(xùn)練的好不好。我們在訓(xùn)練的過程中也需要跑這5萬張圖片的正向推導(dǎo)。

開源神經(jīng)網(wǎng)絡(luò)框架Caffe2全介紹

輸入的格式是NCHW -》輸出是1 hot label的形式?,F(xiàn)在學(xué)術(shù)屆在這個數(shù)據(jù)集上最領(lǐng)先的是我們FB的同事 kaiming大神的工作:rextnet,大概達(dá)到了22%的訓(xùn)練錯誤率。也就是說,給模型看100張來自ImgeNet訓(xùn)練集的圖片,他期望上能說對其中78張圖片的類別。相較于2012年AlexNet橫空出世時的36-40的top1 error rate,我們深度學(xué)習(xí)的研究者已經(jīng)有了很大的進(jìn)步。

在這項任務(wù)中,我們把單次處理的數(shù)據(jù)量上升到8192張圖片。這在機(jī)器學(xué)習(xí)的層面會帶來一些挑戰(zhàn),在接下來的ppt中我會提到。另外,我們在單次訓(xùn)練中我們同時使用了256塊GPU,搭建這樣一套系統(tǒng)也充滿了挑戰(zhàn)。

開源神經(jīng)網(wǎng)絡(luò)框架Caffe2全介紹

在訓(xùn)練神經(jīng)網(wǎng)絡(luò)的過程中我們關(guān)注訓(xùn)練上的錯誤率。這里是一張訓(xùn)練錯誤率隨著訓(xùn)練的數(shù)據(jù)增加而下降的圖。我們可以看到y(tǒng)軸是訓(xùn)練的錯誤率,這個數(shù)值越低說明我們的模型能夠在訓(xùn)練集數(shù)據(jù)上分類得更準(zhǔn)確。X軸是數(shù)據(jù)的期的數(shù)量。一期(Epoch)數(shù)據(jù)指的是我們的模型把訓(xùn)練數(shù)據(jù)完全過一遍,在imagenet-1k的任務(wù)中大概100萬張圖片。我們可以看到,橘黃色的線是一個標(biāo)準(zhǔn)的訓(xùn)練resnet50曲線。大概經(jīng)過了90期數(shù)據(jù)后,訓(xùn)練精度達(dá)到了20出頭。這條橘黃的線可以算一個基準(zhǔn),我們的目標(biāo)就是去逼近這條黃線。

開源神經(jīng)網(wǎng)絡(luò)框架Caffe2全介紹

因為我們期待能夠在分布式的機(jī)群上做數(shù)據(jù)并行的訓(xùn)練,意味著我們單次處理的數(shù)據(jù)量要遠(yuǎn)大于標(biāo)準(zhǔn)的256張圖片。那么假設(shè)我們直接把單次處理的數(shù)據(jù)量增加到8192張,會發(fā)生什么呢?我們就得到了藍(lán)色的訓(xùn)練曲線。在大約90期數(shù)據(jù)后,模型的訓(xùn)練錯誤率大約停在41%左右。這兩者之間的差距很大。藍(lán)色的訓(xùn)練曲線完全不達(dá)標(biāo)。(但值得一提的是,在一個1000類的分類任務(wù)中,如果我們只有一個隨機(jī)分類器,我們的訓(xùn)練錯誤率大概在99.9%左右。這個模型雖然和我們心中標(biāo)準(zhǔn)差了很多,但他顯然是具備一點關(guān)于這些圖像上分類的知識的)

之前有一些工作,包括李沐學(xué)長的文章里,都提出過通過同比例放大學(xué)習(xí)效率(learning rate)來應(yīng)對大批量的數(shù)據(jù)的想法。我們也嘗試了相應(yīng)的做法,得到了新的藍(lán)線。新的訓(xùn)練參數(shù)中,因為我們把同批數(shù)據(jù)量從256放大了32倍到8192,所以我們把學(xué)習(xí)效率從原來的0.1放大到3.2 ??梢钥吹接?xùn)練錯誤率有了很不錯的提升。從之前的41左右的錯誤率下降到24.84左右。這個結(jié)果雖好,但和我們期待的目標(biāo)還有大約1%的差距。不熟悉圖像分類的人可能會問,這1%的差距也追求,會不會太苛刻了?其實在1000類的圖像分類里,如果把分類結(jié)果打印出來,這1%的差距有時在有些類別上會顯得特別明顯。

開源神經(jīng)網(wǎng)絡(luò)框架Caffe2全介紹

那么經(jīng)過我們同事的一番探索,在一番努力后,我們找到了一種循序增大學(xué)習(xí)效率的辦法,使得分布式的訓(xùn)練曲線和我們目標(biāo)的標(biāo)準(zhǔn)訓(xùn)練曲線收斂在一樣的訓(xùn)練錯誤率上。我們總結(jié)了一系列在大規(guī)模分布式上訓(xùn)練神經(jīng)網(wǎng)絡(luò)的經(jīng)驗,更多的內(nèi)容可以到我們的論文中查看。

開源神經(jīng)網(wǎng)絡(luò)框架Caffe2全介紹

說完了機(jī)器學(xué)習(xí)理論上的困難和解決方案后,我們來說一說這項工作中在系統(tǒng)方面的挑戰(zhàn)。之前提到過,在一塊英偉達(dá)Tesla P100上ResNet-50的訓(xùn)練數(shù)據(jù)吞吐量大約是230張每秒。

為了訓(xùn)練出一個比較理想的模型,之前的收斂圖表也顯示了,我們大概需要把整個數(shù)據(jù)集處理100遍。

開源神經(jīng)網(wǎng)絡(luò)框架Caffe2全介紹

那么120萬張圖片過100次是1億2千萬張圖片,按照230張圖片每秒的速度,訓(xùn)練一個resnet-50模型需要6天。

這時我們就不得不開始使用分布式訓(xùn)練。也就是用大規(guī)模機(jī)群來完成訓(xùn)練算法。

這里給大家展示了一張分布式訓(xùn)練的簡易說明圖。每一個虛線的方框代表一張GPU或者一臺機(jī)器。方框之間用PCIe或者網(wǎng)線連接通訊。在這項工作里我們使用數(shù)據(jù)并行的訓(xùn)練方法。數(shù)據(jù)并行指的是每個機(jī)器/GPU同時處理不同的數(shù)據(jù),并且在完成后做運算結(jié)果的總和同步。在這張圖里,每個batch代表了小批的數(shù)據(jù)。我們把batch 1到k都放在k個機(jī)器上分別處理。在真實的例子里,一小批數(shù)據(jù)有32張圖片,k=256,這樣就做到一次處理8192張圖片,也就是我們之前理論得到的單次大批數(shù)據(jù)量。說完了圖片中的輸入Input,我們把輸入放到方程中,也就是我們用Caffe2搭建的ResNet-50模型。注意在這k臺機(jī)器上每一臺都有函數(shù)參數(shù)的一套拷貝。我們同時在這些GPU/機(jī)器上調(diào)用模型方程,得到分類器的輸出,以及關(guān)于真實數(shù)據(jù)標(biāo)注的邏輯回歸損失。在這張圖里就是結(jié)果Result。

開源神經(jīng)網(wǎng)絡(luò)框架Caffe2全介紹

上一部我在每臺機(jī)器上得到了模型在所有數(shù)據(jù)上的邏輯回歸損失。那么利用Caffe2提供的自動求導(dǎo)功能,我們可以針對本地的數(shù)據(jù)算出我們的模型在這些數(shù)據(jù)上的本地導(dǎo)數(shù), local grad。那么下一步呢?下一步如果我們像普通的機(jī)器學(xué)習(xí)訓(xùn)練算法直接把導(dǎo)數(shù)加到本地的參數(shù)上,那么我們就變成了同時訓(xùn)練k個模型了。這和我們的目標(biāo)不符合,我們的目標(biāo)是訓(xùn)練一個好的模型,這個模型需要把所有數(shù)據(jù)看100遍。所以我們需要先同步(synchronize)所有機(jī)器上算出來的導(dǎo)數(shù),得到一個統(tǒng)一的導(dǎo)數(shù),再作用到每分本地參數(shù)拷貝上。

在數(shù)據(jù)并行的分布式訓(xùn)練中,同步一直是最重要的一環(huán)。在我們的這次訓(xùn)練中,我們使用的是一種叫做全相加的同步方式。也就是把每個機(jī)器算出來的導(dǎo)數(shù),全都加在一起。這里用P來代表,也可以用G,指代更加清楚。

開源神經(jīng)網(wǎng)絡(luò)框架Caffe2全介紹

一個信息:ResNet-50一共有2千5百萬個參數(shù)需要算導(dǎo)數(shù)并同步。那么在計算機(jī)里,大約是100MB的大小。這在今天這個時代,聽起來不是什么海量數(shù)據(jù)。

這里需要提出一個概念:同步效率。這個指標(biāo)代表了同步給系統(tǒng)帶來時間延遲有多少。

開源神經(jīng)網(wǎng)絡(luò)框架Caffe2全介紹

他的分子上是兩項時間的相加。Tf代表在神經(jīng)網(wǎng)絡(luò)正向運算的時候消耗的時間,Tb代表反向運算的時間。這兩項時間相加代表了在假象的完美的0同步時間系統(tǒng)中訓(xùn)練需要的時間。分母上第一項依然是正向時間Tf,第二項是反向時間和同步時間的最大值。同步時間由我們需要傳輸?shù)臄?shù)據(jù)量M除以系統(tǒng)帶寬B得到。之所以在返鄉(xiāng)時間和同步時間取最大值是因為神經(jīng)網(wǎng)絡(luò)參數(shù)反向運算是有序的。在算完了反向第一層的參數(shù)導(dǎo)數(shù)后我們就能開始同步。

理論上在這個效率是100%的時候,同步不會對訓(xùn)練系統(tǒng)帶來任何延遲。效率越高,同步給系統(tǒng)帶來的延遲最少。

如果我們把實際的數(shù)據(jù)帶入到上一頁的公式中。在Tesla P100上resnet單次處理32張圖片,正向時間大概是0.06秒,60ms,反向時間120ms。那么如果我們這個系統(tǒng)想要達(dá)到50%的同步效率,也就是理論上起碼一半的時間在做主要的訓(xùn)練工作,我們必須得在200ms中完成256臺機(jī)器的本地導(dǎo)數(shù)全相加同步。這時候,100MB看起來就很多了。

開源神經(jīng)網(wǎng)絡(luò)框架Caffe2全介紹

針對同步我們做了很多優(yōu)化。比如我們做了多層次的同步。我們會在第一步先在機(jī)器本地把GPU們的數(shù)據(jù)做一次全相加。在圖里比如左上方,就是把四張GPU卡的數(shù)據(jù)合并。第二步我們通過互相拷貝做機(jī)器間的全相加同步。第三步我們把計算出的統(tǒng)一數(shù)據(jù)再在機(jī)器內(nèi)部分發(fā)到所有GPU上。

開源神經(jīng)網(wǎng)絡(luò)框架Caffe2全介紹

還有一個值得一提的優(yōu)化。我們研究了resnet中出現(xiàn)的參數(shù)的大小。 這張圖是一張resnet中參數(shù)大小及其數(shù)量的圖表。橫軸是參數(shù)大小,縱軸是參數(shù)的數(shù)量。我們可以看到左半邊是小參數(shù),右半邊是大參數(shù)。

開源神經(jīng)網(wǎng)絡(luò)框架Caffe2全介紹

我們發(fā)現(xiàn)大的參數(shù)和小的參數(shù)在同步的時候表現(xiàn)出不同的性質(zhì)。小參數(shù)我們稱為latency bound, 延遲限制的參數(shù)。這類參數(shù)的同步過程中,同步的時間很短,主要的時間在等待別的機(jī)器的運算結(jié)果。針對這類參數(shù),我們實現(xiàn)了樹形的參數(shù)同步算法,能夠最快地同步這些參數(shù)。大的參數(shù)通常是bandwidth bound,帶寬限制的參數(shù)。這類參數(shù)的同步時間很大。我們針對這類參數(shù)實現(xiàn)了環(huán)狀的同步算法。盡可能地減少同步次數(shù)并盡早開始同步過程,更充分利用帶寬。

在這項工作中我們還做了很多別的如數(shù)據(jù)讀入,GPU通訊的優(yōu)化。我們也開源了我們的分布式訓(xùn)練通訊框架Gloo。由于時間的原因,在這里我們不能更多展開了。有興趣的朋友可以來參考我們的論文。

今天的演講講了很多,總結(jié)一下。

Caffe2是一個工業(yè)級的高拓展性高性能的神經(jīng)網(wǎng)絡(luò)框架。在CPU端,我們調(diào)用我們開發(fā)的高性能CPU庫NNPACK。在移動端,我們有包括iOS Metal,OpenGL等一套底層實現(xiàn)。在分布式訓(xùn)練端,我們可以加載分布式通訊庫Gloo并完成大規(guī)模分布式訓(xùn)練。另外,Caffe2完全開源,大家可以添加自己想要的更快的訂制底層實現(xiàn)。

開源神經(jīng)網(wǎng)絡(luò)框架Caffe2全介紹

在開發(fā)Caffe2的過程中,我們經(jīng)常被問到這個問題:你們和原來的Caffe有什么區(qū)別?總結(jié)下來有以下這些區(qū)別。

開源神經(jīng)網(wǎng)絡(luò)框架Caffe2全介紹

1.Caffe2有更好的規(guī)模拓展性。今天的演講里也給大家加少了很多大規(guī)模訓(xùn)練的例子,比如翻譯,比如imagenet-1k in an hour。這些大規(guī)模訓(xùn)練的例子都已經(jīng)在Facebook級別的數(shù)據(jù)量和系統(tǒng)上經(jīng)過了實戰(zhàn)檢驗。

2.Caffe2對手機(jī)端移動部署神經(jīng)網(wǎng)絡(luò)有一整套支持。比如今天我們提到的手機(jī)端實時風(fēng)格變換。這是原來的Caffe做不到的

3.是模塊化。Caffe2是一個高模塊化的神經(jīng)網(wǎng)絡(luò)框架。我今天也展示了我們和Gloo,和NNPACK,和Metal等一系列其他代碼/業(yè)務(wù)邏輯的整合樣例。Caffe2可以更好的融入到業(yè)務(wù)邏輯中去。

總而言之,Caffe2是一個跨平臺的新型工業(yè)級神經(jīng)網(wǎng)絡(luò)框架。我們在移動端,服務(wù)器端,物聯(lián)網(wǎng)設(shè)備,嵌入式系統(tǒng)都能部署Caffe2訓(xùn)練的模型。希望在不久的將來,Caffe2可以幫助大家在各種各樣的設(shè)備上部署新的人工智能算法。

(完)

AI研習(xí)社注:文中插圖截取自作者在GTC China 2017大會演講視頻,點擊鏈接即可觀看。

雷峰網(wǎng)版權(quán)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。

開源神經(jīng)網(wǎng)絡(luò)框架Caffe2全介紹

分享:
相關(guān)文章

編輯

聚焦數(shù)據(jù)科學(xué),連接 AI 開發(fā)者。更多精彩內(nèi)容,請訪問:yanxishe.com
當(dāng)月熱門文章
最新文章
請?zhí)顚懮暾埲速Y料
姓名
電話
郵箱
微信號
作品鏈接
個人簡介
為了您的賬戶安全,請驗證郵箱
您的郵箱還未驗證,完成可獲20積分喲!
請驗證您的郵箱
立即驗證
完善賬號信息
您的賬號已經(jīng)綁定,現(xiàn)在您可以設(shè)置密碼以方便用郵箱登錄
立即設(shè)置 以后再說