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

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

0

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

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

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

我個(gè)人認(rèn)為這是一份很值得分享的資料,因?yàn)椋?/p>

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

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

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

在觀看視頻前你可能需要注意以下幾點(diǎn):

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

  • 此次演講只是談?wù)摿宋易约旱囊恍┛捶ǎ虵B無(wú)關(guān)

  • 我的演講稿和視頻里說(shuō)的可能有一些出入。有的地方為了更好地讓大家理解,我做了自己的解釋。演講稿中有可能有的地方我懶得寫(xiě)但是我在演講中說(shuō)了。有的地方是因?yàn)槲依斫獠粔蛑苯邮清e(cuò)誤的。還有各種錯(cuò)別字。這些都?xì)g迎大家指正,互相學(xué)習(xí)。

以下是演講原文:

大家好 我叫吳逸鳴。我來(lái)自Facebook的Caffe2組。

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

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

Caffe2是:

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

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

  • 為移動(dòng)端實(shí)時(shí)計(jì)算做了很多優(yōu)化

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

  • Caffe2是一個(gè)跨平臺(tái)的框架

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

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

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

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

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

  • 你有模型

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

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

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

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

  • 支持最新的計(jì)算模型

  • 分布式訓(xùn)練

  • 高模塊化

  • 跨平臺(tái)的支持

  • 高效率

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

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

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

  • 機(jī)器翻譯

  • 語(yǔ)音識(shí)別

  • 推薦系統(tǒng)

首先是移動(dòng)端的Caffe2

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • 反向運(yùn)算時(shí)的展開(kāi)單元內(nèi)存重用

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

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

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

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

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

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

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

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

1.自動(dòng)語(yǔ)音識(shí)別

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

2.語(yǔ)音合成

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

(完)

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

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

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

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

編輯

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