Docker Compose + GPU + TensorFlow 所產生的奇妙火花

選自 hackernoon
機器之心編譯
參與:黃小天、路雪

Docker 有不少優點,可是在數據科學和深度學習方面,使用 Docker 也存在一些阻礙。本文介紹了一系列 Docker 實用工具,以及 GPU-ready 樣板文件,讓咱們看看 Docker Compose + GPU + TensorFlow 能產生什麼奇特效果吧。
Docker 很棒——愈來愈多的人在開發與分佈中使用它。Docker 有不少優點:即時環境設置、獨立於平臺的 app、現成的解決方案、更好的版本控制、簡化的維護。
可是在數據科學和深度學習方面,使用 Docker 有一些阻礙。你必須記住全部的 Docker 標誌,以在主機和容器之間共享端口和文件,建立沒必要要的 run.sh 腳本,並處理 CUDA 版本和 GPU 共享。若是你曾經見過下面這個錯誤,你就會明白這種痛苦:
咱們的目標
本文的目的在於爲你介紹一系列 Docker 實用工具,以及咱們常常在公司使用的 GPU-ready 樣板文件。
所以,如下結果將不會出現:
取而代之的是這種結果:
酷!
咱們實際上想要達到的:
  • 經過一個指令管理咱們的應用程序狀態(運行、中止、移除)
  • 把全部的運行標誌保存到咱們可以提交到 git repo 的單個配置文件
  • 忘記 GPU 驅動程序版本不匹配和共享
  • 在生產工具好比 Kubernetes 或 Rancher 中使用 GPU-ready 的容器
所以,這裏是咱們強烈推薦給每一個深度學習者的工具清單:
1. CUDA
首先,你須要 CUDA 工具包,若是你打算本身動手訓練模型,那這是必需要有的。咱們推薦使用 runfile 安裝程序類型而不是 deb,由於它不會在之後的更新中混淆依賴關係。
(可選)如何檢查它是否工做:
2. Docker
你不想讓海量的庫污染你的計算機,也懼怕版本出現問題。一樣,你沒必要親自構建和安裝——一般,軟件已爲你建立好了,幷包裝在圖像中。安裝 Docker 很簡單:
3. Nvidia Docker
若是使用 Docker,必須有來自英偉達的實用程序(https://github.com/NVIDIA/nvidia-docker),它真正簡化了在 Docker 容器內使用 GPU 的步驟。
安裝很是簡單:
如今,不用每次都用下列方式來共享英偉達設備:
你可使用 nvidia-docker 命令:
一樣,你也無需擔憂驅動程序版本不匹配:英偉達的 docker 插件將會幫你解決問題。

4. Docker Compose
超級有用的實用程序,容許你在文件中存儲 docker run 配置,並更輕鬆地管理應用程序狀態。儘管它的設計目的是組合多個 docker 容器,但 docker compose 在你只有一個服務的時候依然很是有用。這裏有一個穩定版本(https://github.com/docker/compose/releases):
5. Nvidia Docker Compose
不幸的是,Docker Compose 並不知道 Nvidia Docker 的存在。幸運的是,有一個解決方法:有一個小的 Python 腳本,能夠用 nvidia-docker 驅動程序生成配置。經過 pip 安裝 Nvidia Docker Compose:
如今你可使用 nvidia-docker-compose 命令,而不是 docker-compose 了。
替代選擇
若是你不想使用 nvidia-docker-compose,你能夠手動傳遞音量驅動程序,只需把這些選項添加到 docker-compose.yml:
6. Bash 別名
可是 nvidia-docker-compose 須要輸入 21 個字符,這太多了。
很幸運咱們可使用 bash 別名。在你最喜好的編輯器打開~/.bashrc(有時是~/.bash_profile),輸入如下代碼行:
經過運行 source ~/.bashrc 更新你的設置。
開始 TensorFlow 服務
如今咱們準備好利用上述全部工具的優勢。好比,咱們運行一個 Tensorflow GPU 啓用的 Docker 容器。
在項目目錄中建立具備如下內容的 docker-compose.yml 文件:
如今咱們可使用單個命令開始 TensorFlow Jupiter:
doc 是 nvidia-docker-compose 的別名——它將使用正確的 volume-driver 生成已修改的配置文件 nvidia-docker-compose.yml,而後運行 docker-compose。
你可使用相同的命令管理你的服務:
結論
可是這值得嗎?下面讓咱們看一下其優缺點。
優勢
  • 無需考慮 GPU 設備共享
  • 沒必要再爲英偉達驅動程序版本擔心
  • 擺脫了偏心乾淨、簡單配置的命令標誌
  • 不再須要--name 標誌管理容器狀態
  • 衆所周知已記錄並獲得普遍使用的實用程序
  • 你的配置已爲編制工具作好準備,好比理解 docker-compose 文件的編制工具 Kubernetes
缺點
  • 你不得不安裝更多工具
它是生產就緒(production-ready)的嗎
是的。在電影推薦應用 Movix 中,咱們使用 GPU 加速的 TensorFlow 網絡基於用戶輸入計算實時的電影選擇。
咱們在 Proxy API 的 Rancher 集羣中有三臺帶有 Nvidia Titan X 的電腦。配置儲存在常規 docker-compose.yml 文件中:所以在一個新服務器上部署應用程序或者設置開發環境變得很輕鬆。目前爲止它的表現堪稱完美。
爲機器學習的將來作好準備吧!
原文連接:https://hackernoon.com/docker-compose-gpu-tensorflow-%EF%B8%8F-a0e2011d36
相關文章
相關標籤/搜索