[筆記] 基於nvidia/cuda的深度學習基礎鏡像構建流程


基於NVidia開源的nvidia/cuda image,構建適用於DeepLearning的基礎image。
思路就是先把常用的東西都塞進去,再裝某個框架就省事兒了。
為了體驗重裝系統的樂趣,所以采用慢慢來比較快的步驟,而不是通過Dockerfile來build。

環境信息

已經安裝了Docker CEnvidia-docker2

Host OS: Ubuntu 18.04 64 bit
CUDA: 10.0
cuDNN: 7.4
Docker CE: 18.09.1
nvidia-docker2: 2.0.3

鏡像信息

拉取鏡像nvidia/cuda

$ sudo docker pull nvidia/cuda

目前拉取到的鏡像nvidia/cuda信息如下:

OS: Ubuntu 18.04.1 LTS
CUDA: 10.0
Size: 2.24GB

啟動鏡像

創建目錄base,方便數據導入導出,映射為容器內的/host目錄,然后在這個目錄下運行命令創建容器dl-base

$ sudo nvidia-docker run -it --name dl-base -v `pwd`:/host nvidia/cuda

一切順利的話,出現類似下面的命令行:

root@a336efb2d5b0:/host#

可以運行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'

export PATH=/usr/local/cuda-10.0/bin:$PATH
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
export LD_LIBRARY_PATH="/usr/local/lib:/usr/local/cuda-10.0/lib64:/home/etworker/anaconda3/lib:$LD_LIBRARY_PATH"
export CUDNN_PATH="/usr/local/cuda-10.0/lib64/libcudnn.so"

再使其生效:

$ source ~/.bashrc

安裝cnDNN

Host下雖然已經安裝了cnDNN環境,但是容器內沒法使用,所以需要再搞一把。
先將cnDNN的壓縮包解壓到base目錄,此處為cudnn-10.0-linux-x64-v7.4.2.24目錄,在容器命令行下運行:

$ cp /host/cudnn-10.0-linux-x64-v7.4.2.24/cuda/include/cudnn.h /usr/local/cuda-10.0/include
$ cp /host/cudnn-10.0-linux-x64-v7.4.2.24/cuda/lib64/libcudnn* /usr/local/cuda-10.0/lib64
$ chmod a+r /usr/local/cuda-10.0/include/cudnn.h /usr/local/cuda-10.0/lib64/libcudnn*

然后驗證一下,不報錯就OK了。

$ echo -e '#include"cudnn.h"\n void main(){}' | nvcc -x c - -o /dev/null -lcudnn

安裝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進行配置。

安裝python常用組件

Ubuntu 18.04的容器,默認安裝了python 3.6.7,此時還需安裝pip:

$ apt install -y python3-pip

建議不要更新pip,否則容易出現問題。

創建pip的配置文件目錄~/.pip,再創建文件~/.pip/pip.conf,內容如下:

[global]
trusted-host=mirrors.aliyun.com
index-url=https://mirrors.aliyun.com/pypi/simple/

安裝常用的包:

$ pip3 install numpy matplotlib Pillow scipy jupyter pandas h5py easydict sklearn

安裝opencv-python

$ apt install -y libsm6 libxext6 libfontconfig1 libxrender1
$ pip3 install opencv-python

此時安裝的opencv版本是4.0.0。

保存鏡像

至此,就可以在Host下運行命令將容器保存為鏡像了。

$ sudo nvidia-docker commit dl-base dl/base

這樣就生成了一個鏡像dl/base,大小為4.36GB。

在此鏡像基礎上,可以自行安裝不同的框架。

jupyter notebook

如果希望在容器中啟動jupyter notebook,需要加上參數如下:

$ jupyter notebook --ip=0.0.0.0 --allow-root


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM