之前的[筆記] 基於nvidia/cuda的深度學習基礎鏡像構建流程已經Out了,以這篇為准。
基於NVidia官方的nvidia/cuda
image,構建適用於Deep Learning的基礎image。
思路就是先把常用的東西都塞進去,build成image,此后使用時想裝哪個框架就裝。
為了體驗重裝系統的樂趣,所以采用慢慢來比較快的步驟,而不是通過Dockerfile
來build。
環境信息
已經安裝了Docker CE
和NVIDIA Container Toolkit
,具體流程參考這里。
Host OS: Ubuntu 18.04 64 bit
CUDA: 10.0
cuDNN: 7.4
Docker CE: 19.03.0
鏡像信息
可以在nvidia/cuda查看提供的鏡像列表,不同tag的區別是:
- base: 基於CUDA,包含最精簡的依賴,用於部署預編譯的CUDA應用,需要手工安裝所需的其他依賴。
- runtime: 基於base,添加了CUDA toolkit共享的庫
- devel: 基於runtime,添加了編譯工具鏈,調試工具,頭文件,靜態庫。用於從源碼編譯CUDA應用。
為了省事,這里選擇nvidia/cuda:10.0-cudnn7-devel
。
$ sudo docker pull nvidia/cuda:10.0-cudnn7-devel
目前拉取到的鏡像信息如下:
OS: Ubuntu 18.04.2 LTS
Size: 3.09 GB
啟動鏡像
創建目錄base
,方便數據導入導出,映射為容器內的/host
目錄,然后在這個目錄下運行命令創建容器dl-base
。
$ sudo docker run -it --gpus all -P --name dl-base -v `pwd`:/host nvidia/cuda:10.0-cudnn7-devel
一切順利的話,出現類似下面的命令行:
root@d6421dac4cec:/#
可以運行nvidia-smi
驗證容器內的CUDA環境正常。
替換阿里源
大陸的網絡環境下,阿里源速度還不錯。
將下面的內容存為base
目錄下的sources.list
文件。
deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted
deb http://mirrors.aliyun.com/ubuntu/ bionic universe
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates universe
deb http://mirrors.aliyun.com/ubuntu/ bionic multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted
deb http://mirrors.aliyun.com/ubuntu/ bionic-security universe
deb http://mirrors.aliyun.com/ubuntu/ bionic-security multiverse
在容器命令行下運行命令更新源。
$ cp /host/sources.list /etc/apt/sources.list
$ apt update
安裝基本工具
$ apt install -y vim curl git iputils-ping net-tools telnet tmux unzip
創建工作及下載目錄
$ mkdir -p /work/download
修改~/.bashrc
在文件尾部添加下面內容:
alias u='cd ..'
alias ins='apt install -y'
alias ta='tmux a -t'
alias jn='jupyter notebook --ip=0.0.0.0 --allow-root'
再使其生效:
$ source ~/.bashrc
安裝openssh-server
$ apt install -y openssh-server
修改/etc/ssh/sshd_config
,找到#PermitRootLogin
開頭的這一行,修改為PermitRootLogin yes
,這樣就可以通過root登錄了。
然后修改密碼:
$ passwd
兩次輸入密碼,然后重啟ssh:
$ /etc/init.d/ssh restart
出現下面內容就OK了。
* Restarting OpenBSD Secure Shell server sshd [ OK ]
這里為了簡單粗暴,采用了root來登陸。
如果考慮安全,可自行創建用戶,並對ssh進行配置。
安裝miniconda
也可按需安裝anaconda等python包,這里以miniconda為例。
$ wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
$ sh Miniconda3-latest-Linux-x86_64.sh
安裝時問是否初始化,選擇yes:
Do you wish the installer to initialize Miniconda3 by running conda init? [yes|no]
再使其生效:
$ source ~/.bashrc
配置pip源為阿里源:
$ pip config set global.index-url https://mirrors.aliyun.com/pypi/simple
配置conda源為清華源:
$ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
$ conda config --set show_channel_urls yes
安裝常用的包:
$ conda install jupyter numpy matplotlib Pillow scipy pandas opencv
這里安裝的opencv是3.4.2
保存鏡像
至此,就可以在Host下運行命令將容器保存為鏡像了。
$ sudo docker commit dl-base dl/base
這樣就生成了一個鏡像dl/base
,大小為6.51GB。
在此鏡像基礎上,可以自行安裝不同的框架。
jupyter notebook
如果希望在容器中啟動jupyter notebook
,需要加上參數如下:
$ jupyter notebook --ip=0.0.0.0 --allow-root
這個已經加入alias了。