跳到主要內容
  • TensorFlow/Dev

    • 更新於102 天前

    Tensorflow
    深度學習
    1181 0 0

我們從套件原始碼安裝的 TensorFlow 已與 NVIDIA TensorRT 整合,這使得模型推理加速變得更為簡單。

於模型訓練方面,本環境亦整合了 Uber Horovod + OpenMPI。這使得單或多節點多GPU模型訓練可以更為輕鬆的實現。

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

適用對象

AI學習者、開發

使用限制

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

使用方法

使用範例 1:於背景啟動 Jupyterlab 服務

掛載當前位置目錄 ($PWD) 至容器內部的 /workspace 資料夾,並且讓 Jupyterlab 服務監聽本機的 port 9999:

# 決定Jupyterlab該監聽本機的哪一個port 
host_port=9999

# 啟動容器並取得容器ID
container_id=$(nvidia-docker run --rm -d -p ${host_port}:8888 -v $PWD:/workspace moeidb/aigo:cu10.0-dnn7.6-gpu-tf-19.07) # 休息一會,靜待容器服務啟動

# 等待服務啟動
sleep 2.

# 擷取容器的Jupyterlab token
notebook_token=$(docker logs ${container_id} 2>&1 | grep -nP "(LabApp.*token=).*" | cut -d"=" -f 2) 

# 顯示連線至Jupyterlab服務的網址
printf "Open a browser and connect to:\n
        http://[your_ip]:${host_port}/?token=${notebook_token}\n
       "

輸入以上指令於終端機後,應該會顯示一個網址:

Open a browser and connect to:

        http://[your_ip]:9999/?token=87f6f7ad1455b7dde323f8a570897d4bf9dace8659e0e9bd

這代表我們已經在容器內啟動了 Jupyterlab 服務。接著,請開啟瀏覽器,並貼上此網址,即可使用 Jupyterlab 來撰寫 Python 筆記本。

注意事項:

  • 網址當中可見 token=87f6f7ad14...,其中 87f6f7ad14...是亂數產生的一串 token。由於 token 為隨機字串,因此您實際取得的 token 應和本範例不同。
  • 需將 [your_ip] 更改為機器的 IP 位址。 若您於本地端使用,則 [your_ip] 應為 127.0.0.1。
  • 開啟 Jupyterlab 後,會自動進入 /workspace 資料夾。因為建立容器時已將本機當前目錄 ${PWD} 掛載至容器內的 /workspace,所以您應該會在 /workspace 內看到先前存放於本機 ${PWD} 的檔案。
使用範例 2:利用容器環境執行 Python 腳本
# 建立一個測試腳本。此腳本將單純的匯入TensorFlow套件,並且印出其當前版本。 
printf "import tensorflow as tf \
        \nprint('TensorFlow version=', tf.__version__)" \
        > check_tf_version.py

# 我們已建立一個位於${PWD}的Python腳本。接著,我們試跑一個容器來執行它:
nvidia-docker run -it --rm -v ${PWD}:/workspace \
                  moeidb/aigo:cu10.0-dnn7.6-gpu-tf-19.07 python3 check_tf_version.py

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

TensorFlow version = 1.14.0

若您能見到此訊息,則表示 Python 腳本已順利執行完畢。

套件 說明 版本
TensorFlow; 包含 TensorRT in TensorFlow (TF-TRT) 由Google維護的,開源的AI模型開發框架 1.14.0
Keras Keras是基於底層AI框架的高階API。有了它,我們就可以便捷的去建立,訓練和使用AI模型 2.2.4
Python 我們環境採用Python 3.7,它於字串處理和檔案搜索方面較Python3.6快很多 3.7.3
Horovod 使用Uber Horovod可簡易的將AI訓練利用多GPU做加速 0.16.4
OpenMPI OpenMPI為Uber Horovod所需,可支持跨卡/跨伺服器節點的溝通 4.0.0
NVIDIA CUDA (Runtime and Development Files) CUDA為NVIDIA為其GPU所提供的開發框架。所有AI開發框架皆會呼叫其所提供的API 10.0.130-1
NVIDIA cuDNN cuDNN是NVIDIA專門為深度神經網路開發所提供的函示庫 7.6.0.64-1+cuda10.0
NVIDIA TensorRT 於模型部署階段,可利用NVIDIA TensorRT將模型優化,或將單精度模型以合適的方式轉換成半精度模型,使模型推理能夠以高速運行 5.0.2-6+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.44.1
Numexpr 數學表達式經過計算優化後,可提升最高至4倍速 2.6.9
pyodbc 連結資料庫使用 4.0.26
Jupyterlab 程式碼運行,紀錄,筆記撰寫,皆可存放並整理至筆記本 1.0.1
pandas 建立並整理資料表,並且提供簡易的方式將資料表視覺化 0.24.2
Matplotlib 資料視覺化套件,可繪製長條圖,直方統計圖,散點圖等 3.1.1
Seaborn 基於Matplotlib的高階繪圖API; 可接收資料表,自動做分群後繪圖 0.9.0
Bokeh 可嵌入至網頁,實現互動式的數據呈現 1.2.0