跳到主要內容
  • Tensorflow Base

    • 更新於96 天前

    深度學習
    541 0 0

“cu10.0-dnn7.5-gpu-tf-19.04”代表此環境為2019年4月(19.04) 建置的GPU (gpu) 運算開發容器。此環境內含使用NVIDIA CUDA10.0 (cu10.0) 和NVIDIA cuDNN7.5 (dnn7.5) 的TensorFlow (tf)。

我們從套件原始碼安裝的TensorFlow已與NVIDIA TensorRT整合,這使得模型推理加速變得更為簡單。此環境亦整合了Uber Horovod: 只需要增加數行程式碼,即可利用多GPU來加速模型訓練。

此外,GPU的高速運算能力,使得CPU準備資料的速度成為了可能的計算瓶頸。為了使CPU能夠快速地執行數值運算,或是減少CPU處理資料的耗時,此容器環境亦安裝了高效能的數值運算函式庫: Intel Math Kernel Library (Intel MKL)。此函式庫的整合,能夠讓Scikit-learn (機器學習套件), NumPy/Scipy (數值/科學套件) 確保其計算性能可達最高水準。

適用對象

AI學習者、開發

使用限制

本環境除包含CUDA runtime外,亦有CUDA development files。因此,本環境亦可以用來編譯/開發CUDA程式。

本環境除了單機/單伺服器使用以外,亦可透過Horovod + OpenMPI實現叢集伺服器跨節點運算。

使用方法

(1).於背景啟動Jupyterlab服務,該服務將於本機監聽port 9999,並將當前目錄 ($PWD) 掛載至容器內部的 /workspace 資料夾:

# 啟動容器並取得容器ID
container_id=$(nvidia-docker run --rm -d -p 9999:8888 -v $PWD:/workspace moeidb/aigo:cu10.0-dnn7.5-gpu-tf-19.04)
# 休息一會,靜待容器服務啟動
sleep 1.5
# 擷取容器的Jupyter notebook token
notebook_token=$(docker logs ${container_id} 2>&1 | grep -nP "(LabApp.*token=).*" | cut -d"=" -f 2)
# 顯示Jupyter notebook服務的token
echo token=${notebook_token}

輸入以上指令於終端機後,應該會顯示出類似於以下的訊息:

token=42cb5b3055ff5616e3dfecd805ee5b3815f69792f5834271

代表我們已經正常啟動Jupyterlab服務,並且取得了用於連線至該服務的token (token為隨機產生,故你所擷取出來的token和本文中的token不會相同)。接下來請就開啟瀏覽器,並連線至: http://[your_ip]:9999/?token=[your_token]
即可使用Jupyterlab服務。其中,[your_ip] 是您啟動容器的機器IP位址,[your_token] 是你剛剛從容器擷取出來的token。

(2).利用容器環境執行一個Python程式:

# 首先我們建立一個python script,它做的事情是匯入TensorFlow套件並且印出TensorFlow的版本。
printf "import tensorflow as tf \ \nprint('TensorFlow version=',tf.__version__)" \ > check_tf_version.py # 接著我們試著跑一個容器來執行該範例程式。
nvidia-docker run -it --rm -v ${PWD}:/workspace moeidb/aigo:cu10.0-dnn7.5-gpu-tf-19.04 python3 check_tf_version.py

輸入以上指令於終端機後,應會顯示出Docker容器內部的TensorFlow版本,訊息如下:

TensorFlow version= 1.13.1
表示程式已正常利用我們所維護的Docker容器運行。

套件 說明 版本
TensorFlow; 包含 TensorRT in TensorFlow (TF-TRT) 由Google維護的,開源的AI模型開發框架 1.13.1
Keras Keras是基於底層AI框架的高階API。有了它,我們就可以便捷的去建立,訓練和使用AI模型 2.2.4
Python 我們環境採用Python 3.7,它於字串處理和檔案搜索方面較Python3.6快很多 3.7.3
Horovod 使用Uber Horovod可簡易的將AI訓練利用多GPU做加速 0.16.1
OpenMPI OpenMPI為Uber Horovod所需,可支持跨卡/跨伺服器節點的溝通 4.0.0
NVIDIA CUDA runtime libraries CUDA為NVIDIA為其GPU所提供的開發框架。所有AI開發框架皆會呼叫其所提供的API 10.0.130
NVIDIA cuDNN runtime libraries cuDNN是NVIDIA專門為深度神經網路開發所提供的函示庫 7.5.0.56-1+cuda10
NVIDIA TensorRT runtime libraries 於模型部署階段,可利用NVIDIA TensorRT將模型優化,或將單精度模型以合適的方式轉換成半精度模型,使模型推理能夠以高速運行 5.0.2-1+cuda10.0
NVIDIA Collectives Communication Library (NCCL) Runtime 使用多GPU訓練時,TensorFlow可利用NVIDIA NCCL做多GPU加速 2.4.2-1+cuda10.0
Intel Math Kernel Library (Intel MKL) 針對Intel CPU做快速的數值運算 2019.3-062
NumPy(Intel-MKL-acclerated) 常用的數值運算套件 (利用Intel MKL加速) 1.16.2
SciPy(Intel-MKL-acclerated) 常用的科研套件,提供一些基礎算法,統計方法 (利用Intel MKL加速) 1.2.0
Scikit-learn(Intel-MKL-acclerated) 常用的機器學習套件,提供一些基礎算法,統計方法 (利用Intel MKL加速) 0.20.3
Numba Python程式碼經JIT編譯器編譯後,可加速百倍至千倍 0.43.1
Numexpr 數學表達式經過計算優化後,可提升最高至4倍速 2.6.9
pyodbc 連結資料庫使用 4.0.26
Jupyterlab 程式碼運行,紀錄,筆記撰寫,皆可存放並整理至筆記本 0.35.5
pandas 建立並整理資料表,並且提供簡易的方式將資料表視覺化 0.24.2
Matplotlib 資料視覺化套件,可繪製長條圖,直方統計圖,散點圖等 3.0.3
Seaborn 基於Matplotlib的高階繪圖API; 可接收資料表,自動做分群後繪圖 0.9.0
Bokeh 可嵌入至網頁,實現互動式的數據呈現 1.1.0