選自 hackernoon

機器之心編譯

參與:黃小天、路雪

Docker 有很多優勢,但是在資料科學和深度學習方面,使用 Docker 也存在一些阻礙。本文介紹了一系列 Docker 實用工具,以及 GPU-ready 樣板檔案,讓我們看看 Docker Compose + GPU + TensorFlow 能產生什麼奇特效果吧。

Docker 很棒——越來越多的人在開發與分佈中使用它。Docker 有很多優勢:即時環境設定、獨立於平臺的 app、現成的解決方案、更好的版本控制、簡化的維護。

但是在資料科學和深度學習方面,使用 Docker 有一些阻礙。你必須記住所有的 Docker 標誌,以在主機和容器之間共享埠和檔案,建立不必要的 run。sh 指令碼,並處理 CUDA 版本和 GPU 共享。如果你曾經見過下面這個錯誤,你就會明白這種痛苦:

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

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

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

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

我們的目標

本文的目的在於為你介紹一系列 Docker 實用工具,以及我們經常在公司使用的 GPU-ready 樣板檔案。

因此,以下結果將不會出現:

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

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

取而代之的是這種結果:

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

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

酷!

我們實際上想要達到的:

透過一個指令管理我們的應用程式狀態(執行、停止、移除)

把所有的執行標誌儲存到我們能夠提交到 git repo 的單個配置檔案

忘記 GPU 驅動程式版本不匹配和共享

在生產工具比如 Kubernetes 或 Rancher 中使用 GPU-ready 的容器

因此,這裡是我們強烈推薦給每個深度學習者的工具清單:

1。 CUDA

首先,你需要 CUDA 工具包,如果你打算自己動手訓練模型,那這是必須要有的。我們推薦使用 runfile 安裝程式型別而不是 deb,因為它不會在以後的更新中混淆依賴關係。

(可選)如何檢查它是否工作:

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

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

2。 Docker

你不想讓海量的庫汙染你的計算機,也害怕版本出現問題。同樣,你不必親自構建和安裝——通常,軟體已為你建立好了,幷包裝在影象中。安裝 Docker 很簡單:

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

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

3。 Nvidia Docker

如果使用 Docker,必須有來自英偉達的實用程式(

https://

github。com/NVIDIA/nvidi

a-docker

),它真正簡化了在 Docker 容器內使用 GPU 的步驟。

安裝非常簡單:

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

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

現在,不用每次都用下列方式來共享英偉達裝置:

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

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

你可以使用 nvidia-docker 命令:

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

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

同樣,你也無需擔心驅動程式版本不匹配:英偉達的 docker 外掛將會幫你解決問題。

4。 Docker Compose

超級有用的實用程式,允許你在檔案中儲存 docker run 配置,並更輕鬆地管理應用程式狀態。儘管它的設計目的是組合多個 docker 容器,但 docker compose 在你只有一個服務的時候依然非常有用。這裡有一個穩定版本(

https://

github。com/docker/compo

se/releases

):

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

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

5。 Nvidia Docker Compose

不幸的是,Docker Compose 並不知道 Nvidia Docker 的存在。幸運的是,有一個解決方法:有一個小的 Python 指令碼,可以用 nvidia-docker 驅動程式生成配置。透過 pip 安裝 Nvidia Docker Compose:

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

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

現在你可以使用 nvidia-docker-compose 命令,而不是 docker-compose 了。

替代選擇

如果你不想使用 nvidia-docker-compose,你可以手動傳遞音量驅動程式,只需把這些選項新增到 docker-compose。yml:

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

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

6。 Bash 別名

但是 nvidia-docker-compose 需要輸入 21 個字元,這太多了。

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

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

很幸運我們可以使用 bash 別名。在你最喜愛的編輯器開啟~/。bashrc(有時是~/。bash_profile),輸入以下程式碼行:

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

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

透過執行 source ~/。bashrc 更新你的設定。

開始 TensorFlow 服務

現在我們準備好利用上述所有工具的優點。比如,我們執行一個 Tensorflow GPU 啟用的 Docker 容器。

在專案目錄中建立具有以下內容的 docker-compose。yml 檔案:

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

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

現在我們可以使用單個命令開始 TensorFlow Jupiter:

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

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

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

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

doc 是 nvidia-docker-compose 的別名——它將使用正確的 volume-driver 生成已修改的配置檔案 nvidia-docker-compose。yml,然後執行 docker-compose。

你可以使用相同的命令管理你的服務:

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

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

結論

但是這值得嗎?下面讓我們看一下其優缺點。

優點

無需考慮 GPU 裝置共享

不必再為英偉達驅動程式版本擔憂

擺脫了偏愛乾淨、簡單配置的命令標誌

再也不需要——name 標誌管理容器狀態

眾所周知已記錄並得到廣泛使用的實用程式

你的配置已為編制工具做好準備,比如理解 docker-compose 檔案的編制工具 Kubernetes

缺點

你不得不安裝更多工具

它是生產就緒(production-ready)的嗎

是的。在電影推薦應用 Movix 中,我們使用 GPU 加速的 TensorFlow 網路基於使用者輸入計算實時的電影選擇。

我們在 Proxy API 的 Rancher 叢集中有三臺帶有 Nvidia Titan X 的電腦。配置儲存在常規 docker-compose。yml 檔案中:因此在一個新伺服器上部署應用程式或者設定開發環境變得很輕鬆。目前為止它的表現堪稱完美。

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

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

為機器學習的未來做好準備吧!

原文連結:

https://

hackernoon。com/docker-c

ompose-gpu-tensorflow-%EF%B8%8F-a0e2011d36