當(dāng)AI遇上數(shù)據(jù)庫?將會上演何劇情?

前文小言:最近想要從數(shù)據(jù)庫角度入手來提升AI應(yīng)用訓(xùn)練過程的效率,所以找到了這篇2016年的文章《Database Meets Deep Learning: Challenges and Opportunities》。文章只有6頁,讀完后有一些想法體會,于是將相關(guān)收獲與文章內(nèi)容總結(jié)于此。歡迎一同交流。

文章概述

深度學(xué)習(xí)的火爆程度我就不用舉例來說明了,現(xiàn)在各大實(shí)驗(yàn)室基本均將AI這個工具納入麾下。而數(shù)據(jù)庫作為計算機(jī)領(lǐng)域的老牌技術(shù),也已經(jīng)深入學(xué)術(shù)界與企業(yè)內(nèi)部。那么當(dāng)新舊兩種事務(wù)相見時會發(fā)生怎樣的故事呢?他們有何相似性呢?又如何發(fā)掘各自的特征來相輔相成呢?聽文章娓娓道來。:)

背景介紹

深度學(xué)習(xí)其實(shí)早在20年前就 已經(jīng)出現(xiàn),而為何在當(dāng)今時刻復(fù)蘇呢?原因可以歸結(jié)為:(1)GPU等的出現(xiàn)使得算力越來越強(qiáng),以至于新的模型能夠很快的被建立;(2)數(shù)據(jù)集的獲取越發(fā)的方便,并且更多領(lǐng)域的知識容易通過數(shù)據(jù)集來被機(jī)器所獲知。

對于數(shù)據(jù)庫領(lǐng)域的研究人員來說,當(dāng)自身的研究方向遇上了發(fā)展迅猛的AI應(yīng)該怎么考慮問題呢?

首先,數(shù)據(jù)庫領(lǐng)域的知識能否幫助AI?其中包括AI的訓(xùn)練與推理階段。一般來說,一個效果顯著的模型都不外乎具有大的數(shù)據(jù)集來訓(xùn)練并且模型相對較為復(fù)雜。但是兩面性同樣存在,這么大的數(shù)據(jù)集與這么復(fù)雜的模型勢必會帶來大的訓(xùn)練開銷。于是像Caffe,Tensorflow等框架孕育而生。了解這些框架的學(xué)者不難發(fā)現(xiàn),AI應(yīng)用于數(shù)據(jù)庫需要考慮相似的問題來進(jìn)行優(yōu)化,例如分布式與內(nèi)存管理。

第二,深度學(xué)習(xí)的技術(shù)能否反饋與數(shù)據(jù)庫?以此幫助數(shù)據(jù)庫更好的發(fā)展?這個問題同樣值得深入考慮,尤其是需要針對數(shù)據(jù)庫與AI各自的特性來進(jìn)行思考。

深度學(xué)習(xí)有什么特性呢?首先它在預(yù)測未知事件上是“專家”。然而深度學(xué)習(xí)需要前期大量的數(shù)據(jù)集來補(bǔ)充“知識”,而數(shù)據(jù)庫中的數(shù)據(jù)也有其各自的特點(diǎn),所以如何在減少預(yù)測開銷與難度的情況下做到對未知事件的準(zhǔn)確預(yù)測,無疑是一個挑戰(zhàn)。

由于許多讀者對AI并不是特別了解,這里我也簡單的介紹一下AI的一些背景。

image.png

如上圖所示,深度學(xué)習(xí)模型在訓(xùn)練的時候包括如下幾步:(1)初始化網(wǎng)絡(luò)參數(shù),這里可以隨機(jī),可以使用一些技巧;(2)讀取一批次的數(shù)據(jù)用于訓(xùn)練;(3)計算梯度,這里通常有一些算法,例如Back Propagation (BP);Contrastive Divergence (CD) 與Back Propagation Through Time (BPTT),這里就不詳細(xì)說明各個算法的具體內(nèi)容,總之這些算法能夠使得我的模型向著更好的解移動;(4)更新梯度。

這其中設(shè)計到底層相關(guān)的數(shù)據(jù)讀取問題,數(shù)據(jù)處理問題,同時還包括計算時臨時數(shù)據(jù)是否會非常大等問題。這些問題都有待我們使用更優(yōu)的算法解決。

AI老兄,讓數(shù)據(jù)庫拉你一把

目前的AI訓(xùn)練包括單機(jī)與分布式。我們首先看單機(jī)情況。

目前提升訓(xùn)練效率的最有效方案是使用GPU,其中也包括FPGA。

我們?nèi)绾胃咝У氖褂糜布Y源?

image.png

如上圖所示,在運(yùn)行該流程之前系統(tǒng)可以對整個計算進(jìn)行檢測,此時系統(tǒng)發(fā)現(xiàn)W1與W2之間并沒有依賴,于是a1與a2操作可以并行執(zhí)行。而這種并行操作的思想在數(shù)據(jù)庫中也類似。數(shù)據(jù)庫中在事務(wù)執(zhí)行與查詢過程中同樣需要考慮之間是否有依賴,并且如何解決這些依賴對我整體性能的影響。論文中介紹到數(shù)據(jù)庫習(xí)慣使用額外的消費(fèi)模型來評價數(shù)據(jù)庫的操作是否劃算。而對于DL來說,我們是否同樣可以利用此想法來尋求一個評價模型幫助我們評價并行是否合理的問題。并且可以將資源的問題引入來將有限的資源用到更重要的地方。

第二個要考慮的地方是內(nèi)存管理的問題。

深度學(xué)習(xí)模型勢必隨著發(fā)展而越來越大,占用內(nèi)存空間將越來越多。而許多研究同樣來解決內(nèi)存占用越來越大的問題,比如(1)《 Low precision arithmetic for deep learning》中CUDA目前使用16位的單精度浮點(diǎn)數(shù)來進(jìn)行計算,從而降低存儲使用量;(2)同樣內(nèi)存共享也被使用,例如上圖中變量x = sigmoid(x),輸入輸出均為x則可以共享使用;(3)GPU與CPU的共享同樣解決的GPU空間不足的問題,其中將一些變量在兩者之間交換從而解決一些問題;(4)除此之外,一些系統(tǒng)在運(yùn)行過程中釋放掉了一些暫時不使用的變量內(nèi)存,并且在必要時再對其進(jìn)行計算。

在數(shù)據(jù)庫領(lǐng)域中,內(nèi)存管理同樣是個熱點(diǎn)問題。其中包括空間局部性,page與cache優(yōu)化問題等。除此之外數(shù)據(jù)恢復(fù)在數(shù)據(jù)庫中同樣重要。于是log技術(shù)在數(shù)據(jù)庫中出現(xiàn)的次數(shù)很多。而在考慮Deep Learning的時候,是否需要考慮垃圾回收?是否需要使用內(nèi)存池技術(shù)?結(jié)合GPU的情況下上述方案如何進(jìn)行設(shè)計?

分布式訓(xùn)練

為了加速訓(xùn)練過程,通常的做法是使用分布式的方法。其中最常用的方案是PS架構(gòu)(有主服務(wù)器),節(jié)點(diǎn)將參數(shù)傳遞給主服務(wù)器,并由其來分發(fā)更新的參數(shù)。在分布式的做法中包括了兩種并行方案:數(shù)據(jù)并行與模型并行。數(shù)據(jù)并行需要各個節(jié)點(diǎn)持有部分?jǐn)?shù)據(jù),而模型并行使得每個節(jié)點(diǎn)分的模型的一部分與整個數(shù)據(jù)。

在這個領(lǐng)域我們需要討論通信的問題。由于模型參數(shù)較多,所以worker 與服務(wù)器之間的通信開銷非常大。所以同樣有一些一部的通信方案被提出。此外,單機(jī)中的多個GPU之間的通信問題同樣值得思考。

(1)參數(shù)與梯度是否可以被壓縮?或者如何壓縮以減少通信量?
(2)如何設(shè)計新的集群管理方案來減少單節(jié)點(diǎn)的壓力?
(3)是否可以使用更高效的網(wǎng)絡(luò)方案,如RDMA?該如何使用?

一致性問題我們同樣需要考慮,例如同步與異步訓(xùn)練下如何保持各個節(jié)點(diǎn)上參數(shù)一致性?

錯誤的恢復(fù)在數(shù)據(jù)庫中是一個非常重要的研究方向。其中通過log與checkpoint可以解決這個問題。而目前深度學(xué)習(xí)框架主要基于checkpoint文件。然而這里我們需要注意的是,頻繁的checkpoint會導(dǎo)致嚴(yán)重的開銷。與數(shù)據(jù)庫不同的地方是,AI系統(tǒng)中例如SGD可以容忍一定程度的錯誤,所以log并不需要進(jìn)行次數(shù)太多。

這里我們需要注意的是如何根據(jù)SGD的特性與系統(tǒng)的特性來設(shè)計新的高效容錯方案。由于分布式訓(xùn)練系統(tǒng)會復(fù)制模型的狀態(tài)信息,所以這里可以使用模型狀態(tài)來代替ckpt文件。

最后我們放一張圖來總結(jié)一下目前的AI系統(tǒng)所具有的技術(shù)。此圖中的技術(shù)截至到2016年7月。

image.png

總結(jié)

總結(jié)來說,數(shù)據(jù)庫中許多思想其實(shí)可以用于AI系統(tǒng),而我們是否可以考慮使用數(shù)據(jù)庫本身這個技術(shù)來反饋AI?后期需要結(jié)合這兩個領(lǐng)域多多思考。本文為一些個人想法,其中結(jié)合所閱讀的文章與最近的一些積累。將此記錄于此,歡迎批評指正。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容