4 月 23 日,首屆 WAVE SUMMIT 2019 深度學(xué)習(xí)開(kāi)發(fā)者峰會(huì)在北京舉辦,現(xiàn)場(chǎng)超千位開(kāi)發(fā)者與來(lái)自百度、英特爾、清華大學(xué)等的科學(xué)家,就框架與深度學(xué)習(xí)展開(kāi)了詳細(xì)的討論。在 WAVE 上,百度從建模、訓(xùn)練到部署,首次對(duì)外公布了 PaddlePaddle 全景圖。
PaddlePaddle新特性完整PPT:https://pan.baidu.com/s/100iWwz-JDvX1dQ2XcJMJQg
提取碼:9cxi
此外,百度還重磅推出算力支持計(jì)劃,宣布為開(kāi)發(fā)者提供總計(jì) 1 億元免費(fèi)算力。免費(fèi)算力主要以兩種模式提供,第一種是一人一卡模式,V100 的訓(xùn)練卡包括 16G 的顯存,最高 2T 的存儲(chǔ)空間。另外一種是遠(yuǎn)程集群模式,PaddlePaddle 提供高性能集群,供開(kāi)發(fā)者免費(fèi)使用。其中最吸引人的是是一人一卡,而我們正好獲得了一張算力卡,它提供 Tesla V100 GPU 這種強(qiáng)大的計(jì)算力資源。
這張算力卡提供了一個(gè)邀請(qǐng)碼,在 AI Studio 的單機(jī)模式中輸入邀請(qǐng)碼就能獲得基礎(chǔ)的 48 小時(shí) V100 算力,而且該卡可以獲得 3 個(gè)新的邀請(qǐng)碼,對(duì)方每接受一次則增加 24 小時(shí)的 V100 算力。所以總的而言,這張算力卡可獲得 120 小時(shí)的 Tesla V100 使用時(shí)間。
現(xiàn)在這張算力卡免費(fèi)贈(zèng)送機(jī)器之心讀者啦~只要你在微信中留言最期待的 PaddlePaddle 更新或改進(jìn),那么截至 26 號(hào)中午 12 點(diǎn),獲得點(diǎn)贊量最多的留言將獲得這張算力卡。
PaddlePaddle 全景圖
正如百度深度學(xué)習(xí)技術(shù)平臺(tái)部總監(jiān)馬艷軍所言:「PaddlePaddle 其實(shí)從去年開(kāi)始就有一個(gè)核心理念的變化,即將其定位為端到端的深度學(xué)習(xí)平臺(tái),而不僅僅是框架?!惯@也就意味著,PaddlePaddle 從底層框架、模型庫(kù),到基于它們構(gòu)建的各種工具,再到完整的開(kāi)發(fā)和服務(wù)平臺(tái),整個(gè)流程應(yīng)該是端到端的,是一種『智能時(shí)代的操作系統(tǒng)』?!?/p>
會(huì)上,百度首次對(duì)外公布了 PaddlePaddle 的全景圖,它從三個(gè)層面囊括了眾多工具與組件。在這次 WAVE 中,百度發(fā)布了眾多新工具與模塊,下圖黃色框的組件就是這次發(fā)布的重點(diǎn)。
總體而言,PaddlePaddle 是集核心框架、工具組件和服務(wù)平臺(tái)為一體的端到端開(kāi)源深度學(xué)習(xí)平臺(tái)。此次,PaddlePaddle 發(fā)布了 11 項(xiàng)新特性及服務(wù),包含 PaddleNLP、視頻識(shí)別工具集、Paddle Serving、PaddleSlim 等多種深度學(xué)習(xí)開(kāi)發(fā)、訓(xùn)練、預(yù)測(cè)的便捷方法,也包含 PaddleHub 和 Auto Design 等面向具體領(lǐng)域的高效用具。
值得注意的是,百度還在 WAVE 現(xiàn)場(chǎng)宣布了「1 億元」的 AI Studio 算力支持計(jì)劃,通過(guò)提供 Tesla V100 免費(fèi)使用時(shí)長(zhǎng),幫助使用者獲得更強(qiáng)大的算力。最后,百度還公布了 PaddlePaddle 的中文名「飛槳」,它的寓意是「PaddlePaddle 是一個(gè)快速成長(zhǎng)、性能優(yōu)異的深度學(xué)習(xí)平臺(tái)」。
新特性概覽
PaddlePaddle 發(fā)布的新特性可以分為開(kāi)發(fā)、訓(xùn)練、預(yù)測(cè)、工具和服務(wù)五大部分。其中開(kāi)發(fā)主要是構(gòu)建深度學(xué)習(xí)的過(guò)程,它需要更簡(jiǎn)潔與易于理解的編寫(xiě)方式。而訓(xùn)練與預(yù)測(cè)主要追求的是「快」,即在不影響性能的情況下,訓(xùn)練越快越好、預(yù)測(cè)越快越好。后面的工具則具體針對(duì)某些問(wèn)題提出了一系列解決方案,從而簡(jiǎn)化開(kāi)發(fā)過(guò)程。
1. 開(kāi)發(fā):
PaddleNLP
視頻識(shí)別?工具集
PaddleNLP 是百度發(fā)布的完整 NLP 工具包,NLP 領(lǐng)域開(kāi)發(fā)者可以方便地復(fù)現(xiàn) baseline 模型,也可以進(jìn)行二次開(kāi)發(fā),解決自己的問(wèn)題。而百度發(fā)布的視頻識(shí)別工具集能夠?yàn)殚_(kāi)發(fā)者提供處理視頻理解、視頻編輯、視頻生成等一系列任務(wù)的解決方案。該工具集包含 7 個(gè)主流視頻識(shí)別模型,下圖中標(biāo)黃的 3 個(gè)模型為百度獨(dú)有的優(yōu)秀模型。
PaddlePaddle 視頻識(shí)別?工具集。
我們知道百度一直特別注重 NLP 方面的研究,這次 PaddleNLP 將很多 NLP 模型做了一套共享的骨架代碼,這樣跑不同模型用一套 API 和模式就行了。
除了發(fā)布已有的官方模型,如下圖所示 PaddleNLP 還提供了針對(duì)一系列任務(wù)的處理工具,包括預(yù)處理和后處理,并且這塊功能也是百度持續(xù)完善的點(diǎn)。
2. 訓(xùn)練:
分布式訓(xùn)練
?業(yè)級(jí)數(shù)據(jù)處理
第一個(gè)是大規(guī)模分布式訓(xùn)練相關(guān)的能力升級(jí),包括多機(jī)多卡的全面、全方位的支持;CPU 下的大規(guī)模稀疏參數(shù)服務(wù)器;以及各種容器下的高速大規(guī)模分布式訓(xùn)練。其次工業(yè)級(jí)的數(shù)據(jù)處理主要關(guān)注數(shù)據(jù)吞吐量,百度優(yōu)化了分布式 IO,并增加遠(yuǎn)程文件系統(tǒng)流式讀取能力。
如下所示為不同線程的數(shù)據(jù)吞吐能力,它們近似成線性增長(zhǎng),這種屬性對(duì)于可擴(kuò)展性非常重要。
3. 預(yù)測(cè):
Paddle Serving
PaddleSlim
基于多硬件的支持,全新發(fā)布的 Paddle Serving 已支持服務(wù)器端的快速部署。Paddle Serving 目前在百度的很多產(chǎn)品線都在使用,它提供非常完備的在線服務(wù)能力。其次 PaddleSlim 是一個(gè)模型壓縮工具庫(kù),它能夠在精度損失較?的情況下高效進(jìn)?模型的計(jì)算和體積壓縮。
如下所示為 Paddle Serving 的整體架構(gòu)圖,它分為離線和在線兩種基本實(shí)現(xiàn)。Server 端最上面部署了不同硬件的推理引擎。此外 Paddle Serving 還有基本的 Built-in 預(yù)處理執(zhí)行器,是一套完整的模型部署框架。
4. 工具:
AutoDL Design
PARL
PaddleHub
正式發(fā)布的 AutoDL Design 利用強(qiáng)化學(xué)習(xí)實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)架構(gòu)搜索,搜索的結(jié)果在很多特定場(chǎng)景下都優(yōu)于人類設(shè)計(jì)的網(wǎng)絡(luò),百度也開(kāi)源了 6 個(gè)自動(dòng)搜索到的模型。PARL 是一個(gè)強(qiáng)化學(xué)習(xí)的工具,這次升級(jí)在算法的覆蓋、高性能通訊以及并行訓(xùn)練方面做了大量的支持和擴(kuò)展。
最后發(fā)布的工具 PaddleHub 是預(yù)訓(xùn)練的一站式管理平臺(tái),它提供了非常好的封裝,方便用戶基于大模型做遷移學(xué)習(xí)。一般只需 10 行代碼左右,我們就可以實(shí)現(xiàn)一次遷移學(xué)習(xí),將其應(yīng)用到我們自己的任務(wù)場(chǎng)景。
AutoDL Design 設(shè)計(jì)的網(wǎng)絡(luò)在 CIFAR-10 上達(dá)到當(dāng)前最優(yōu)的 98.01% 準(zhǔn)確率。
最后的服務(wù)則主要通過(guò) AI Studio 支持免費(fèi)算力,我們可以獲得單人單卡(Tesla V100)的強(qiáng)大計(jì)算力,也可以獲得遠(yuǎn)程集群模式免費(fèi)算力。
以上僅概覽了 PaddlePaddle 的新特性,而其中很多特性值得詳細(xì)介紹。下面我們就從開(kāi)發(fā)者的角度,了解 PaddleSlim、PaddleHub 和動(dòng)態(tài)計(jì)算圖等新特性。
一個(gè)優(yōu)雅的模型壓縮模塊 PaddleSlim
PaddleSlim 是 PaddlePaddle 框架的一個(gè)子模塊,它首次在 PaddlePaddle 1.4 版本中發(fā)布。該模塊是非常優(yōu)雅的模型壓縮工具包,不僅保證了性能,同時(shí)還兼顧了易用性,只需幾行代碼就能 work。
PaddleSlim 中實(shí)現(xiàn)了目前主流的網(wǎng)絡(luò)剪枝、量化、蒸餾三種壓縮策略,主要用于壓縮圖像領(lǐng)域模型。在后續(xù)版本中,百度會(huì)添加更多的壓縮策略,以及完善對(duì) NLP 領(lǐng)域模型的支持。
PaddleSlim 示例和文檔:https://github.com/PaddlePaddle/models/tree/develop/PaddleSlim
如上所示,這三種最常見(jiàn)的壓縮方法都建立在復(fù)雜的基礎(chǔ)架構(gòu)上,從而提供更好的壓縮效果。如右圖所示,即使是非常精簡(jiǎn)的 MobileNet,也能得到很可觀的壓縮效果。盡管底層比較復(fù)雜,但它在實(shí)際使用起來(lái)卻非常簡(jiǎn)單,我們只需要幾行代碼就能調(diào)用自動(dòng)化的模型壓縮能力。
如下所示為剪枝示例,具體過(guò)程可查看前面的 PaddleSlim 文檔地址。我們可以直接調(diào)用壓縮腳本,并給出對(duì)應(yīng)的壓縮配置,PaddlePaddle 就能自動(dòng)在訓(xùn)練過(guò)程中對(duì)模型完成壓縮。
# for sensitivity filter pruning
#---------------------------
export CUDA_VISIBLE_DEVICES=0
python compress.py \
--model "MobileNet" \
--pretrained_model ./data/pretrain/MobileNetV1_pretrained \
--compress_config ./configs/filter_pruning_sen.yaml
PaddleSlim 的使用很簡(jiǎn)單,不論是我們想降低運(yùn)算量(FLOPS),還是想降低模型大?。?quán)重所占空間),它都能快速辦到。
新穎的 PaddleHub
現(xiàn)在介紹一個(gè)新穎的工具 PaddleHub,它是基于 PaddlePaddle 開(kāi)發(fā)的預(yù)訓(xùn)練模型管理工具,可以借助預(yù)訓(xùn)練模型更便捷地開(kāi)展遷移學(xué)習(xí)工作。
PaddleHub 項(xiàng)目地址:https://github.com/PaddlePaddle/PaddleHub
以下展示了 PaddleHub 的完整架構(gòu)圖,百度封裝了一系列 NLP 和 CV 的數(shù)據(jù)集,還提供了 Reader 以快速便捷地處理數(shù)據(jù)。除了數(shù)據(jù)集,更多的就是預(yù)訓(xùn)練模型了,包括拿來(lái)就用的 Transformer 和目標(biāo)檢測(cè)等模型。此外,還能針對(duì)不同的任務(wù)實(shí)現(xiàn)遷移學(xué)習(xí),包括文本分類、序列標(biāo)注、圖像分類等。
在用 pip 安裝 paddlehub 后,我們可以快速體驗(yàn) PaddleHub 無(wú)需代碼、一鍵預(yù)測(cè)的命令行功能:
# 使用百度LAC詞法分析工具進(jìn)行分詞
$ hub run lac --input_text "今天是個(gè)好日子"
# 使用百度Senta情感分析模型對(duì)句子進(jìn)行預(yù)測(cè)
$ hub run senta_bilstm --input_text "今天是個(gè)好日子"
# 使用SSD檢測(cè)模型對(duì)圖片進(jìn)行目標(biāo)檢測(cè),檢測(cè)結(jié)果如下圖所示
$ wget --no-check-certificate https://paddlehub.bj.bcebos.com/resources/test_img_bird.jpg
$ hub run ssd_mobilenet_v1_pascal --input_path test_img_bird.jpg
通過(guò)命令行,我們可以快速使用預(yù)訓(xùn)練模型進(jìn)行預(yù)測(cè)。同時(shí)借助 PaddleHub Finetune API,使用少量代碼就能完成遷移學(xué)習(xí)。例如我們可以使用 PaddleHub Finetune API 以及圖像分類預(yù)訓(xùn)練模型完成分類任務(wù),當(dāng)然,我們也可以只調(diào)整幾個(gè)超參數(shù)。
--batch_size: 批處理大小,請(qǐng)結(jié)合顯存情況進(jìn)行調(diào)整,若出現(xiàn)顯存不足,請(qǐng)適當(dāng)調(diào)低這一參數(shù)。默認(rèn)為16
--num_epoch: finetune迭代的輪數(shù)。默認(rèn)為1
--module: 使用哪個(gè)Module作為finetune的特征提取器,腳本支持{resnet50/resnet101/resnet152/mobilenet/nasnet/pnasnet}等模型。默認(rèn)為resnet50
--checkpoint_dir: 模型保存路徑,PaddleHub會(huì)自動(dòng)保存驗(yàn)證集上表現(xiàn)最好的模型。默認(rèn)為paddlehub_finetune_ckpt
--dataset: 使用什么數(shù)據(jù)集進(jìn)行finetune, 腳本支持分別是{flowers/dogcat/stanforddogs/indoor67/food101}。默認(rèn)為flowers
--use_gpu: 是否使用GPU進(jìn)行訓(xùn)練,如果機(jī)器支持GPU且安裝了GPU版本的PaddlePaddle,我們建議您打開(kāi)這個(gè)開(kāi)關(guān)。默認(rèn)關(guān)閉
令人期待的動(dòng)態(tài)計(jì)算圖
除了會(huì)上介紹的新特性,我們?cè)谧钚掳娴?Paddle Fluid 1.4 文檔中還發(fā)現(xiàn)一種全新的動(dòng)態(tài)計(jì)算圖模塊 DyGraph。目前 DyGraph 還處于預(yù)覽階段,但它標(biāo)志著 PaddlePaddle 也開(kāi)始同時(shí)兼顧靜態(tài)計(jì)算圖與動(dòng)態(tài)計(jì)算圖。
DyGraph 文檔地址:http://paddlepaddle.org/documentation/docs/zh/1.4/user_guides/howto/dygraph/DyGraph.html
我們一般認(rèn)為靜態(tài)計(jì)算圖在高效訓(xùn)練和部署上有非常大的優(yōu)勢(shì),而動(dòng)態(tài)計(jì)算圖在開(kāi)發(fā)效率與易用性上也無(wú)可替代。只有將動(dòng)態(tài)計(jì)算圖與靜態(tài)計(jì)算圖之間的兼容性做好,才能兼顧訓(xùn)練速度與簡(jiǎn)單易用兩大特點(diǎn)。
總的來(lái)說(shuō),PaddlePaddle 的 DyGraph 模式是一種動(dòng)態(tài)的圖執(zhí)行機(jī)制,可以立即執(zhí)行結(jié)果,無(wú)需構(gòu)建整個(gè)圖。同時(shí),和以往靜態(tài)的執(zhí)行計(jì)算圖不同,DyGraph 模式下您的所有操作可以立即獲得執(zhí)行結(jié)果,而不必等待所構(gòu)建的計(jì)算圖全部執(zhí)行完成,這樣可以讓您更加直觀地構(gòu)建 PaddlePaddle 下的深度學(xué)習(xí)任務(wù),以及進(jìn)行模型的調(diào)試,同時(shí)還減少了大量用于構(gòu)建靜態(tài)計(jì)算圖的代碼,使得您編寫(xiě)、調(diào)試網(wǎng)絡(luò)的過(guò)程變得更加便捷。
下面我們可以簡(jiǎn)單地體會(huì)一下 DyGraph 的魅力,我們可以在 fluid.dygraph.guard() 上下文環(huán)境中使用 DyGraph 的模式運(yùn)行網(wǎng)絡(luò),DyGraph 將改變以往 PaddlePaddle 的執(zhí)行方式,現(xiàn)在這些代碼可以立即執(zhí)行,并且將計(jì)算結(jié)果返回給 Python。如下所示,在最后打印損失函數(shù)的梯度時(shí),可以直接獲得結(jié)果:
x = np.ones([2, 2], np.float32)
with fluid.dygraph.guard():
inputs = []
for _ in range(10):
inputs.append(fluid.dygraph.base.to_variable(x))
ret = fluid.layers.sums(inputs)
loss = fluid.layers.reduce_sum(ret)
loss.backward()
print(loss.gradient())
目前 DyGraph 還是預(yù)覽版,PaddlePaddle 計(jì)劃在今年 7 月份完善動(dòng)態(tài)圖的基本功能、新增流水線并行的能力,與此同時(shí)還要優(yōu)化顯存占用與靜態(tài)計(jì)算圖的訓(xùn)練速度。PaddlePaddle 計(jì)劃在今年 11 月完成動(dòng)態(tài)圖實(shí)現(xiàn)與靜態(tài)圖的靈活轉(zhuǎn)換,并全面優(yōu)化動(dòng)態(tài)圖的訓(xùn)練速度。
所以對(duì)于 PaddlePaddle 的進(jìn)一步發(fā)展,我們還是非常期待的。