[Docker] 教你如何用Docker快速搭建深度學習環境


本教程搭建集 Tensorflow、Keras、Coffe、PyTorch 等深度學習框架於一身的環境,及jupyter。

本教程使用nvidia-docker啟動實例,通過本教程可以從一個全新的Ubuntu系統快速搭建出GPU深度學習環境。

 

一、安裝依賴環境

1. 使用國內鏡像加速安裝

https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/
此處默認環境:ubuntu16.04LTS

sudo mv /etc/apt/sources.list /etc/apt/sources.list.old
sudo vim /etc/apt/sources.list

 

然后將下面的內容寫入該文件:
需要注意的是:不同版本的ubuntu鏡像源不一樣,可以在清華鏡像源查詢

# 默認注釋了源碼鏡像以提高 apt update 速度,如有需要可自行取消注釋
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security main restricted universe multiverse

# 預發布軟件源,不建議啟用
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-proposed main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-proposed main restricted universe multiverse
Tuna Mirrors

 

使鏡像源生效

sudo apt-get update

 

2. 安裝 NVIDIA GPU 驅動

sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt-get update
sudo apt-get install nvidia-384 nvidia-prime

 

查看是否安裝成功

watch nvidia-smi # 該命令可查看GPU使用情況

 

3. 安裝 Docker

https://mirrors.tuna.tsinghua.edu.cn/help/docker-ce/
以ubuntu16.04LTS為例

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository \
   "deb [arch=amd64] https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu \
   $(lsb_release -cs) \
   stable"
sudo apt-get update
sudo apt-get install docker-ce

 

查看是否安裝成功

docker -v

 

將當前用戶加入到docker用戶組(這樣在執行docker命令的時候就不會出現Permission Denied了)

sudo usermod -aG docker ${YOUR_NAME_HERE}

 

4. 安裝 Nvidia-docker

https://github.com/NVIDIA/nvidia-docker

curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | \
  sudo apt-key add -
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | \
  sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update

sudo apt-get install -y nvidia-docker2
sudo pkill -SIGHUP dockerd

 

這里的最后一步會重啟docker,並載入nvidia-docker的配置
查看是否安裝成功

nvidia-docker -v

 

二、拉取鏡像並啟動

1. 拉取鏡像

這里我們使用了deepo鏡像:https://hub.docker.com/r/ufoym/deepo/
其下的 ufoym/deepo:all-py36-jupyter,該鏡像收集了大部分深度學習框架,運行在GPU環境,以及配有jupyter。

docker pull ufoym/deepo:all-py36-jupyter

 

2. 啟動鏡像

默認配置(不推薦)

nvidia-docker run -it -p 8888:8888 ufoym/deepo:all-py36-jupyter jupyter notebook --no-browser --ip=0.0.0.0 --allow-root --NotebookApp.token= --notebook-dir='/root'

 

外部掛載配置(掛載外部目錄,方便移動數據,不推薦)

# 這里使用了-v選項用於掛載外部目錄
nvidia-docker run -it -p 8888:8888 --ipc=host -v /data:/data ufoym/deepo:all-py36-jupyter jupyter notebook --no-browser --ip=0.0.0.0 --allow-root --NotebookApp.token= --notebook-dir='/data'

 

博主推薦:后台運行並掛載外部目錄(需要注意的地方是要把參數-it改成-i,否則無法運行在后台)

nohup nvidia-docker run -i -p 8888:8888 --ipc=host -v /data:/data ufoym/deepo:all-jupyter-py36 jupyter notebook --no-browser --ip=0.0.0.0 --allow-root --NotebookApp.token= --notebook-dir='/data' &

 

參數說明

  • -v /data:/data:左邊是外部路徑,右邊是內部路徑,例如我的文件放在/home/ubuntu/data下,需要掛載到docker內部的路徑是/data,則參數配置應該是-v /home/ubuntu/data:/data
  • --notebook-dir:jupyter工作目錄的默認路徑,推薦與上面的docker內部數據路徑相同,即/data
  • -p 8888:8888:左邊是外部端口,右邊是docker鏡像端口。如果想將jupyter應用掛載在8080端口,只需修改參數-p 8080:8888即可
  • --NotebookApp.token:進入jupyter的密碼,這里設置的是空

 

三、 成功啟動

 

四、其他

1. import tensorflow時遇到Future Warning解決方案

錯誤如下:

FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.
  from ._conv import register_converters as _register_converters

 

解決方案:
進入jupyter terminal並輸入

pip install --upgrade numpy
pip install --upgrade h5py

 

問題解決。

 

2. 進入docker shell,以便使用裝有deeplearning環境的python交互式命令行

docker exec -it $(docker ps | awk '{print $1}' | sed -n '2p') bash

可以把這一段代碼用alias鏈接后方便使用,在~/.profile下添加這一行:

alias pysh="docker exec -it $(docker ps | awk '{print $1}' | sed -n '2p') bash"

讓配置生效

source ~/.profile

再次輸入pysh就可以快速進入docker shell


免責聲明!

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



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