跳到主要內容
  • MXNet/CV

    • 更新於65 天前

    MXNet
    電腦視覺
    47 0 0

“cu10.0-dnn7.6-gpu-mx-cv-19.09” 代表此環境為 2019 年 6 月(19.09) 建置的 AI 開發容器。此環境內含使用 NVIDIA CUDA 10.0 (cu10.0)和 NVIDIA cuDNN 7.6(dnn7.6)的 MXNet(mx) 開發框架。此環境亦包含一些用於 Computer Vision (cv) 的套件。

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

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

此容器是專門設計給電腦視覺相關的開發者使用,因此,它亦包含了以下的套件安裝: OpenCV (應用於電腦視覺),imgaug (應用於圖像增益),pydicom (用於讀取醫療影像) ,GDCM (Grassroots DICOM圖檔函式庫)。

適用對象

AI學習者,開發者

使用限制

本環境專門用於電腦視覺 AI 開發。為了精簡映像檔,本環境並未包含 CUDA development files。因此,開發者不可利用 CUDA 來編譯/開發泛用 GPU 程式。

使用方法

使用範例 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.6-gpu-mx-cv-19.06) 

# 休息一會,靜待容器服務啟動
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,它做的事情是匯入 MXNet 套件並且印出 MXNet 的版本。
printf "import mxnet \
\nprint('MXNet version=', mxnet.__version__)" \
> check_mx_version.py

# 接著我們試著跑一個容器來執行該範例程式。
nvidia-docker run -it --rm -v ${PWD}:/workspace moeidb/cu10.0-dnn7.6-gpu-mx-cv-19.09 python3 check_mx_version.py

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

MXNet version= 1.6.0

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

套件 說明 版本
Apache MXNet 是一個主要由Amazon開發者所維護的AI模型開發框架。 1.16.0-dev
Python 我們環境採用Python 3.7,它於字串處理和檔案搜索方面較Python3.6快很多。 3.7.3
Horovod 使用Uber Horovod可簡易的將AI訓練利用多GPU做加速。 0.18.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.6.0.64-1+cuda10
NVIDIA TensorRT runtime libraries 於模型部署階段,可利用NVIDIA TensorRT將模型優化,或將單精度模型以合適的方式轉換成半精度模型,使模型推理能夠以高速運行。 5.0.2-1+cuda10.0
NVIDIA Collectives Communication Library (NCCL) Runtime 使用多GPU訓練時,AI框架可利用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.2
Scikit-learn (Intel-MKL-acclerated) 常用的機器學習套件,提供一些基礎算法,統計方法 (利用Intel MKL加速)。 0.20.3
OpenCV (Intel-MKL-acclerated) 用於影像處理,以及建立影像相關的機器學習模型。 4.1.0
imgaug 用於data augmentation (資料增益)。 0.2.9
pydicom 用於讀取醫療影像。 1.2.2
gdcm 須經由此函式庫的幫助,才能透過pydicom讀取壓縮過的醫療影像。 2.8.9
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