在演講中,Jeff Dean 首先介紹了深度學(xué)習(xí)的崛起(及其原因),谷歌在自動(dòng)駕駛、醫(yī)療健康等領(lǐng)域取得的最新進(jìn)展。
Jeff Dean 表示,隨著深度學(xué)習(xí)的發(fā)展,我們需要更多的計(jì)算能力,而深度學(xué)習(xí)也正在改變我們?cè)O(shè)計(jì)計(jì)算機(jī)的能力。
我們知道,谷歌設(shè)計(jì)了 TPU 專門進(jìn)行神經(jīng)網(wǎng)絡(luò)推斷。Jeff Dean 表示,TPU 在谷歌產(chǎn)品中的應(yīng)用已經(jīng)超過(guò)了 30 個(gè)月,用于搜索、神經(jīng)機(jī)器翻譯、DeepMind 的 AlphaGo 系統(tǒng)等。
但部署人工智能不只是推斷,還有訓(xùn)練階段。TPU 能夠助力推斷,我們又該如何加速訓(xùn)練?訓(xùn)練的加速非常的重要:無(wú)論是對(duì)產(chǎn)品化還是對(duì)解決大量的難題。
為了同時(shí)加速神經(jīng)網(wǎng)絡(luò)的推斷與訓(xùn)練,谷歌設(shè)計(jì)了 TPU 二代。TPU 二代芯片的性能如下圖所示:
除了上圖所述意外,TPU 二代的特點(diǎn)還有:
-
每秒的浮點(diǎn)運(yùn)算是 180 teraflops,64 GB 的 HBM 存儲(chǔ),2400 GB/S 的存儲(chǔ)帶寬
-
設(shè)計(jì)上,TPU 二代可以組合連接成大型配置
下圖是 TPU 組成的大型配置:由 64 塊 TPU 二代組成,每秒 11.5 千萬(wàn)億次浮點(diǎn)運(yùn)算,4 太字節(jié)的 HBM 存儲(chǔ)。
在擁有強(qiáng)大的硬件之后,我們需要更強(qiáng)大的深度學(xué)習(xí)框架來(lái)支持這些硬件和編程語(yǔ)言,因?yàn)榭焖僭鲩L(zhǎng)的機(jī)器學(xué)習(xí)和深度學(xué)習(xí)需要硬件和軟件都能具備強(qiáng)大的擴(kuò)展能力。因此,Jeff Dean 還詳細(xì)介紹了最開(kāi)始由谷歌開(kāi)發(fā)的深度學(xué)習(xí)框架 TensorFlow。
深度學(xué)習(xí)框架 TensorFlow
TensorFlow 是一種采用數(shù)據(jù)流圖(data flow graphs),用于數(shù)值計(jì)算的開(kāi)源軟件庫(kù)。其中 Tensor 代表傳遞的數(shù)據(jù)為張量(多維數(shù)組),F(xiàn)low 代表使用計(jì)算圖進(jìn)行運(yùn)算。數(shù)據(jù)流圖用「節(jié)點(diǎn)」(nodes)和「邊」(edges)組成的有向圖來(lái)描述數(shù)學(xué)運(yùn)算。
TensorFlow 的目標(biāo)是建立一個(gè)可以表達(dá)和分享機(jī)器學(xué)習(xí)觀點(diǎn)與系統(tǒng)的公共平臺(tái)。該平臺(tái)是開(kāi)源的,所以它不僅是谷歌的平臺(tái),同時(shí)是所有機(jī)器學(xué)習(xí)開(kāi)發(fā)者和研究人員的平臺(tái),谷歌和所有機(jī)器學(xué)習(xí)開(kāi)源社區(qū)的研究者都在努力使 TensorFlow 成為研究和產(chǎn)品上最好的機(jī)器學(xué)習(xí)平臺(tái)。
下面是 TensorFlow 項(xiàng)目近年來(lái)在 Github 上的關(guān)注度,我們可以看到 TensorFlow 是所有同類深度學(xué)習(xí)框架中關(guān)注度最大的項(xiàng)目。
TensorFlow:一個(gè)充滿活力的開(kāi)源社區(qū)
TensorFlow 發(fā)展迅速,有很多谷歌外部的開(kāi)發(fā)人員
-
超過(guò) 800 多位 TensorFlow 開(kāi)發(fā)人員(非谷歌人員)。
-
21 個(gè)月內(nèi) Github 上有超過(guò) 21000 多條貢獻(xiàn)和修改。
-
許多社區(qū)編寫了 TensorFlow 的教程、模型、翻譯和項(xiàng)目
-
超過(guò) 16000 個(gè) Github 項(xiàng)目在項(xiàng)目名中包含了「TensorFlow」字段
社區(qū)與 TensorFlow 團(tuán)隊(duì)之間的直接聯(lián)合
-
5000+已回答的 Stack Overflow 問(wèn)題
-
80+ 每周解答的社區(qū)提交的 GitHub 問(wèn)題
通過(guò) TensorFlow 編程
在 TensorFlow 中,一個(gè)模型可能只需要一點(diǎn)點(diǎn)修改就能在 CPU、GPU 或 TPU 上運(yùn)行。前面我們已經(jīng)看到 TPU 的強(qiáng)大之處,Jeff Dean 表明,對(duì)于從事開(kāi)放性機(jī)器學(xué)習(xí)研究的科學(xué)家,谷歌可以免費(fèi)提供 1000 塊云 TPU 來(lái)支持他們的研究。Jeff Dean 說(shuō):「我們很高興研究者能在更強(qiáng)勁的計(jì)算力下進(jìn)行更杰出的研究」
TensorFlow Research Cloud 申請(qǐng)地址:https://services.google.com/fb/forms/tpusignup/
機(jī)器學(xué)習(xí)需要在各種環(huán)境中運(yùn)行,我們可以在下面看到 TensorFlow 所支持的各種平臺(tái)和編程語(yǔ)言。
除此之外,TensorFlow 還支持各種編程語(yǔ)言,如 Python、C++、Java、C#、R、Go 等。
TensorFlow 非常重要的一點(diǎn)就是計(jì)算圖,我們一般需要先定義整個(gè)模型需要的計(jì)算圖,然后再執(zhí)行計(jì)算圖進(jìn)行運(yùn)算。在計(jì)算圖中,「節(jié)點(diǎn)」一般用來(lái)表示施加的數(shù)學(xué)操作,但也可以表示數(shù)據(jù)輸入的起點(diǎn)和輸出的終點(diǎn),或者是讀取/寫入持久變量(persistent variable)的終點(diǎn)。邊表示節(jié)點(diǎn)之間的輸入/輸出關(guān)系。這些數(shù)據(jù)邊可以傳送維度可動(dòng)態(tài)調(diào)整的多維數(shù)據(jù)數(shù)組,即張量(tensor)。
如下是使用 TensorFlow 和 Python 代碼定義一個(gè)計(jì)算圖:
在 Tensorflow 中,所有不同的變量和運(yùn)算都儲(chǔ)存在計(jì)算圖。所以在我們構(gòu)建完模型所需要的圖之后,還需要打開(kāi)一個(gè)會(huì)話(Session)來(lái)運(yùn)行整個(gè)計(jì)算圖。在會(huì)話中,我們可以將所有計(jì)算分配到可用的 CPU 和 GPU 資源中。
如下所示代碼,我們聲明兩個(gè)常量 a 和 b,并且定義一個(gè)加法運(yùn)算。但它并不會(huì)輸出計(jì)算結(jié)果,因?yàn)槲覀冎皇嵌x了一張圖,而沒(méi)有運(yùn)行它:
a=tf.constant([1,2],name="a")
b=tf.constant([2,4],name="b")
result = a+b
print(result)
#輸出:Tensor("add:0", shape=(2,), dtype=int32)
下面的代碼才會(huì)輸出計(jì)算結(jié)果,因?yàn)槲覀冃枰獎(jiǎng)?chuàng)建一個(gè)會(huì)話才能管理 TensorFlow 運(yùn)行時(shí)的所有資源。但計(jì)算完畢后需要關(guān)閉會(huì)話來(lái)幫助系統(tǒng)回收資源,不然就會(huì)出現(xiàn)資源泄漏的問(wèn)題。下面提供了使用會(huì)話的兩種方式:
a=tf.constant([1,2,3,4])
b=tf.constant([1,2,3,4])
result=a+b
sess=tf.Session()
print(sess.run(result))
sess.close
#輸出 [2 4 6 8]
with tf.Session() as sess:
a=tf.constant([1,2,3,4])
b=tf.constant([1,2,3,4])
result=a+b
print(sess.run(result))
#輸出 [2 4 6 8]
TensorFlow + XLA 編譯器
XLA(Accelerated Linear Algebra)是一種特定領(lǐng)域的編譯器,它極好地支持線性代數(shù),所以能很大程度地優(yōu)化 TensorFlow 的計(jì)算。使用 XLA 編譯器,TensorFlow 的運(yùn)算將在速度、內(nèi)存使用和概率計(jì)算上得到大幅度提升。
-
XLA 編譯器詳細(xì)介紹: https://www.tensorflow.org/performance/xla/
-
XLA 編譯器開(kāi)源代碼: https://github.com/tensorflow/tensorflow/tree/master/tensorflow/compiler
TensorFlow 的優(yōu)勢(shì)
高性能機(jī)器學(xué)習(xí)模型
對(duì)于大型模型來(lái)說(shuō),模型并行化處理是極其重要的,因?yàn)閱蝹€(gè)模型的訓(xùn)練時(shí)間太長(zhǎng)以至于我們很難對(duì)這些模型進(jìn)行反復(fù)的修改。因此,在多個(gè)計(jì)算設(shè)備中處理模型并取得優(yōu)秀的性能就十分重要了。如下所示,我們可以將模型分割為四部分,運(yùn)行在四個(gè) GPU 上。
高性能強(qiáng)化學(xué)習(xí)模型
通過(guò)強(qiáng)化學(xué)習(xí)訓(xùn)練的 Placement 模型將圖(graph)作為輸入,并且將一組設(shè)備、輸出設(shè)備作為圖中的節(jié)點(diǎn)。在 Runtime 中,給定強(qiáng)化學(xué)習(xí)的獎(jiǎng)勵(lì)信號(hào)而度量每一步的時(shí)間,然后再更新 Placement。
通過(guò)強(qiáng)化學(xué)習(xí)優(yōu)化設(shè)備部署(Device Placement Optimization with Reinforcement Learning,ICML 2017)
-
論文地址:https://arxiv.org/abs/1706.04972
通過(guò)強(qiáng)化學(xué)習(xí)優(yōu)化設(shè)備部署
降低推斷成本
開(kāi)發(fā)人員最怕的就是「我們有十分優(yōu)秀的模型,但它卻需要太多的計(jì)算資源而不能部署到邊緣設(shè)備中!」
Geoffrey Hinton 和 Jeff Dean 等人曾發(fā)表過(guò)論文 Distilling the Knowledge in a Neural Network。在該篇論文中,他們?cè)敿?xì)探討了將知識(shí)壓縮到一個(gè)集成的單一模型中,因此能使用不同的壓縮方法將復(fù)雜模型部署到低計(jì)算能力的設(shè)備中。他們表示這種方法顯著地提升了商業(yè)聲學(xué)模型部署的性能。
-
論文地址:https://arxiv.org/abs/1503.02531
這種集成方法實(shí)現(xiàn)成一個(gè)從輸入到輸出的映射函數(shù)。我們會(huì)忽略集成中的模型和參數(shù)化的方式而只關(guān)注于這個(gè)函數(shù)。以下是 Jeff Dean 介紹這種集成。
訓(xùn)練模型的幾個(gè)趨勢(shì)
1. 大型、稀疏激活式模型
之所以想要訓(xùn)練這種模型是想要面向大型數(shù)據(jù)集的大型模型容量,但同時(shí)也想要單個(gè)樣本只激活大型模型的一小部分。
逐個(gè)樣本路徑選擇圖
這里,可參考谷歌 Google Brain ICLR 2017 論文《OUTRAGEOUSLY LARGE NEURAL NETWORKS: THE SPARSELY-GATED MIXTURE-OF-EXPERTS LAYER》。
2. 自動(dòng)機(jī)器學(xué)習(xí)
Jeff Dean 介紹說(shuō),目前的解決方式是:機(jī)器學(xué)習(xí)專家+數(shù)據(jù)+計(jì)算。這種解決方案人力的介入非常大。我們能不能把解決方案變成:數(shù)據(jù)+100 倍的計(jì)算。
有多個(gè)信號(hào)讓我們看到,這種方式是可行的:
-
基于強(qiáng)化學(xué)習(xí)的架構(gòu)搜索
-
學(xué)習(xí)如何優(yōu)化
如 Google Brain ICLR 2017 論文《Neural Architecture Search with Reinforcement Learning》,其思路是通過(guò)強(qiáng)化學(xué)習(xí)訓(xùn)練的模型能夠生成模型。
在此論文中,作者們生成了 10 個(gè)模型,對(duì)它們進(jìn)行訓(xùn)練(數(shù)個(gè)小時(shí)),使用生成模型的損失函數(shù)作為強(qiáng)化學(xué)習(xí)的信號(hào)。
在 CIFAR-10 圖像識(shí)別任務(wù)上,神經(jīng)架構(gòu)搜索的表現(xiàn)與其他頂級(jí)成果的表現(xiàn)對(duì)比如上圖所示。
上圖是正常的 LSTM 單元與架構(gòu)搜索所發(fā)現(xiàn)的單元圖。
此外,學(xué)習(xí)優(yōu)化更新規(guī)則也是自動(dòng)機(jī)器學(xué)習(xí)趨勢(shì)中的一個(gè)信號(hào)。通常我們使用的都是手動(dòng)設(shè)計(jì)的優(yōu)化器,如下圖所示。
而 Google Brain 在 ICML 2017 的論文《Neural Optimizer Search with Reinforcement Learning》中,就講到了一種學(xué)習(xí)優(yōu)化更新規(guī)則的技術(shù)。神經(jīng)優(yōu)化器搜索如下圖所示:
總結(jié)
最后,Jeff Dean 總結(jié)說(shuō),未來(lái)人工智能的發(fā)展可能需要結(jié)合以上介紹的所有思路:需要大型、但稀疏激活的模型;需要解決多種任務(wù)的單個(gè)模型;大型模型的動(dòng)態(tài)學(xué)習(xí)和成長(zhǎng)路徑;面向機(jī)器學(xué)習(xí)超級(jí)計(jì)算的特定硬件,以及高效匹配這種硬件的機(jī)器學(xué)習(xí)方法。
當(dāng)然,目前在機(jī)器學(xué)習(xí)與系統(tǒng)/計(jì)算機(jī)架構(gòu)的交叉領(lǐng)域還存在一些開(kāi)放問(wèn)題,例如:
-
極為不同的數(shù)值是否合理(例如,1-2 位的激勵(lì)值/參數(shù))?
-
我們?nèi)绾胃咝У奶幚矸浅?dòng)態(tài)的模型(每個(gè)輸入樣本都有不同的圖)?特別是在特大型機(jī)器上。
-
有沒(méi)有方法能夠幫助我們解決當(dāng) batch size 更大時(shí),回報(bào)變小的難題?
-
接下來(lái) 3-4 年中,重要的機(jī)器學(xué)習(xí)算法、方法是什么?
如今,神經(jīng)網(wǎng)絡(luò)與其他方法隨數(shù)據(jù)、模型大小變化的準(zhǔn)確率對(duì)比圖如下:
未來(lái),可能又是一番境況。
演講PPT地址:http://pan.baidu.com/s/1kVyxeB1
-
FPGA
+關(guān)注
關(guān)注
1645文章
22050瀏覽量
618543 -
微處理器
+關(guān)注
關(guān)注
11文章
2383瀏覽量
84187 -
AI
+關(guān)注
關(guān)注
88文章
35164瀏覽量
280000 -
人工智能
+關(guān)注
關(guān)注
1807文章
49029瀏覽量
249561
原文標(biāo)題:Jeff Dean「Hot Chips 2017」演講:AI對(duì)計(jì)算機(jī)系統(tǒng)設(shè)計(jì)的影響
文章出處:【微信號(hào):almosthuman2014,微信公眾號(hào):機(jī)器之心】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
計(jì)算機(jī)網(wǎng)絡(luò)入門指南

評(píng)論