Docker_for_DL

Docker for DL in Ubuntu 18.04

[TOC]

Install Docker

Install Docker,查看左侧Ubuntu安装即可。

Install nvidia-docker

nvidia-docker

  1. 禁用系统默认显卡驱动

    1
    2
    3
    4
    5
    6
    7
    8
    9
    sudo nano /etc/modprobe.d/blacklist.conf

    # add context in the end of file
    # for nvidia display device install
    blacklist vga16fb
    blacklist nouveau
    blacklist rivafb
    blacklist rivatv
    blacklist nvidiafb

    保存后,更新内核:

    1
    sudo update-initramfs -u

重启电脑sudo reboot,然后使用lsmod | grep nouveau,没有输出则表示禁用成功。

  1. 安装RTX 2080Ti显卡驱动
    卸载默认Nvidia驱动

    1
    sudo apt-get --purge remove nvidia-*

    如果本身是图形界面,则需要进入无图形模式

    1
    sudo telinit 3

    然后使用CTRL+ALT+F1键,进入tty1,输入账号密码进入。

    此时可能遇到中文不能显示问题,可先提前将.run文件放置根目录,避免中文路径

    官网查看下载2080Ti最新驱动.run文件,并添加运行权限:

    1
    sudo chmod  +x NVIDIA-Linux-x86_64-430.50.run

    然后执行安装

    1
    sudo ./NVIDIA-Linux-x86_64-430.50.run

    第一个预安装检查会报错,点击继续安装。

    驱动完成安装

如果遇到下面错误

1
2
>  WARNNING: Unable to find suitable destination to install 32-bit compatibility libraries
>

解决办法

1
2
3
>  sudo dpkg --add-architecture i386
> sudo apt update
>

sudo apt install libc6:i386

1
2
> 
>
  1. 安装NVIDIA Container Toolkit

    官网,前提即完成Nvidia的驱动安装,不需要安装CUDA。

    1
    2
    3
    4
    5
    6
    7
    # Add the package repositories
    $ distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
    $ curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
    $ 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-container-toolkit
    $ sudo systemctl restart docker

测试一下:

1
2
#### Test nvidia-smi with the latest official CUDA image
sudo docker run --gpus all nvidia/cuda:10.0-base nvidia-smi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Thu Oct 17 10:11:06 2019       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 430.50 Driver Version: 430.50 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 GeForce RTX 208... Off | 00000000:17:00.0 Off | N/A |
| 27% 36C P8 3W / 250W | 1MiB / 11019MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
| 1 GeForce RTX 208... Off | 00000000:18:00.0 Off | N/A |
| 27% 39C P8 1W / 250W | 1MiB / 11019MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
| 2 GeForce RTX 208... Off | 00000000:65:00.0 On | N/A |
| 29% 43C P8 21W / 250W | 559MiB / 11016MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
| 3 GeForce RTX 208... Off | 00000000:B3:00.0 Off | N/A |
| 27% 33C P8 3W / 250W | 1MiB / 11019MiB | 0% Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
+-----------------------------------------------------------------------------+

Use Docker for DL

创建数据卷

参考

需要区分下type的区别 (不使用此方法,卷会默认于docker目录而不是想要的目录)

1
2
3
4
docker volume create -d local \
--opt type=tmpfs \
--opt device=/home/chen/data/ \
chen_data

way2:

首先使用账户chen创建所需要挂载的目录(即保证目录的owner为chen, docker自行创建的为root)

然后直接使用 mount 参数进行挂载即可

运行image

使用deepo

1
2
3
4
5
6
7
8
9
docker run \
--name chenshuai \
--gpus all \
-it \
-d \
-p 8888:8888 \
--ipc=host \
--mount type=bind,source=/home/chen/docker_env,target=/env \
ufoym/deepo:all-jupyter-py36

gpus 表示使用所有GPU

it 表示ternimal

d 表示守护式启动

p 表示端口映射

– mount 添加挂载

查看所有container

1
docker container ls

进入container

1
docker exec -it <PID> bash

删除未运行container

1
docker container prune -f

install docker-compose

参考

使用pip安装

1
sudo pip install -U docker-compose

bash 补全命令

1
curl -L https://raw.githubusercontent.com/docker/compose/1.24.1/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose

install docker-registry

pass

pycharm remote connect docker(GPU)

首先运行docker并暴露22端口

1
2
3
4
5
6
7
8
9
10
docker run \
--name zhannan \
--gpus all \
-it \
-d \
-p 9188:8888 \
-p 9122:22 \
--ipc=host \
--mount type=bind,source=/home/zhang/docker_env,target=/env \
ufoym/deepo:all-jupyter-py36

进入容器后,开启root的远程SSH连接

1
apt update && apt install -y openssh-server && apt install -y nano

修改/etc/ssh/sshd_config文件,添加

1
PermitRootLogin yes

重启SSH服务

1
service ssh restart

设置root密码后,验证连接

1
2
3
4
# 容器内使用22端口
ssh root@127.0.0.1
# 容器外使用映射端口
ssh root@127.0.0.1 -p 9122

添加pycharm的远程连接

参考