在鈦媒體Pro專業(yè)用戶和付費用戶專享的“鈦坦白”在線課堂第33期,我們再次請來三位鈦客分享對機器學習的思考 。本期鈦客之一、百度資深工程師、Paddle API重構(gòu)設計負責人于洋,從事百度深度學習平臺PaddlePaddle開發(fā)工作。加入百度后一直從事深度學習系統(tǒng)的研發(fā),主要負責深度學習系統(tǒng)的性能優(yōu)化和功能開發(fā)工作。2016年獲得百度年輕高潛人才(YTP)項目成員以及百度最佳個人。
本文節(jié)選自于洋在鈦坦白的分享。如果您還不是鈦媒體Pro用戶,希望查看鈦坦白所有干貨,進入鈦坦白九個專業(yè)群交流,并查看更豐富的專業(yè)數(shù)據(jù)和信息,可點擊:http://m.chcmb.cn/pro 注冊。
以下根據(jù)于洋在鈦坦白的分享實錄整理:
大家晚上好,我是來自于百度深度學習實驗室的于洋,在百度主要從事百度深度學習系統(tǒng)PaddlePaddle的開發(fā),今天給大家?guī)淼姆窒眍}目是《深度學習系統(tǒng)本身所面臨的一些挑戰(zhàn)》。
先思考一個AI落地的真實問題
AI已經(jīng)是一個很火的話題,但是AI如何在中小企業(yè)落地,其實牽扯到很多現(xiàn)實的問題。比如一個最簡單的問題,如何通過語音來控制電視,我們認為有四種解法:
1、用AI HUB,也就是說將神經(jīng)網(wǎng)絡的模型放到一個芯片或者是一個很小的機器里讓這個機器去控制電視。這個AI Hub不應該放到電視。例如Amazon Alexa或者Google Home。二者雖然實現(xiàn)了聲控,但是人可能在屋里到處走動,不是身在何處都能喚醒Alexa的。
但這么做其實不是特別經(jīng)濟,因為如果要讓AI去控制電視的話,首先每一臺電視都要具有神經(jīng)網(wǎng)絡的預測功能,同時當用戶的真實數(shù)據(jù)預測完之后,神經(jīng)網(wǎng)絡也要去根據(jù)用戶的新數(shù)據(jù)去重新訓練模型,讓模型更好。這就要求一個芯片既具備神經(jīng)網(wǎng)絡的推斷能力,又具備訓練能力。
2、提供一個深度學習的API給大家,比如百度提供一個深度學習訓練和預測的平臺。大家愿不愿意把自己的數(shù)據(jù)放到百度或者谷歌的云盤里,讓百度給大家提供機器學習訓練預測的API呢?
我想這在很多場景下是不現(xiàn)實的。第一個原因是,用戶要學會用API就很難,要在IoT上調(diào)用API更難。另一個原因是,在百度PaddlePaddle團隊和其他企業(yè)進行交流的時候發(fā)現(xiàn),大部分企業(yè)都想用的是私有云。不使用公有云的理由其實不是成本,主要還是公有云可能帶來的數(shù)據(jù)安全問題,因為對于企業(yè)來說真正有價值的東西其實是訓練數(shù)據(jù)。
3、企業(yè)自己搭一個AI的專用集群,或者說買一百臺GPU機器只去跑深度學習的訓練,這樣做是不是可行的呢?我想也是不可行的,因為專用的AI集群的GPU是非常昂貴的,大體上,租用一個AWS GPU instance一年的費用和買一臺一樣。而專用集群的集群利用率并不會非常高,因而很不劃算。至于專用集群的利用率為什么不會很高,我們稍后再講。
4、PaddlePaddle提出的目標是做一個通用的AI集群。通用的意思是AI集群里既可以跑神經(jīng)網(wǎng)絡的訓練任務也可以跑其他的任務,對于各項任務既可以跑生產(chǎn)環(huán)境的作業(yè),也可以跑實驗性作業(yè)。這樣一來,一個企業(yè)里各個業(yè)務的各個團隊都可以使用同一個機群,甚至如果部署到云上可以使不同企業(yè)一起用一個機群。你不用的時候我用,你的作業(yè)用GPU同時我的在用磁盤,從而使得機群的總體利用率大幅提升。
選擇專用集群還是通用集群?
下面這張圖是谷歌Deepmind的AlphaGo所使用的資源使用情況??梢钥吹?,在最后分布式的時候使用了280塊GPU:
下圖是百度的GPU訓練機器,我們的一臺機器就可以支持16塊GPU顯卡,最多可以擴展到64塊顯卡:
所以這種深度學習的專用集群地球上沒有幾個企業(yè)能真正玩得起。比如說百度的機器翻譯系統(tǒng),在我們組訓練的時候,可能會用32塊K40的GPU做十天左右的訓練;谷歌的機器翻譯用了96塊K80做GPU訓練;AlphaGo其實用了50塊GPU訓練了一個月。這些昂貴的使用成本是初創(chuàng)企業(yè)所不能承受的,也是不應該承受的。
為什么像百度、谷歌或者微軟之類的大公司可以承受這樣成本呢?其實原因還是比較簡單的,在這些公司,深度學習在產(chǎn)品線里應用是比較廣的。比如大部分的百度產(chǎn)品線都使用了PaddlePaddle,利用深度學習提升這些產(chǎn)品的功能和用戶體驗。
大家如果調(diào)試過深度學習任務就可以很明顯知道, 深度學習任務是有一定的資源使用周期的。比如在實驗剛剛開始的時候,用戶可能從大量的數(shù)據(jù)中采樣出來一個小的樣本集合,在這個小的樣本集合里調(diào)通一個比較好的模型。在這個階段里,機器的使用量其實是不大的,可能只有單臺機器或者幾塊顯卡。之后,為了驗證這個模型的效果,可能會將全量的數(shù)據(jù)進行線下的訓練,也就是用一個專用的深度學習集群去做訓練,在這個階段可能會提交幾十到上百個計算機機器的訓練任務,這些機器每一臺都可能有數(shù)塊顯卡。
用戶的模型在線下訓練中得以驗證正確,在大數(shù)據(jù)集上可以再對模型進行一些精細化調(diào)整,從而將模型打造成可以用來做線上預測的狀態(tài)。線上預測時使用的機器數(shù)量明顯要少于訓練時的機器數(shù)量,這是因為預測的時候,其實不需要將神經(jīng)網(wǎng)絡的前饋和反饋全跑一遍,也不需要去反復的跑訓練集。
在這個預測模型上線之后,收集到用戶提供的新的數(shù)據(jù)和真實的反饋。我們將這些日志進行收集,從而進行一些增量訓練,進而讓我們的模型越來越好。在增量訓練之后,就是更新預測模型,預測和增量訓練的再一個循環(huán)過程。
可以看到一個初創(chuàng)企業(yè)如果只有少數(shù)的幾個深度學習任務,由于深度學習任務的周期性,專用的深度學習集群一定不會有非常高的使用率,大體上能有20%的使用率就已經(jīng)很不錯了。但像在百度、谷歌之類的大公司,有各種各樣的產(chǎn)品線,這些產(chǎn)品線都需要使用深度學習進行一些提升,所以這些任務雖然有周期性,但是任務和任務之間發(fā)生的時間是不同的,所以就形成了各個任務之間的一個疊加效應。
我看群里面大家基本上都是相關(guān)領(lǐng)域的研究者或者創(chuàng)業(yè)創(chuàng)新的人員。針對創(chuàng)業(yè)創(chuàng)新的人員,其實部署一個專用的AI集群成本是非常高的,然而使用率是非常低的。專用的AI集群在我們看來只適合于大型的互聯(lián)網(wǎng)公司,而且這個互聯(lián)網(wǎng)公司要有多種多樣的AI業(yè)務,如果有少量的AI業(yè)務的公司或者是初創(chuàng)型企業(yè),我們推薦使用通用集群去做深度學習的訓練集群。
PaddlePaddle從專用集群到通用集群的改變
PaddlePaddle在去年9月份開源之前也是運行在百度內(nèi)部的一個專用AI集群中。 在這個集群里面,它的機器都是同構(gòu)的,也就是說大家的CPU型號包括顯卡的型號都是一樣的,也是基于MPI進行調(diào)度,內(nèi)網(wǎng)運行環(huán)境也是隔離的,也是穩(wěn)定的。所以在去年9月PaddlePaddle開源之前,百度對PaddlePaddle的要求只有一個,就是盡量快,在盡量短的時間內(nèi)完成更多的任務。PaddlePaddle還有一個特點是因為百度本身是一個搜索企業(yè),PaddlePaddle為了服務百度更多的產(chǎn)品線,它在自然語言處理方面打造得會更好。
PaddlePaddle的運行效率可謂是刻在PaddlePaddle基因里的一件東西,我們在開源之后,和Caffe還有TensorFlow做了一些benchmark,結(jié)果如下面三張圖所示。PaddlePaddle和其他框架在單顯卡上的速度都差不多,但是在多顯卡的速度上,Caffe是明顯要慢的,Tensorflow和PaddlePaddle其實在多顯卡的聚合上也差不多,PaddlePaddle會稍微快一點。但是在LSTM上,PaddlePaddle可以顯示出明顯的優(yōu)勢,如下圖可以看出,PaddlePaddle在單顯卡的時候就已經(jīng)比Tensorflow在LSTM網(wǎng)絡結(jié)構(gòu)里要快一些,LSTM在4GPU下,可以看到PaddlePaddle實際上比Tensorflow要快很多。
但是單純的單機和集群跑得快,已經(jīng)不是PaddlePaddle現(xiàn)階段的目標。因為我們相信,只有在通用集群上跑得更快,才能服務更多的中小企業(yè),也才能夠讓更多的人接受PaddlePaddle,也才能夠給社會帶來更大的價值。
通用AI集群應該怎么搭建?
專用集群其實是更常見的一種集群配置模式。比如說我們公司有存儲的需求,我就配置一個Hadoop集群去使用HDFS,有線下處理的需求,我再用Hadoop的Map-Reduce集群去做線下處理。對于網(wǎng)站的話,網(wǎng)站前端大家會配置一個nginx集群,再使用kalfka將網(wǎng)站的一些日志收集下來,再給AI處理。
專用集群的架構(gòu)就是把幾個事情分別部署在不同的機器里,這些機器是相互隔離,不能互相訪問的。這樣做的好處其實是顯而易見的,因為不同應用分別跑在不同的物理機里,可以避免不同應用之間的相互影響,但是壞處也很明顯,就是成本會很高,每個集群其實物理硬件的利用率是不夠的。
下面我以一個語音識別服務舉例,說明一個通用AI集群應該怎么搭建。
下圖是一個通用集群的簡單示意圖,這個集群里有很多GPU的服務器,也有很多CPU的服務器,他們都部署在一個集群里。在這個集群的機器之上運行著Kubernetes。Kubernetes是一個谷歌開源的分布式的操作系統(tǒng)。在2007年的時候,谷歌就使用集群操作系統(tǒng)Borg,通過混合部署各種來源的各種任務,將CPU的利用率一直維持在75%到80%左右。而Kubernetes開發(fā)之前是Borg開發(fā)團隊中的一部分,Kubernetes的設計繼承了Borg項目多年總結(jié)的經(jīng)驗,是目前最先進集群操作系統(tǒng)。
這對企業(yè)的成本是一個極大的降低。之前我們說過普遍專用集群的資源利用率大概在20%左右,如果我們使用一個集群操作系統(tǒng)去管理集群的任務,那么硬件利用率可以提升到75%到80%左右,這樣一個通用集群就相當于普通的四個左右的專用集群。
通用集群數(shù)據(jù)還是存儲在HDFS上,在HDFS上有一些有標簽的數(shù)據(jù),這些數(shù)據(jù)送給PaddlePaddle做線下訓練。在這個系統(tǒng)的前端就是一個語音識別的服務,用戶去提交自己的語音后返回一段文字。在這個前端語音識別API里用戶實時提交的語音數(shù)據(jù)就形成了一個實時的日志,這個日志就會被其他的進程收集下來,比如使用Kalfka進行收集,再去做一些線上的預處理,進而將這些數(shù)據(jù)繼續(xù)傳遞給PaddlePaddle做訓練。這樣PaddlePaddle既可以支持線下的大批量的數(shù)據(jù)訓練,也可以支持線上的實時的數(shù)據(jù)訓練。
在目前眾多的深度學習平臺里似乎沒有一個平臺再去考慮如何在通用集群里更好地進行訓練。這是因為大部分的深度學習平臺都是大企業(yè)開發(fā)的,在大企業(yè)中,通用集群的訓練對他們來講并不重要,但這對初創(chuàng)企業(yè)是至關(guān)重要的。
通用集群對深度學習系統(tǒng)的挑戰(zhàn)
挑戰(zhàn)主要有這么幾方面:
- 通用集群首先會將任進程成很多的組,每組構(gòu)成一個Job,這些作業(yè)中,有的是Web 服務,有的是流式數(shù)據(jù)處理作業(yè),還有深度學習作業(yè);
- 這個集群需要做到服務隔離、多用戶,因為這個集群上跑了眾多的任務,一個任務掛掉不可以讓其他的任務有任何的問題,并且由于這個集群是直接的線上集群,所以它的穩(wěn)定性要求還是非常高的;
- 這個集群需要有一定的優(yōu)先級調(diào)度的能力,比如他需要首先保證線上任務的穩(wěn)定性,但是也需要在機器空余的時候可以去做低優(yōu)先級的任務,比如實驗性質(zhì)的任務;
- 在這種集群里,可以對硬件進行高效的利用,比如說一個Hadoop任務,比如說HDFS可能更需要的是磁盤的IO或帶寬,但是對于深度學習任務來講可能更多需要CPU的計算能力和GPU的計算能力,他們就可以調(diào)度到同一個物理節(jié)點上;
- 這個集群還需要有自動伸縮的功能,比如在白天,活躍用戶眾多,集群會用盡量少的節(jié)點做深度學習的訓練,而用更多的節(jié)點去做深度學習的預測或者是一個web服務進程。但是在晚上,我們的用戶又比較少,閑置的機器就可以去做更多的機器學習的訓練任務,讓模型變得越來越好;
- 深度學習系統(tǒng)必須有一定的錯誤容忍能力,也就是說在運行過程中,我們可以殺死任意多的訓練節(jié)點,將機器騰出來保證其他的任務運行。這里就涉及到一個問題,傳統(tǒng)上很多研究人員以為減少一個作業(yè)的運行時間就是提升效率,而實際上真正的優(yōu)化目標應該是讓更多研究人員能并行工作,讓機群總是“累著” —— 這樣來提升團隊和公司效率。
以上內(nèi)容希望能夠讓大家明白,PaddlePaddle為什么要做通用集群下的可伸縮訓練。
PaddlePaddle的規(guī)劃和目標
PaddlePaddle開源了以后,和作為百度內(nèi)部的一個項目有非常大的差別,我們從原來只追求高性能和功能,漸漸的要過渡到下圖所示的幾個目標。我們所有的事情只有一個最重要的點,也就是中間的那個橘色的方塊,我們希望讓大家的業(yè)務變得awesome,變得非常炫,非常給力。我們評價PaddlePaddle“給力”的標準不是發(fā)了多少論文、被多少媒體提及,而是解決用戶痛點,讓用戶爽。
通用集群下的可伸縮PaddlePaddle只是我們目標里的一部分,希望大家能夠持續(xù)關(guān)注PaddlePaddle的進一步發(fā)展。
在這里我也想介紹一些我們其他的工作,比如說我們寫了一本深度學習實戰(zhàn)手冊,目前已經(jīng)寫完了八章,點擊鏈接前往:http://book.paddlepaddle.org/ 在這個手冊里,我們舉了八個例子,教大家深度學習應該怎么入門和怎么在真實的場景中使用。
每一個例子都是精心設計過的,比如說其中的一章情感分類。所謂情感分類就是將一個文本分類成正向情感還是負向情感,實際上就是一個簡單的文本分類問題。單純套用文本分類的模型,我們可以去解決如下圖所列各種各樣的問題。
PaddlePaddle作為一個年輕的開源深度學習系統(tǒng),也面臨著非常多的挑戰(zhàn)。我們會以更加開放的心態(tài)來迎接所有的挑戰(zhàn)。PaddlePaddle作為一個開源軟件,所有的開發(fā),包括設計和討論全在Github進行,目前已經(jīng)有不少百度之外的團隊參與到開發(fā)中來了。其中有從事AI的公司,也有做分布式操作系統(tǒng)技術(shù)的公司。大家一起在Github上借review設計和提交代碼討論交流。
我們也希望可以看到更多的企業(yè)構(gòu)建出更多支持AI的通用集群,幫助越來越廣泛的企業(yè)將他們的業(yè)務變得更好,更awesome。同時PaddlePaddle作為源于百度企業(yè)里的深度學習框架,我們也會促進開源盡量多的工業(yè)界成熟模型,來幫助更多其他企業(yè)來提升自己的業(yè)務。
鈦坦白群友互動:
1.請問人工智能公眾服務如何保障用戶的隱私和數(shù)據(jù)安全?
于洋:我其實也不是這方面的專家,我談一下自己的想法。就PaddlePaddle而言,我們的策略是提供一個能夠在私有云或者說在本地直接部署的PaddlePaddle,這樣用戶就不需要將敏感的數(shù)據(jù)傳遞給PaddlePaddle這個平臺。有一些論文給出的方案,是將深度學習訓練直接部署在手機上,將增量訓練好的模型上傳給服務器,這樣用戶的數(shù)據(jù)就不需要從手機去上傳到服務器,而是直接在手機上進行訓練優(yōu)化。
2.如何保障訓練服務對并發(fā)任務的資源配置的公平性?
于洋:現(xiàn)在有一些開源的集群操作系統(tǒng),比如Kubernetes使用這些集群操作系統(tǒng),我們可以直接去調(diào)度CPU數(shù)和GPU數(shù),也就是計算資源的數(shù)量,這樣每個用戶都可以有自己的一個配額。當用戶的配額超過了他應該用的配額的時候,他的任務就只能等待,當用戶的配額小于他實際上使用的配額,他就有可能會被調(diào)度,這些調(diào)度策略現(xiàn)在有非常成熟的開源平臺,都可以提供。
3.訓練的硬件高投入在本地部署時有辦法解決嗎?
于洋:訓練硬件的高投入我覺得還是有辦法解決的,解決的辦法就是我前面說的,將這個企業(yè)的大部分機器都放在一個特別大通用集群里,這個集群既可以跑深度學習的任務,也可以跑其他的比如說web服務之類的東西。這樣深度學習的機器雖然說你買GPU很貴,但是他平時也可以被其他的任務所利用,不會完全浪費。
4.配額靠經(jīng)濟杠桿在多用戶間協(xié)調(diào)嗎?有沒有定價策略,中小企業(yè)用得起嗎?
于洋:我記得亞馬遜的公有云,也就是AWS上面應該是提供競價實例的,也就是說大家一塊去拍賣一個機器,誰出的價高誰就可以在這個時間段去用這個機器。這樣經(jīng)濟杠桿就起作用了。
(本文獨家首發(fā)鈦媒體,根據(jù)百度資深工程師、Paddle API重構(gòu)設計負責人于洋在鈦坦白上的分享整理)
………………………………
鈦坦白第33期,AI已來之機器學習2,今晚7點繼續(xù)!
地點:鈦坦白 | 人工智能(微信群)
報名聽課、交流:
鈦坦白目前有醫(yī)療健康、人工智能、文娛社交、VR/AR、區(qū)塊鏈、支付創(chuàng)新、體育、云計算、SaaS等九個專業(yè)群。
1、鈦媒體Pro專業(yè)版用戶,可以點擊鏈接http://m.chcmb.cn/pro,登錄賬號,在線免費、任意選擇自己要進入的群,按提示操作;
2、非鈦媒體Pro專業(yè)版用戶,可以添加微信號taitanbai0,在通過好友后,發(fā)99元紅包給小鈦,你將有權(quán)利從九個群中任選一個群進入,長期聽課、交流。請告訴小鈦你要進入哪一個群,然后等待小鈦拉你入群~
推薦鈦客、贊助、合作:
請與鈦坦白負責人佳音聯(lián)系,郵箱jiayinge@tmtpost.com






快報
根據(jù)《網(wǎng)絡安全法》實名制要求,請綁定手機號后發(fā)表評論