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