1. 程式人生 > 實用技巧 >深度學習docker配置

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

  1. If testing on a virtual machine, it may be necessary to restart the virtual machine for changes to take effect.(如果是在虛擬機器中,有必要重啟虛擬機器)

  2. On a desktop Linux environment such as X Windows, log out of your session completely and then log back in.(在桌面Linux系統中,完全登出會話並重新登入)

  3. 如果不想重啟系統還可以試試這個: sudo systemctl restart docker,來自stackoverflow: How to fix docker: Got permission denied issue

  4. 終極解決方案:sudo reboot

搭建tensorflow-gpu docker環境

  1. 配置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版
    
  2. 啟動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 具體設定使用哪個卡(深度學習要注意這裡)

    1. -v /path:/path/in/container 這是將宿主機的/path目錄與容器的/path/in/container目錄掛載
    2. -v path:/path/in/container 這段語句的意思是在容器裡掛載名為path的卷,它的存放位置是/path/in/container

    tensorflow/tensorflow:1.15.4-gpu-py3 是指定使用的映象版本,這裡的版本可以在 docker-hub 查到

    Note:這裡要指定--gpus all否則無法呼叫GPU
    參考資料:知乎: Docker+VSCode配置屬於自己的煉丹爐

  3. 在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已經設定好了

  4. 由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換源

  1. 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
    
  2. pip

    #建立目錄
    mkdir -p ~/.pip
    #修改配置檔案
    vim  ~/.pip/pip.conf #windows下是pip.ini
    #寫入以下內容並儲存
    [global]
    index-url = https://mirrors.aliyun.com/pypi/simple/
    
  3. 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匯入