贈V100算力卡 | 百度首次公開PaddlePaddle全景圖,11項模組新發布

思源發表於2019-04-24
4 月 23 日,首屆 WAVE SUMMIT 2019 深度學習開發者峰會在北京舉辦,現場超千位開發者與來自百度英特爾、清華大學等的科學家,就框架與深度學習展開了詳細的討論。在 WAVE 上,百度從建模、訓練到部署,首次對外公佈了 PaddlePaddle 全景圖。
  • PaddlePaddle新特性完整PPT:https://pan.baidu.com/s/100iWwz-JDvX1dQ2XcJMJQg

  • 提取碼:9cxi

此外,百度還重磅推出算力支援計劃,宣佈為開發者提供總計 1 億元免費算力。免費算力主要以兩種模式提供,第一種是一人一卡模式,V100 的訓練卡包括 16G 的視訊記憶體,最高 2T 的儲存空間。另外一種是遠端叢集模式,PaddlePaddle 提供高效能叢集,供開發者免費使用。其中最吸引人的是是一人一卡,而我們正好獲得了一張算力卡,它提供 Tesla V100 GPU 這種強大的計算力資源。

這張算力卡提供了一個邀請碼,在 AI Studio 的單機模式中輸入邀請碼就能獲得基礎的 48 小時 V100 算力,而且該卡可以獲得 3 個新的邀請碼,對方每接受一次則增加 24 小時的 V100 算力。所以總的而言,這張算力卡可獲得 120 小時的 Tesla V100 使用時間。

贈V100算力卡 | 百度首次公開PaddlePaddle全景圖,11項模組新發布

現在這張算力卡免費贈送機器之心讀者啦~只要你在微信中留言最期待的 PaddlePaddle 更新或改進,那麼截至 26 號中午 12 點,獲得點贊量最多的留言將獲得這張算力卡。

PaddlePaddle 全景圖

正如百度深度學習技術平臺部總監馬豔軍所言:「PaddlePaddle 其實從去年開始就有一個核心理念的變化,即將其定位為端到端的深度學習平臺,而不僅僅是框架。」這也就意味著,PaddlePaddle 從底層框架、模型庫,到基於它們構建的各種工具,再到完整的開發和服務平臺,整個流程應該是端到端的,是一種『智慧時代的作業系統』。」

會上,百度首次對外公佈了 PaddlePaddle 的全景圖,它從三個層面囊括了眾多工具與元件。在這次 WAVE 中,百度釋出了眾多新工具與模組,下圖黃色框的元件就是這次釋出的重點。

贈V100算力卡 | 百度首次公開PaddlePaddle全景圖,11項模組新發布

總體而言,PaddlePaddle 是集核心框架、工具元件和服務平臺為一體的端到端開源深度學習平臺。此次,PaddlePaddle 釋出了 11 項新特性及服務,包含 PaddleNLP、視訊識別工具集、Paddle Serving、PaddleSlim 等多種深度學習開發、訓練、預測的便捷方法,也包含 PaddleHub 和 Auto Design 等面向具體領域的高效用具。

值得注意的是,百度還在 WAVE 現場宣佈了「1 億元」的 AI Studio 算力支援計劃,通過提供 Tesla V100 免費使用時長,幫助使用者獲得更強大的算力。最後,百度還公佈了 PaddlePaddle 的中文名「飛槳」,它的寓意是「PaddlePaddle 是一個快速成長、效能優異的深度學習平臺」。

新特性概覽

PaddlePaddle 釋出的新特性可以分為開發、訓練、預測、工具和服務五大部分。其中開發主要是構建深度學習的過程,它需要更簡潔與易於理解的編寫方式。而訓練與預測主要追求的是「快」,即在不影響效能的情況下,訓練越快越好、預測越快越好。後面的工具則具體針對某些問題提出了一系列解決方案,從而簡化開發過程。

1. 開發:

  • PaddleNLP

  • 視訊識別⼯工具集 

PaddleNLP 是百度釋出的完整 NLP 工具包,NLP 領域開發者可以方便地復現 baseline 模型,也可以進行二次開發,解決自己的問題。而百度釋出的視訊識別工具集能夠為開發者提供處理視訊理解、視訊編輯、視訊生成等一系列任務的解決方案。該工具集包含 7 個主流視訊識別模型,下圖中標黃的 3 個模型為百度獨有的優秀模型。

贈V100算力卡 | 百度首次公開PaddlePaddle全景圖,11項模組新發布

PaddlePaddle 視訊識別⼯工具集。

我們知道百度一直特別注重 NLP 方面的研究,這次 PaddleNLP 將很多 NLP 模型做了一套共享的骨架程式碼,這樣跑不同模型用一套 API 和模式就行了。

除了釋出已有的官方模型,如下圖所示 PaddleNLP 還提供了針對一系列任務的處理工具,包括預處理和後處理,並且這塊功能也是百度持續完善的點。

贈V100算力卡 | 百度首次公開PaddlePaddle全景圖,11項模組新發布

2. 訓練:

  • 分散式訓練 

  • ⼯業級資料處理

第一個是大規模分散式訓練相關的能力升級,包括多機多卡的全面、全方位的支援;CPU 下的大規模稀疏引數伺服器;以及各種容器下的高速大規模分散式訓練。其次工業級的資料處理主要關注資料吞吐量,百度優化了分散式 IO,並增加遠端檔案系統流式讀取能力。

如下所示為不同執行緒的資料吞吐能力,它們近似成線性增長,這種屬性對於可擴充套件性非常重要。

贈V100算力卡 | 百度首次公開PaddlePaddle全景圖,11項模組新發布

3. 預測:

  • Paddle Serving

  • PaddleSlim

基於多硬體的支援,全新發布的 Paddle Serving 已支援伺服器端的快速部署。Paddle Serving 目前在百度的很多產品線都在使用,它提供非常完備的線上服務能力。其次 PaddleSlim 是一個模型壓縮工具庫,它能夠在精度損失較⼩的情況下高效進⾏模型的計算和體積壓縮。

如下所示為 Paddle Serving 的整體架構圖,它分為離線和線上兩種基本實現。Server 端最上面部署了不同硬體的推理引擎。此外 Paddle Serving 還有基本的 Built-in 預處理執行器,是一套完整的模型部署框架。

贈V100算力卡 | 百度首次公開PaddlePaddle全景圖,11項模組新發布

4. 工具:

  • AutoDL Design

  • PARL

  • PaddleHub

正式釋出的 AutoDL Design 利用強化學習實現神經網路架構搜尋,搜尋的結果在很多特定場景下都優於人類設計的網路,百度也開源了 6 個自動搜尋到的模型。PARL 是一個強化學習的工具,這次升級在演算法的覆蓋、高效能通訊以及並行訓練方面做了大量的支援和擴充套件。

最後釋出的工具 PaddleHub 是預訓練的一站式管理平臺,它提供了非常好的封裝,方便使用者基於大模型做遷移學習。一般只需 10 行程式碼左右,我們就可以實現一次遷移學習,將其應用到我們自己的任務場景。

贈V100算力卡 | 百度首次公開PaddlePaddle全景圖,11項模組新發布

AutoDL Design 設計的網路在 CIFAR-10 上達到當前最優的 98.01% 準確率

最後的服務則主要通過 AI Studio 支援免費算力,我們可以獲得單人單卡(Tesla V100)的強大計算力,也可以獲得遠端叢集模式免費算力。

以上僅概覽了 PaddlePaddle 的新特性,而其中很多特性值得詳細介紹。下面我們就從開發者的角度,瞭解 PaddleSlim、PaddleHub 和動態計算圖等新特性。

一個優雅的模型壓縮模組 PaddleSlim

PaddleSlim 是 PaddlePaddle 框架的一個子模組,它首次在 PaddlePaddle 1.4 版本中釋出。該模組是非常優雅的模型壓縮工具包,不僅保證了效能,同時還兼顧了易用性,只需幾行程式碼就能 work。

PaddleSlim 中實現了目前主流的網路剪枝、量化、蒸餾三種壓縮策略,主要用於壓縮影像領域模型。在後續版本中,百度會新增更多的壓縮策略,以及完善對 NLP 領域模型的支援。

PaddleSlim 示例和文件:https://github.com/PaddlePaddle/models/tree/develop/PaddleSlim

贈V100算力卡 | 百度首次公開PaddlePaddle全景圖,11項模組新發布

如上所示,這三種最常見的壓縮方法都建立在複雜的基礎架構上,從而提供更好的壓縮效果。如右圖所示,即使是非常精簡的 MobileNet,也能得到很可觀的壓縮效果。儘管底層比較複雜,但它在實際使用起來卻非常簡單,我們只需要幾行程式碼就能呼叫自動化的模型壓縮能力。

如下所示為剪枝示例,具體過程可檢視前面的 PaddleSlim 文件地址。我們可以直接呼叫壓縮指令碼,並給出對應的壓縮配置,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),還是想降低模型大小(權重所佔空間),它都能快速辦到。

新穎的 PaddleHub

現在介紹一個新穎的工具 PaddleHub,它是基於 PaddlePaddle 開發的預訓練模型管理工具,可以藉助預訓練模型更便捷地開展遷移學習工作。

PaddleHub 專案地址:https://github.com/PaddlePaddle/PaddleHub

以下展示了 PaddleHub 的完整架構圖,百度封裝了一系列 NLP 和 CV 的資料集,還提供了 Reader 以快速便捷地處理資料。除了資料集,更多的就是預訓練模型了,包括拿來就用的 Transformer 和目標檢測等模型。此外,還能針對不同的任務實現遷移學習,包括文字分類、序列標註、影像分類等。

贈V100算力卡 | 百度首次公開PaddlePaddle全景圖,11項模組新發布

在用 pip 安裝 paddlehub 後,我們可以快速體驗 PaddleHub 無需程式碼、一鍵預測的命令列功能:

# 使用百度LAC詞法分析工具進行分詞
$ hub run lac --input_text "今天是個好日子"

# 使用百度Senta情感分析模型對句子進行預測
$ hub run senta_bilstm --input_text "今天是個好日子"

# 使用SSD檢測模型對圖片進行目標檢測,檢測結果如下圖所示
$ 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

通過命令列,我們可以快速使用預訓練模型進行預測。同時藉助 PaddleHub Finetune API,使用少量程式碼就能完成遷移學習。例如我們可以使用 PaddleHub Finetune API 以及影像分類預訓練模型完成分類任務,當然,我們也可以只調整幾個超引數

--batch_size: 批處理大小,請結合視訊記憶體情況進行調整,若出現視訊記憶體不足,請適當調低這一引數。預設為16
--num_epoch: finetune迭代的輪數。預設為1
--module: 使用哪個Module作為finetune的特徵提取器,指令碼支援{resnet50/resnet101/resnet152/mobilenet/nasnet/pnasnet}等模型。預設為resnet50
--checkpoint_dir: 模型儲存路徑,PaddleHub會自動儲存驗證集上表現最好的模型。預設為paddlehub_finetune_ckpt
--dataset: 使用什麼資料集進行finetune, 指令碼支援分別是{flowers/dogcat/stanforddogs/indoor67/food101}。預設為flowers
--use_gpu: 是否使用GPU進行訓練,如果機器支援GPU且安裝了GPU版本的PaddlePaddle,我們建議您開啟這個開關。預設關閉

令人期待的動態計算圖

除了會上介紹的新特性,我們在最新版的 Paddle Fluid 1.4 文件中還發現一種全新的動態計算圖模組 DyGraph。目前 DyGraph 還處於預覽階段,但它標誌著 PaddlePaddle 也開始同時兼顧靜態計算圖與動態計算圖。

DyGraph 文件地址:http://paddlepaddle.org/documentation/docs/zh/1.4/user_guides/howto/dygraph/DyGraph.html

我們一般認為靜態計算圖在高效訓練和部署上有非常大的優勢,而動態計算圖在開發效率與易用性上也無可替代。只有將動態計算圖與靜態計算圖之間的相容性做好,才能兼顧訓練速度與簡單易用兩大特點。

總的來說,PaddlePaddle 的 DyGraph 模式是一種動態的圖執行機制,可以立即執行結果,無需構建整個圖。同時,和以往靜態的執行計算圖不同,DyGraph 模式下您的所有操作可以立即獲得執行結果,而不必等待所構建的計算圖全部執行完成,這樣可以讓您更加直觀地構建 PaddlePaddle 下的深度學習任務,以及進行模型的除錯,同時還減少了大量用於構建靜態計算圖的程式碼,使得您編寫、除錯網路的過程變得更加便捷。

下面我們可以簡單地體會一下 DyGraph 的魅力,我們可以在 fluid.dygraph.guard() 上下文環境中使用 DyGraph 的模式執行網路,DyGraph 將改變以往 PaddlePaddle 的執行方式,現在這些程式碼可以立即執行,並且將計算結果返回給 Python。如下所示,在最後列印損失函式的梯度時,可以直接獲得結果:

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 還是預覽版,PaddlePaddle 計劃在今年 7 月份完善動態圖的基本功能、新增流水線並行的能力,與此同時還要優化視訊記憶體佔用與靜態計算圖的訓練速度。PaddlePaddle 計劃在今年 11 月完成動態圖實現與靜態圖的靈活轉換,並全面優化動態圖的訓練速度。

贈V100算力卡 | 百度首次公開PaddlePaddle全景圖,11項模組新發布

所以對於 PaddlePaddle 的進一步發展,我們還是非常期待的。

相關文章