跳到主要內容
  • PyTorch/CV

    • 更新於133 天前

    PyTorch
    電腦視覺
    151 0 0

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

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

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

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

本容器亦包含了 NVIDIA Apex。Apex 是針對含有張量核心(Tensor core)的高階 NVIDIA 顯示卡所開發。Apex 支持 GPU 自動混精度訓練 (Automatic mixed-precision training; AMP),可使神經網路的訓練速度提升至 1.3x -3x,並且不會降低網路的預測能力。

適用對象

AI學習者,開發者

使用限制

為了有效的利用空間,本環境並無包含 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-pytorch-cv-19.06) # 休息一會,靜待容器服務啟動

# 等待服務啟動
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 腳本
# 建立一個測試腳本。此腳本將單純的匯入PyTorch,並且印出其當前版本。 
printf "import torch \
        \nprint('PyTorch version=', torch.__version__)" \
        > check_pyt_version.py

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

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

PyTorch version = 1.1.0

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

套件 說明 版本
PyTorch 由Facebook AI Research (FAIR)維護的,開源的AI模型開發框架。 1.1.0
torchvision 含有一些電腦視覺相關的基本模型和資料集,官方建議隨PyTorch一起安裝。 0.3.0
Apex 除了支持自動混精加速外,還實作了SyncBatchNorm,有效利用多卡加大batch size。 0.1
Detectron 涵蓋Facebook AI Research所實作的各種物件偵測演算法。 -
maskrcnn-benchmark Facebook AI Research提供高效的Mask-RCNN模型(用於影像分割和物件偵測)。 -
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) 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
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