使用Docker部署TensorFlow環境

提示

本章節主要針對沒有 Docker 經驗的讀者們。對於已熟悉 Docker 的讀者,可直接參考`TensorFlow官方文檔 <https://www.tensorflow.org/install/docker>`_ 進行部署。

Docker 是輕量級的容器(Container)環境,通過將程式放在虛擬的 “容器” 或者說 “保護層” 中運行,既避免了配置各種函式庫、相關參數設定和環境變數的麻煩,又克服了虛擬機資源占用太多、啟動慢的缺點。使用 Docker 部署 TensorFlow 的步驟如下:

  1. 安裝 Docker 。Windows下,下載官方網站的安裝包進行安裝即可。Linux 下建議使用 官方的快速腳本 進行安裝,在終端機下輸入:

wget -qO- https://get.docker.com/ | sh

如果當前的用戶非 root 用戶,可以執行 sudo usermod -aG docker your-user 命令將當前用戶加入 docker 用戶組。重新登錄後即可直接運行 Docker。

Linux下通過以下命令啓動Docker服務:

sudo service docker start
  1. 選取 TensorFlow 映像檔。Docker 將應用程式及其相關參數設定打包在映像文件中,通過映像文件生成容器。使用 docker image pull 命令拉取適合自己需求的 TensorFlow 映像檔,例如:

docker image pull tensorflow/tensorflow:latest-py3        # 最新穩定版本TensorFlow(Python 3.5,CPU版)
docker image pull tensorflow/tensorflow:latest-gpu-py3    # 最新穩定版本TensorFlow(Python 3.5,GPU版)

更多映像版本可參考 TensorFlow官方文檔

小技巧

建議使用 Docker映像鏡像 將能夠提高下載速度。

  1. 基於選取的映像文件,創建並啟動 TensorFlow 容器。使用 docker container run 命令創建一個新的 TensorFlow 容器並啟動。

CPU版本的TensorFlow:

docker container run -it tensorflow/tensorflow:latest-py3 bash

提示

docker container run 指令的部分選項如下:

  • -it 讓 docker 運行的容器能夠在終端進行互動,具體而言:

    • -i--interactive ):允許與容器內的標準輸入 (STDIN) 進行互動。

    • -t--tty ):在新容器中指定一個偽終端。

  • --rm :當容器中的進程運行完畢後自動刪除容器。

  • tensorflow/tensorflow:latest-py3 :新容器基於的映像檔。如果當前不存在指定的映像檔,會自動從網路上下載。

  • bash 在容器中運行的命令(進程)。Bash 是大多數 Linux 系統的默認 Shell。

GPU版本的TensorFlow:

若需在 TensorFlow Docker 容器中開啟 GPU 支援,需要有一塊 NVIDIA 顯示卡並已正確安裝驅動程式(詳見 「TensorFlow安裝」一章 )。同時需要安裝 nvidia-docker 。依照官方文件中的 quickstart 部分逐行輸入命令即可。

警告

當前nvidia-docker僅支援Linux。

安裝完畢後,在 docker container run 指令中加入 --runtime=nvidia 選項,並基於具有 GPU 支援的 TensorFlow Docker 映像檔啟動容器即可,如下:

docker container run -it --runtime=nvidia tensorflow/tensorflow:latest-gpu-py3 bash

Docker常用指令

映像(image)相關操作:

docker image pull [image_name]  # 選取映像檔[image_name]到本機
docker image ls                 # 列出所有的映像檔
docker image rm [image_name]    # 刪除名為[image_name]的映像檔

容器(container)相關操作:

docker container run [image_name] [command] # 基於[image_name]映像檔建立並啟動容器,並運行[command]
docker container ls                         # 列出本機正在運行的容器
                                            # (加入--all參數列出所有容器,包括已停止運行的容器)
docker container rm [container_id]          # 刪除ID為[container_id]的容器

Docker 入門教程可參考 Docker 入門教程Docker Cheat Sheet