深度学习docker配置
docker安装
以下来自阿里云镜像站: Ubuntu 14.04/16.04(使用 apt-get 进行安装)
# step 1: 安装必要的一些系统工具
sudo apt-get update
sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
# step 2: 安装GPG证书
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
# Step 3: 写入软件源信息
sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
# Step 4: 更新并安装Docker-CE
sudo apt-get -y update
sudo apt-get -y install docker-ce
# 安装指定版本的Docker-CE:
# Step 1: 查找Docker-CE的版本:
# apt-cache madison docker-ce
# docker-ce | 17.03.1~ce-0~ubuntu-xenial | https://mirrors.aliyun.com/docker-ce/linux/ubuntu xenial/stable amd64 Packages
# docker-ce | 17.03.0~ce-0~ubuntu-xenial | https://mirrors.aliyun.com/docker-ce/linux/ubuntu xenial/stable amd64 Packages
# Step 2: 安装指定版本的Docker-CE: (VERSION例如上面的17.03.1~ce-0~ubuntu-xenial)
# sudo apt-get -y install docker-ce=[VERSION]
添加用户组,不需要再输入sudo
参考资料:docer docs: linux-postinstall
sudo groupadd docker
# 新建docker用户组
sudo usermod -aG docker $USER
# 把上面的 $user 替换为你的用户名
newgrp docker
# 更新用户组
docker run hello-world
# 测试一下
Note:
-
If testing on a virtual machine, it may be necessary to restart the virtual machine for changes to take effect.(如果是在虚拟机中,有必要重启虚拟机)
-
On a desktop Linux environment such as X Windows, log out of your session completely and then log back in.(在桌面Linux系统中,完全登出会话并重新登录)
-
如果不想重启系统还可以试试这个:
sudo systemctl restart docker
,来自stackoverflow: How to fix docker: Got permission denied issue
-
终极解决方案:
sudo reboot
搭建tensorflow-gpu docker环境
-
配置nvidia-docker
# $distribution是操作系统版本,如 ubuntu16.04 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 docker run --rm --gpus all nvidia/cuda:11.0-base nvidia-smi # 测试安装 docker pull tensorflow/tensorflow:1.15.4-gpu-py3 #拉取tensorflow1.15.4 gpu版
-
启动docker
docker run -it -p 8022:22 --ipc host --name docker_example --gpus all tensorflow/tensorflow:1.15.4-gpu-py3 /bin/bash
-i 表示 Allocate a pseudo-tty
-t 表示 Keep STDIN open even if not attached
-p 表示对端口号进行映射,即将 docker 容器的 22 号端口映射到宿主机的 8022 端口,这样设置的目的是方便后续使用 VSCode 连接容器,可以根据需要进行设置(如果要连接多个container,可以把8022改成别的端口)
-ipc host 的目的是为了增加主机与容器共享内存用的,如果这个参数报错,还可以采用--shm-size参数
--name docker_example 是将容器命名为 docker_example,docker 有长id、短id、name三个标识,如果不指定名称则会随机名称
--gpus all
是使用全部宿主机 GPU,这里的设置可以参考 nvidia-docker 的 Usage 具体设置使用哪个卡(深度学习要注意这里)
- -v /path:/path/in/container 这是将宿主机的/path目录与容器的/path/in/container目录挂载
- -v path:/path/in/container 这段语句的意思是在容器里挂载名为path的卷,它的存放位置是/path/in/container
tensorflow/tensorflow:1.15.4-gpu-py3 是指定使用的镜像版本,这里的版本可以在 docker-hub 查到
Note:这里要指定
--gpus all
否则无法调用GPU
参考资料:知乎: Docker+VSCode配置属于自己的炼丹炉 -
在docker中安装ssh并在外部使用ssh登录
mkdir /var/run/sshd echo 'root:passwd' | chpasswd # 这里使用你自己想设置的用户名和密码`(这里是passwd)`,但是一定要记住! sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd echo "export VISIBLE=now" >> /etc/profile service ssh restart
在宿主机上测试
sudo docker port [your_container_name] 22 # 如果前面的配置生效了,你会看到如下输出 # 0.0.0.0:8022
在本地上测试
ssh root@[your_host_ip] -p 8022
如果成功登录的话说明docker已经设置好了 -
由container导出image
docker commit -m="has update" -a="runoob" e218edb10161 runoob/ubuntu:v2
-m: 提交的描述信息
-a: 指定镜像作者
e218edb10161:容器 ID
(就是进入bash之后的root@a692e18a2e56中的a692e18a2e56)
runoob/ubuntu:v2: 指定要创建的目标镜像名
Ubuntu,pip,anaconda换源
-
Ubuntu
Aliyun开源镜像站: Ubuntu镜像
编辑/etc/apt/sources.list
deb http://mirrors.aliyun.com/ubuntu/ xenial main deb-src http://mirrors.aliyun.com/ubuntu/ xenial main deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main deb http://mirrors.aliyun.com/ubuntu/ xenial universe deb-src http://mirrors.aliyun.com/ubuntu/ xenial universe deb http://mirrors.aliyun.com/ubuntu/ xenial-updates universe deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates universe deb http://mirrors.aliyun.com/ubuntu/ xenial-security main deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main deb http://mirrors.aliyun.com/ubuntu/ xenial-security universe deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security universe
-
pip
#创建目录 mkdir -p ~/.pip #修改配置文件 vim ~/.pip/pip.conf #windows下是pip.ini #写入以下内容并保存 [global] index-url = https://mirrors.aliyun.com/pypi/simple/
-
anaconda
channels: - defaults show_channel_urls: true channel_alias: https://mirrors.bfsu.edu.cn/anaconda default_channels: - https://mirrors.bfsu.edu.cn/anaconda/pkgs/main - https://mirrors.bfsu.edu.cn/anaconda/pkgs/free - https://mirrors.bfsu.edu.cn/anaconda/pkgs/r - https://mirrors.bfsu.edu.cn/anaconda/pkgs/pro - https://mirrors.bfsu.edu.cn/anaconda/pkgs/msys2 custom_channels: conda-forge: https://mirrors.bfsu.edu.cn/anaconda/cloud msys2: https://mirrors.bfsu.edu.cn/anaconda/cloud bioconda: https://mirrors.bfsu.edu.cn/anaconda/cloud menpo: https://mirrors.bfsu.edu.cn/anaconda/cloud pytorch: https://mirrors.bfsu.edu.cn/anaconda/cloud simpleitk: https://mirrors.bfsu.edu.cn/anaconda/cloud
conda 导入导出环境
conda env export > py36.yaml #导出当前环境至py36.yaml conda env create -f py36.yaml #从py36.yaml导入