PaddlePaddle發布基於Docker的AI系統開發流程

2021-03-06 百度開發者中心

【導讀】本文來自PaddlePaddle團隊,介紹了PaddlePaddle與眾不同的基於Docker的編譯、開發、測試、調試、發布、部署、和運行的全流程及其背後的設計思路。

繼兩周前PaddlePaddle社區發布新的PythonAPI之後,最近又發布了對應的新版Docker鏡像,並優化了鏡像的體積和組織方式。

這些工作的目的是方便大家在單機和Kubernetes機群上運行分布式深度學習作業。當Baidu Research官方Twitter帳號發布這條消息並且被Andrew Ng轉發後,收到了很多反饋。其中有朋友們好奇Docker在AI中的應用是不是「overkill」。其實這些工作都是為了簡化用戶需要做的操作。只是Docker在AI系統中的應用還剛剛開始,大家可能還不熟悉,所以我們寫作本文,介紹PaddlePaddle與眾不同的基於Docker的編譯、開發、測試、調試、發布、部署、和運行的全流程及其背後的設計思路。

除了PaddlePaddle本身,基於它開發的Deep Learning入門教材也是基於Docker image 的形式發布的。這本書中的每一章都是一個Jupyter Notebook。而Docker image裡包括了Jupyter server、PaddlePaddle和所有被依賴的軟體,所以大家不需要安裝軟體即可運行和瀏覽這本書,修改文中的例子程序並且執行和觀察變化。

引入Docker也使得我們不需要修改PaddlePaddle的源碼即可同時支持多種作業系統 -- Linux、Mac、Windows -- 因為這些作業系統都可以運行Docker了。

而且PaddlePaddle的開發環境(各種軟體和配置)本身也被發布為一個Docker image,所以不僅是PaddlePaddle程序的用戶、基於PaddlePaddle開發AI程序的用戶,甚至PaddlePaddle的開發者,也都使用Docker container來開發和調試。

如果不希望使用Docker運行Paddle應用,用戶可以使用開發環境鏡像快速編譯Paddle的.deb安裝包,直接安裝在企業的特定運行環境中運行! 

《Deep Leanring 101》這本書是在Github社區裡開發的一個PaddlePaddle應用程式。讓我們先從這本書開始,解釋PaddlePaddle應用開發和發布的過程吧。

因為PaddlePaddle社區已經把書籍的Docker鏡像發布到了dockerhub.com,所以大家只需要執行一條命令即可運行這本書:

如果從國內訪問dockerhub.com速度慢,也可以訪問PaddlePaddle社區在香港維護的Docker registry 服務:

隨後只需要在瀏覽器打開連結 http://localhost:8888,選擇一個感興趣的章節,即可在瀏覽器裡閱讀書籍。界面如下圖所以。用戶可以點擊上方工具欄的「運行」按鈕來運行樣例代碼,查看輸出的結果,並對照書籍開始學習,體驗Paddle帶來的深度學習之旅。

如果大家好奇這本書的Docker鏡像的創建方法,可以參見這個腳本程序 https://github.com/PaddlePaddle/book/blob/develop/.tools/build_docker.sh,並參見下文。大家可以把自己基於PaddlePaddle開發的應用發布出來,便於用戶在單機和Kubernetes機群上運行。

 

上述書籍鏡像都是基於PaddlePaddle的生產環境鏡像(production iamge)構建的。生產環境鏡像是任何PaddlePaddle應用鏡像的基礎,其中只包括build好的PaddlePaddle以及Python等必要的依賴,這樣使其體積儘量小。目前PaddlePaddle社區維護以下四種生產鏡像,分別對應包括不同CPU和GPU指令集的程序。

GPU/AVX paddle:0.10.0rc2-gpu

GPU/no-AVX paddle:0.10.0rc2-gpu-noavx

no-GPU/AVX paddle:0.10.0rc2

no-GPU/no-AVX paddle:0.10.0rc2-noavx

其中GPU版本鏡像由於包含CUDA driver,體積會略大於純CPU版本的鏡像。而no-AVX鏡像則提供可以兼容部分較早型號的不支持AVX指令集的CPU。也有一些雲服務提供商提供的虛擬機不支持AVX指令集。

下面我們演示使用PaddlePaddle 生產環境鏡像構建應用的方法。首先我們編寫一個應用程式/work/myapp.py:

我們可以執行生產鏡像,利用其中編譯好的PaddlePaddle來執行我們的應用程式:

 這個例子裡,/work目錄為保存run.py文件的目錄,run.py程序和其依賴以及數據都會放在這個目錄下,通過-v參數掛載到容器中,運行run.py即可啟動我們的訓練任務。

如果dockerhub.com速度慢,也可以使用PaddlePaddle社區維護的Docker registry:

可以看到如下輸出(截取部分):

對於更加複雜的深度學習應用,比如應用可能依賴官方Docker鏡像之外的庫,用戶可以直接基於PaddlePaddle 的生產環境鏡像打包自己的應用,創建如下的Dockerfile:

使用諸如此類的Dockerfile即可根據用戶的需要構建自己的鏡像並應用於實際生產環境。 

我們將PaddlePaddle的Docker鏡像區分為生產環境和開發環境。生產環境僅包含應用運行必要的動態連接庫,三方庫和應用二進位文件;而開發環境則需要提供Paddle原始碼、頭文件、編譯工具以及豐富的開發工具,包括:

gcc/clang

nvcc

Python

sphinx

woboq

sshd

開發環境鏡像會極大的方便以下角色的工作: 1. 深度學習應用開發者:不再需要安裝配置一臺Ubuntu Linux機器並安裝大量的依賴,只需要安裝Docker。這樣開發者可以使用自己的電腦或者遠程的開發伺服器都可以。 2. Paddle版本發布工程師:Paddle後續的版本發布更新均使用開發環境Docker鏡像,根據Paddle的github分支/標籤直接生成多個Paddle生產環境Docker鏡像 3. 文檔編寫/Paddle網站更新:Paddle的文檔通常是以「.md/.rst」格式保存在github上的,並隨著原始碼的更新而更新。文檔和網站內容都是通過github的這些文檔生成的,開發環境鏡像會提供相應的工具,將「.md/.rst」格式解壓、轉換並生成html頁面。

下面介紹如何使用開發環境鏡像。考慮我們完成日常工作的方式,開發者可能會使用自己的筆記本/臺式機/安裝有GPU的工作站:

許多開發者會使用一臺遠程的安裝了GPU的機器完成日常的開發工作,他們通常會ssh登錄到這臺伺服器上開發。開發環境鏡像也提供了sshd服務,這樣開發者可以直接ssh登錄到PaddlePaddle的開發環境容器中啟動訓練任務:

一個基本思路是: 使用git clone下載PaddlePaddle源碼到開發機或本地,然後就可以使用自己慣用的編輯器(如Eclipse/VIM)開始代碼編寫工作。編譯和測試則可以使用docker run -v掛載Paddle原始碼目錄到Docker開發環境鏡像。這樣就可以在Docker容器中直接編譯和測試剛才修改的代碼:

您可以使用下面的命令快速下載並啟動一個PaddlePaddle開發環境的容器,並啟動一個sshd服務。在https://hub.docker.com/r/paddlepaddle/paddle/tags/ 找到您需要的版本替換 <version>。

PaddlePaddle團隊將以易用性為目標,持續更新,為AI從業者和對深度學習感興趣的同學提供更方便的鏡像和工具,把深度學習帶給更多的人!

PaddlePaddle是一個最早由百度科學家和工程師共同研發的並行分布式深度學習平臺,兼備易用性、高效性、靈活性和可擴展性,目前已被百度內部多個產品線廣泛使用。 

PaddlePaddle目前已經開放源碼, 但是遠未完善,我們希望能在這個基礎上不斷的改進、擴展和延伸。 同時我們希望廣大開發者積極提供反饋和貢獻原始碼,建立一個活躍的開源社區。

據介紹,PaddlePaddle是一個小而美的團隊、核心成員10人左右、系統工程師為主、全部使用Github辦公。 



相關焦點

  • 一步一步教你如何安裝PaddlePaddle
    如果讀者使用的是 Windows 10,可以使用 Windows 系統自帶的 Linux 子系統,安裝教程可以看我之前的文章 Windows10 安裝 Linux 子系統。在使用 Docker 安裝 paddlepaddle 前,首先要安裝 Docker,通過下面的命令就可以安裝了:sudo apt-get install docker安裝完成之後,可以使用 docker --version 查看 Docker 的版本,如果有顯示,就證明安裝成功了。可以使用 docker images 查看已經安裝的鏡像。
  • PaddlePaddle深度學習開源平臺 :等待眾人划槳的中國AI大船
    數據和算法科學家本著應該把時間花在更有價值的研究和業務任務上來的目的,類似虛擬化發布地使用,進一步方便了大家,和虛擬機不同的是用 Docker 的方式,性能和直接安裝在本機是一樣的。paddle 的官網上是這麼寫的,為了開發 PaddlePaddle,我們需要:簡單來說就是:下載 CPU 或 GPU 版本的鏡像:比如 CPU 版本的就是 docker pull docker.paddlepaddle.org/paddle編寫適用於 Paddle 的程序:
  • Paddle.js & PaddleClas 實戰 ——『尋物大作戰』AI 小遊戲
    『尋物大作戰』正是一款基於 AI 能力打造的趣味性小遊戲,目的就是讓玩家通過遊戲的方式感受 AI 的魅力。雖然受限於數據,它目前還是一款初級階段的遊戲,不過麻雀雖小,五臟俱全,整體開發過程囊括了 數據處理、模型設計、模型訓練、上線部署 ,四位一體的全部流程!
  • 【深度學習系列】PaddlePaddle之手寫數字識別
    傳統的基本都能做,尤其對NLP的支持很好,譬如情感分析,word embedding,語言模型等,反正你想得到的,常見的都可以用它來試一試~PaddlePaddle的安裝  不得不吐槽一下PaddlePaddle的安裝,官網上說「PaddlePaddle目前唯一官方支持的運行的方式是Docker容器」,而docker
  • PaddlePaddle重磅升級,Paddle Fluid v1.4版本發布
    Paddle Fluid v1.4升級包含PaddleNLP、視頻識別工具集、Paddle Serving、PaddleSlim 等,覆蓋深度學習開發、訓練、預測的全流程的特性。工具組件升級包含PaddleHub 、AutoDL Design等,為開發者提供了更豐富、高效的工具。
  • 三分鐘帶你弄懂Paddle Hub!  
    Hub本意是中心,docker有docker Hub,大家可以把自己創建的鏡像打包提交到docker hub上,需要的時候再pull下來,非常方便,那麼模型是不是也可以這樣玩呢?完全可以啊!很多時候我們不需要從頭開始訓練模型,如果有預訓練好的模型,直接做遷移學習就可以,但是傳統的方式基本上都需要從各個官網上去下載,模型比較大,用起來並不輕量。
  • PaddlePaddle升級解讀 | 十餘行代碼完成遷移學習,PaddleHub實戰篇
    項目地址:https://github.com/PaddlePaddle/PaddleHubPaddleHub 介紹PaddleHub 是基於 PaddlePaddle 開發的預訓練模型管理工具,可以藉助預訓練模型更便捷地開展遷移學習工作,旨在讓 PaddlePaddle 生態下的開發者更便捷體驗到大規模預訓練模型的價值。
  • PaddleDetection目標檢測套件
    軟硬體環境簡介引用官方的項目介紹PaddleDetection飛槳目標檢測開發套件,旨在幫助開發者更快更好地完成檢測模型的組建、訓練、優化及部署等全開發流程。#模型庫安裝PaddlePaddle飛槳(PaddlePaddle)是百度研發的中國首個開源開放、技術領先、功能完備的產業級深度學習平臺,集深度學習核心訓練和推理框架、基礎模型庫、端到端開發套件和豐富的工具組件於一體。
  • 基於PaddlePaddle的詞向量實戰 | 深度學習基礎任務教程系列(二)
    詞向量是自然語言處理中常見的一個操作,是搜尋引擎、廣告系統、推薦系統等網際網路服務背後常見的基礎技術。在這些網際網路服務裡,我們經常要比較兩個詞或者兩段文本之間的相關性。為了做這樣的比較,我們往往把詞表示成計算機適合處理的方式。最自然的方式莫過於向量空間模型(vector space model)。
  • 在Node.js上接入Paddle Lite,讓你的網站具備AI推理能力
    隨著桌面端Electron技術逐步崛起,基於Electron開發的代碼編輯器、聊天軟體、遊戲等層出不窮。對於習慣使用Node.js進行後端開發的朋友來說,開發一套漂亮的桌面UI客戶端還是有一定難度的;而Electron開發不要太簡單,只要會寫HTML,就能寫客戶端,剩下的交給時間慢慢打磨即可。
  • Transformer-paddle2.0
    很久前就想做paddle2.0的高級api了,所以最近忙裡偷閒把transformer的paddle2.0版本實現了。
  • PaddleX還能給遊戲「開掛」?『跳一跳』安排上
    PaddleX是百度飛槳推出的深度學習全流程開發工具,本文以微信小遊戲跳一跳為例,體驗了PaddleX從數據準備到模型部署的全流程。本次用到的模型是PaddleX提供的目標檢測模型YOLOv3。通過此模型檢測跳一跳遊戲界面中的小人和跳臺,然後估算出小人成功落入跳臺所需要的時間,把模型部署到手機模擬器上,即可模擬玩家按屏完成跳一跳,最終實現了自動成功跳躍。
  • 一文帶你看懂PaddleHub
    Hub 本意是中心,docker 有 docker Hub,大家可以把自己創建的鏡像打包提交到 docker hub 上,需要的時候再 pull 下來,非常方便,那麼模型是不是也可以這樣玩呢?完全可以!
  • 【深度學習系列】用PaddlePaddle和Tensorflow進行圖像分類
    >前文傳送門:【好書推薦&學習階段】三個月教你從零入門深度學習【深度學習系列】PaddlePaddle之手寫數字識別【深度學習系列】卷積神經網絡CNN原理詳解(一)——基本原理【深度學習系列】PaddlePaddle之數據預處理【深度學習系列】卷積神經網絡詳解(二)——自己手寫一個卷積神經網絡上個月發布了四篇文章
  • 教程 | 如何用百度深度學習框架PaddlePaddle做數據預處理
    reader:從本地、網絡、分布式文件系統 HDFS 等讀取數據,也可隨機生成數據,並返回一個或多個數據項。reader creator:一個返回 reader 的函數。reader decorator:裝飾器,可組合一個或多個 reader。
  • 【AI雜談-總結】PaddleLite OCR在RK Linux上部署
    預測庫的文件目錄如下:inference_lite_lib.armlinux.armv8/├── cxx│   ├── include│   │   ├── paddle_api.h│   │   ├── paddle_image_preprocess.h│   │   ├── paddle_lite_factory_helper.h│   │
  • vSphere7.0 bitfusion:運行飛槳(PaddlePaddle) 框架
    VMware 在2020年7月即將發布bitfusion的正式版。
  • PaddlePaddle實戰 | 情感分析算法從原理到實戰全解
    F由下列公式組合而成[7]:結合構建深層循環神經網絡的方法(深層神經網絡往往能得到更抽象和高級的特徵表示),我們可以通過構建更加強有力的基於LSTM的棧式雙向循環神經網絡[9],來對時序數據進行建模。PaddlePaddle簡介PaddlePaddle(paddlepaddle.org)是百度研發的深度學習框架。除了核心框架之外,PaddlePaddle還提供了豐富的工具組件。
  • 推理引擎Paddle Inference改造三要點,ERNIE時延降低81.3%
    docker pull hub.baidubce.com/paddlepaddle/paddle:1.8.0-gpu-cuda10.0-cudnn7-trt6export CUDA_SO="$(\ls /usr/lib64/libcuda* | xargs -I{} echo '-v {}:{}') $(\ls /usr/lib64/libnvidia* | xargs -I
  • PaddleVideo視頻理解模型再下一城!PP-TSN重磅發布
    這一方法在很大程度上是受到靈長類視覺系統中視網膜神經節細胞的生物學研究所啟發。研究發現,在靈長類的視覺系統中,約80%是P細胞,15-20%是M細胞。M細胞以較高的頻率工作,對時間變化更加敏感;P細胞則提供良好的空間細節和顏色感知。相應的,SlowFast模型的Slow分支類似於P細胞,感知空間信息;Fast分支類似於M細胞,對時間變化敏感。