我們從套件原始碼安裝的 PyTorch 已與 NVIDIA TensorRT 整合,這使得模型推理加速變得更為簡單。此環境亦整合了 Uber Horovod: 只需要增加數行程式碼,即可利用多 GPU 來加速模型訓練。
此外,GPU 的高速運算能力,使得 CPU 準備資料的速度成為了可能的計算瓶頸。為了使 CPU 能夠快速地執行數值運算,或是減少 CPU 處理資料的耗時,此容器環境亦安裝了高效能的數值運算函式庫: Intel Math Kernel Library (Intel MKL)。此函式庫的整合,能夠讓 Scikit-learn (機器學習套件), NumPy/Scipy (數值/科學套件) 確保其計算性能可達最高水準。
本容器亦包含了 NVIDIA Apex。Apex 是針對含有張量核心(Tensor core)的高階 NVIDIA 顯示卡所開發。Apex 支持 GPU 自動混精度訓練 (Automatic mixed-precision training; AMP),可使神經網路的訓練速度提升至 1.3x -3x,並且不會降低網路的預測能力。
AI學習者,開發者
無
掛載當前位置目錄 ($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-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 筆記本。
注意事項:
# 建立一個測試腳本。此腳本將單純的匯入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-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 |
OpenCV (Intel-MKL-acclerated) | 用於影像處理,以及建立影像相關的機器學習模型。 | 4.1.0 |
Apex | 除了支持自動混精加速外,還實作了SyncBatchNorm,有效利用多卡加大batch size。 | 0.1 |
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 |
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 |