# [安裝紀錄] 安裝 Docker-CE 與使用 Nvidia GPU ###### tags: `Docker` `Docker-CE` `nvidia-docker` `CUDA` `Ubuntu` 此篇記錄了在 Ubuntu 20.04 安裝Docker-CE與在Container中使用到底層GPU的過程。 Docker-CE 從 19 版開始支援使用 Host 的 GPU 資源,19 版之前的版本需要使用 `nvidia-docker` 來啟動 container 才可以使用GPU資源。 ## 操作環境 * Ubuntu 20.04 ## 已安裝程式 要透過 Docker 使用到底層GPU的資源時,要先確認顯示卡驅動、CUDA、CuDNN是否已經安裝成功,這台電腦已經安裝了下列的版本。 * Nvidia 驅動程式 418.152.00 * CUDA 10.0 * CuDNN 7.6.5 ## 安裝 ### 前置設定 * 更新apt-get ```shell $ sudo apt-get update ``` * 安裝相關packages ```shell $ sudo apt-get install \ apt-transport-https \ ca-certificates \ curl \ gnupg-agent \ software-properties-common ``` * 新增 Docker 官方 GPG key ```shell $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - ``` * 透過以下指令去新增 stable 版本 repository ```shell $ sudo add-apt-repository \ "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) \ stable" ``` ### 安裝 Docker Engine - Docker CE * 更新apt ```shell $ sudo apt-get update ``` * 安裝最新版本的 docker engine, docker command 以及 docker container ```shell $ sudo apt-get install docker-ce docker-ce-cli containerd.io ``` * 也可以透過下面指令安裝特定版本docker packages ```shell $ sudo apt-get install docker-ce=<VERSION_STRING> docker-ce-cli= <VERSION_STRING> containe ``` ### 確認安裝狀況 利用以下指令測試安裝是否完成。 * 檢查版本 ```shell $ sudo docker -v ``` * 啟動一個container來測試是否偵測的到GPU ```shell $ sudo docker run --gpus 1 -i -t nvidia/cuda:10.0-base nvidia-smi ``` 如果有正常抓到GPU會顯示顯卡資訊 ```shell $ sudo docker run --gpus 1 -i -t nvidia/cuda:10.0-base nvidia-smi Wed Dec 9 07:01:31 2020 +-----------------------------------------------------------------------------+ | NVIDIA-SMI 418.152.00 Driver Version: 418.152.00 CUDA Version: 10.1 | |-------------------------------+----------------------+----------------------+ | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | |===============================+======================+======================| | 0 Tesla K80 Off | 00000000:0D:00.0 Off | 0 | | N/A 77C P0 59W / 149W | 668MiB / 11441MiB | 0% Default | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: GPU Memory | | GPU PID Type Process name Usage | |=============================================================================| +-----------------------------------------------------------------------------+ ``` 接著啟動 CUDA 的 Ubuntu Docker 進行環境部署或開發。 ```shell $ sudo docker run --gpus 1 -i -t nvidia/cuda:10.0-base-ubuntu18.04 bash ``` 如果需要其他版本的 CUDA 或 Ubuntu 可以到 [Cuda Opensource Image](https://developer.download.nvidia.com/compute/cuda/opensource/image/) 去找所需的板本。 * 使用指定的GPU數量來啟動 Container ```shell # 使用所有GPU $ docker run --gpus all nvidia/cuda:9.0-base nvidia-smi # 使用2個GPU $ docker run --gpus 2 nvidia/cuda:9.0-base nvidia-smi # 指定GPU執行 $ docker run --gpus '"device=1,2"' nvidia/cuda:10.0-base nvidia-smi $ docker run --gpus '"device=UUID-ABCDEF,1"' nvidia/cuda:10.0-base nvidia-smi ``` ## 遭遇問題 如果進入 Docker 環境後使用 OpenCV 顯示以下錯誤 ``` ImportError: libGL.so.1: cannot open shared object file: No such file or directory ``` 則可以透過下列指令安裝遺失的套件來解決。 ```shell $ sudo apt update $ sudo apt install libgl1-mesa-glx ``` ## 參考 * Docker與GPU支援 1. [docker使用GPU总结](https://blog.csdn.net/weixin_43975924/article/details/104046790) * Docker CE安裝 1. [Day-3 安裝 Docker](https://ithelp.ithome.com.tw/articles/10239123) 2. [Day27:Docker in VM on PVE](https://ithelp.ithome.com.tw/articles/10252098) 3. [Day28:在 Docker Container 裡使用 GPU Resource](https://ithelp.ithome.com.tw/articles/10195029) * Docker指令 1. [【Day 3】 - Docker 基本指令操作](https://ithelp.ithome.com.tw/articles/10186431) * 其他 1. [ImportError: libGL.so.1: cannot open shared object file: No such file or directory](https://github.com/conda-forge/pygridgen-feedstock/issues/10)