Docker

Docker 會使用「容器」來建立虛擬環境,將 TensorFlow 安裝作業與系統的其他部分區隔開來。TensorFlow 程式會在這個虛擬環境執行。這個虛擬環境可以與主體機器共用資源,例如存取目錄、使用 GPU,以及連線至網際網路等。TensorFlow Docker 映像檔已針對每個 TensorFlow 版本經過測試。

Docker 能讓您以最簡單的方式,在 Linux 上啟用 TensorFlow GPU 支援,因為主體機器只需有 NVIDIA® GPU 驅動程式即可,不必安裝 NVIDIA® CUDA® Toolkit

TensorFlow Docker 需求

  1. 在本機主體機器上安裝 Docker
  2. 如要在 Linux 上支援 GPU,請安裝 NVIDIA Docker 支援
    • 請使用 docker -v 記下您的 Docker 版本。19.03 以前的版本需要使用 nvidia-docker2 和 --runtime=nvidia 旗標。19.03 以後的版本則需要使用 nvidia-container-toolkit 套件和 --gpus all 旗標。您可以在上方網頁連結中找到這兩個選項。

下載 TensorFlow Docker 映像檔

官方的 TensorFlow Docker 映像檔位於 tensorflow/tensorflow Docker Hub 存放區中。映像檔版本的標記遵循下列格式:

標記 說明
latest 最新版本的 TensorFlow CPU 二進位映像檔 (預設版本)。
nightly TensorFlow 映像檔的夜間版本 (不穩定)。
version 指定 TensorFlow 二進位映像檔的版本,例如:2.1.0
devel TensorFlow master 開發環境的夜間版本,包含 TensorFlow 原始碼。
custom-op 用於開發 TF 自訂運算的特殊實驗性映像檔。詳情請參閱這個網頁

每個基本標記都有用來新增或變更功能的變化版本:

標記變化版本 說明
tag-gpu 支援 GPU 的指定標記版本 (如下所示)
tag-jupyter 使用 Jupyter 的指定「標記」版本 (包含 TensorFlow 教學課程筆記本)

您可以一次使用多個變化版本。舉例來說,下列程式碼會將 TensorFlow 版本映像檔下載到您的電腦:

docker pull tensorflow/tensorflow                     # latest stable release
docker pull tensorflow/tensorflow:devel-gpu           # nightly dev release w/ GPU support
docker pull tensorflow/tensorflow:latest-gpu-jupyter  # latest release w/ GPU support and Jupyter

啟動 TensorFlow Docker 容器

請使用下列指令格式來啟動 TensorFlow 設定的容器:

docker run [-it] [--rm] [-p hostPort:containerPort] tensorflow/tensorflow[:tag] [command]

詳情請參閱 Docker 執行參考資料

範例:使用僅支援 CPU 的映像檔

我們使用 latest 標記的映像檔來驗證 TensorFlow 安裝狀態。Docker 初次執行時會下載新的 TensorFlow 映像檔:

docker run -it --rm tensorflow/tensorflow \
   python -c "import tensorflow as tf; print(tf.reduce_sum(tf.random.normal([1000, 1000])))"

讓我們來示範其他 TensorFlow Docker 方案。在 TensorFlow 設定的容器中啟動 bash 殼層工作階段:

docker run -it tensorflow/tensorflow bash

您可以在容器中啟動 python 工作階段並匯入 TensorFlow。

如要在容器中執行在主體機器上開發的 TensorFlow 程式,請掛接主機目錄,並變更容器的工作目錄 (-v hostDir:containerDir -w workDir):

docker run -it --rm -v $PWD:/tmp -w /tmp tensorflow/tensorflow python ./script.py

當容器中建立的檔案向主機公開時,可能會發生權限問題。我們一般會建議您在主機系統上編輯檔案。

使用 TensorFlow 的夜間版本啟動 Jupyter Notebook 伺服器:

docker run -it -p 8888:8888 tensorflow/tensorflow:nightly-jupyter

按照指示操作,並在主機的網路瀏覽器中開啟網址: http://127.0.0.1:8888/?token=...

GPU 支援

Docker 能讓您以最簡單的方式在 GPU 上執行 TensorFlow,因為主體機器只需有 NVIDIA® 驅動程式即可,不必安裝 NVIDIA® CUDA® Toolkit

請安裝 Nvidia Container Toolkit,為 Docker 新增 NVIDIA® GPU 支援。nvidia-container-runtime 僅適用於 Linux。詳情請參閱 nvidia-container-runtime 平台支援常見問題

檢查是否有可用的 GPU:

lspci | grep -i nvidia

驗證您的 nvidia-docker 安裝狀態:

docker run --gpus all --rm nvidia/cuda nvidia-smi

範例:使用採用 GPU 技術的映像檔

下載並執行採用 GPU 技術的 TensorFlow 映像檔 (可能需要幾分鐘的時間):

docker run --gpus all -it --rm tensorflow/tensorflow:latest-gpu \
   python -c "import tensorflow as tf; print(tf.reduce_sum(tf.random.normal([1000, 1000])))"

設定採用 GPU 技術的映像檔可能需要一些時間。如要重複執行以 GPU 為基礎的指令碼,你可以使用 docker exec 來重複使用容器。

使用最新的 TensorFlow GPU 映像檔,在容器中啟動 bash 殼層工作階段:

docker run --gpus all -it tensorflow/tensorflow:latest-gpu bash