技術工具
- 工具首頁\
- PyTorch/NLP-GPU
### 容器說明
我們從套件原始碼安裝的 PyTorch 已與 NVIDIA TensorRT 整合,這使得模型推理加速變得更為簡單。
於模型訓練方面,本環境亦整合了 Uber Horovod + OpenMPI。這使得單或多節點多GPU模型訓練可以更為輕鬆的實現。
此外,GPU 的高速運算能力,使得 CPU 準備資料的速度成為了可能的計算瓶頸。為了使 CPU 能夠快速地執行數值運算,或是減少 CPU 處理資料的耗時,此容器環境亦安裝了高效能的數值運算函式庫: Intel Math Kernel Library (Intel MKL)。此函式庫的整合,能夠讓 Scikit-learn (機器學習套件), NumPy/Scipy (數值/科學套件) 確保其計算性能可達最高水準。
此容器是專門設計給自然語言處理的開發者使用,因此,它亦包含了以下套件安裝: pytext (Facebook AI Research 的自然語言建模框架), PyTorch-NLP(自然語言模型建置/訓練), Jieba(中文斷詞), Pyhanlp(中文斷詞/依存句法分析, 模型已置於映像檔), NLTK(自然語言處理套件)以及 Gensim (自然語言處理套件,含 word2vec 模型)。
本容器亦包含了 NVIDIA Apex。Apex 是針對含有張量核心(Tensor core)的高階 NVIDIA 顯示卡所開發。Apex 支持 GPU 自動混精度訓練 (Automatic mixed-precision training; AMP),可使神經網路的訓練速度提升至 1.3x -3x,並且不會降低網路的預測能力。
為了有效的利用空間,本環境並無包含 CUDA development files。因此,本環境不可以用來編譯/開發 CUDA 程式。
### 下載方式
請於終端機執行以下指令:
```bash
moeidb/aigo:cu10.0-dnn7.6-gpu-pytorch-nlp-19.06
```
### 使用方式
#### 使用範例 1: 於背景啟動 Jupyterlab 服務
掛載當前位置目錄 (```$PWD```) 至容器內部的 ```/workspace``` 資料夾,並且讓 Jupyterlab 服務監聽本機的 port ```9999```:
```bash
# 決定 Jupyterlab 該監聽本機的哪一個 port
host_port=9999
# 啟動容器並取得容器 ID
container_id=$(nvidia-docker run --rm -d -p 9999:8888 -v $PWD:/workspace moeidb/aigo:cu10.0-dnn7.6-gpu-pytorch-nlp-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:
http://[your_ip]:${host_port}/?token=${notebook_token}
"
```
輸入以上指令於終端機後,應該會顯示一個網址:
```bash
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 腳本
```bash
# 建立一個測試腳本。此腳本將單純的匯入 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-nlp-19.06 python3 check_pyt_version.py
```
輸入以上指令於終端機後,應會顯示出 Docker 容器內部所安裝的 PyTorch 版本,如下:
```bash
PyTorch version = 1.1.0
```
請先登入後輸入您的回覆