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


之前的[筆記] 基於nvidia/cuda的深度學習基礎鏡像構建流程已經Out了,以這篇為准。

基於NVidia官方的nvidia/cuda image,構建適用於Deep Learning的基礎image。
思路就是先把常用的東西都塞進去,build成image,此后使用時想裝哪個框架就裝。
為了體驗重裝系統的樂趣,所以采用慢慢來比較快的步驟,而不是通過Dockerfile來build。

環境信息

已經安裝了Docker CENVIDIA 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了。


免責聲明!

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



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