深度學習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匯入