ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

深度学习环境安装-docker

2021-11-05 20:32:44  阅读:298  来源: 互联网

标签:sudo 深度 list apt sources nvidia docker 安装


前言

实验室里有多台服务器,因为采购时间的不同,每台服务器上的发行版本、CUDA版本是不同的。在之前的服务器上配置完成的OpenPose,想在新的服务器上也配置,按照当初的步骤,在make时由于cudnn版本太高识别不了,而cudnn和CUDA版本有个对应关系,但实验室其他人也需要使用服务器,不能因为我一个人将CUDA版本降下去。挣扎了几天,还是无法成功地配置好。忽然想起之前配过OpenPose的docker环境,由于X11没有配置,配置完OpenPose后就丢在一边了。这次拿过来用,把X11配置好,并对步骤做了总结,因此有了这篇博文。

环境说明

Ubuntu21.04。可用lsb_release -a查看版本信息

查看Linux系统版本信息的几种方法

nvidia-docker安装

可参照官方文档安装,但是Ubuntu21.04暂时没有支持,所以直接按照步骤的话会出现Unsupported distribution!错误,解决的办法可参考Ubuntu21.04无法安装nvidia-docker

下面展示步骤:

  1. curl https://get.docker.com | sh \
      && sudo systemctl --now enable docker
    
  2. 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
       
    # 注意:对于21.04,可能要用下面的方式
    distribution=$(. /etc/os-release;echo ${ID}21.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
    
  3. # 21.04需要该步骤
    sudo vim /etc/apt/sources.list.d/nvidia-docker.list
    # 添加下面内容
    deb https://nvidia.github.io/libnvidia-container/ubuntu18.04/amd64 /
    deb https://nvidia.github.io/nvidia-container-runtime/ubuntu18.04/amd64 /
    deb https://nvidia.github.io/nvidia-docker/ubuntu18.04/amd64 /
    
   
4. ```shell
   # 更新源
   sudo apt update
  1. # 安装nvidia-docker
    sudo apt install -y nvidia-docker2
    # 重启
    sudo service docker restart
    

配置docker权限给当前用户(可选)

现在安装完的docker需要sudo才能使用,通过将权限授予当前用户,可以不用sudo

  1. # 如果没有docker group,则先添加
    sudo groupadd docker 
    
  2. # 将当前用户加入docker group。然后退出并重新登录就生效
    sudo gpasswd -a ${USER} docker 
    
  3. # 重启docker服务
    sudo service docker restart
    

添加docker权限给当前用户,使docker命令免sudo

Ubuntu镜像配置

  1. # 拉取镜像
    docker pull nvidia/cuda:10.2-cudnn7-devel-ubuntu18.04
    # 可通过inspect查看镜像详细信息
    # docker inspect nvidia/cuda:10.2-cudnn7-devel-ubuntu18.04
    
  2. 编辑dockerfile

    FROM nvidia/cuda:10.2-cudnn7-devel-ubuntu18.04
    ENV APT_PATH /etc/apt
    # 更新阿里源
    RUN cp $APT_PATH/sources.list $APT_PATH/sources.list.bak
    RUN rm $APT_PATH/sources.list
    RUN echo "deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse" >> $APT_PATH/sources.list
    RUN echo "deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse" >> $APT_PATH/sources.list
    RUN echo "deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse" >> $APT_PATH/sources.list
    RUN echo "deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse" >> $APT_PATH/sources.list
    RUN echo "deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse" >> $APT_PATH/sources.list
    RUN echo "deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse" >> $APT_PATH/sources.list
    RUN echo "deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse" >> $APT_PATH/sources.list
    RUN echo "deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse" >> $APT_PATH/sources.list
    RUN echo "deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse" >> $APT_PATH/sources.list
    RUN echo "deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse" >> $APT_PATH/sources.list
    
    RUN apt update
    WORKDIR /root
    
  3. 构建镜像

    # -t指定构建出来的镜像tag
    docker build -t nvidia:1 -f /path/to/Dockerfile .
    

深度学习环境配置

  1. 启动镜像

    # -p映射端口,-v映射目录
    docker run --gpus all -it -p 10122:22 --name test \
    -v /media/exchange:/workspace \
    nvidia:1
    # 如果需要窗口(X11)显示,用下面的命令
    docker run --gpus all -it -p 10122:22 --name test \
    -v /tmp/.X11-unix/:/tmp/.X11-unix -e DISPLAY=${DISPLAY} \
    -v /media/exchange:/workspace \
    nvidia:1
    
  2. 配置Python

    # 安装基本库
    apt install gcc
    apt install -y --no-install-recommends make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev libffi-dev liblzma-dev python-openssl
    
    # 这里是用make来编译python的
    tar -zxv -f tar -zxv -f Python-3.6.7.tgz
    cd Python-3.6.7
    ./configure --prefix=/usr/local/python3.6.7
    make && make install
    
    # 更新软链接
    rm /usr/bin/python 
    ln -s /usr/local/python3.6.7/bin/python3.6 /usr/bin/python
    ln -s /usr/local/python3.6.7/bin/pip3 /usr/bin/pip
    
  3. 更换pip源到国内镜像

    mkdir ~/.pip
    vim ~/.pip/pip.conf
    
    # 复制以下内容
    [global]
    index-url = https://pypi.tuna.tsinghua.edu.cn/simple
    
    # 升级pip
    pip install --upgrade pip
    
  4. 安装pytorch等其他需要用的深度学习库

创建和宿主机用户相同的用户(可选)

  1. 查看宿主机用户id

    id -u # 1002
    
  2. 容器中添加用户

    # 添加指定gid的组
    groupadd -g 1002 skb
    # 添加指定uid的用户,并加入到指定组
    useradd -u 1002 -g skb -d /home/skb -m skb
    
  3. 更改bash

    # 创建完用户后,不能自动补全或使用基本的shell命令的,则进行以下操作
    vim /etc/passwd 
    # 将skb默认的shell从/bin/sh改为/bin/bash即可
    
  4. 更改skb用户的密码,顺便把root的密码也一并改了

    passwd skb # 更改skb用户密码
    passwd # 更改root密码,慎重
    

理解 docker 容器中的 uid 和 gid

配置ssh登录

apt install -y --no-install-recommends openssh-server

# 修改配置
vim /etc/ssh/sshd_config
# 修改参数
PubkeyAuthentication yes # 启用公钥私钥配对认证方式

# 启动sshd服务
service ssh restart

# 在宿主机上,测试ssh
ssh skb@127.0.0.1 -p 10122

配置X11显示(可选)

# 配置xorg
apt install xorg

vim /etc/ssh/sshd_config
# 修改下面两个参数
X11Forwarding yes
X11UseLocalhost no

# 重启ssh服务
service ssh restart

镜像备份(导入导出)

# 提交镜像,容器id,通过docker ps -a查看
docker commit -m="pytorch" -a="skb" 容器id 标签
docker commit -m="pytorch" -a="skb" 9881af7244f8 pytorch:1.7
# 导出镜像
docker save -o pytorch.tar pytorch:1.7
# 导入镜像
docker load -i pytorch.tar

其他问题补充

apt install

出现问题,比如Unable to locate package libssl-dev

解决:apt update

容器随宿主机启动而启动

docker update --restart=always 容器id

退出后容器处于exit状态

在容器内部可通过Crtl+P+Q退出,此时容器不会处于exit状态

如果配置了容器随宿主机启动而启动,则用exit退出容器后,容器立刻重启

标签:sudo,深度,list,apt,sources,nvidia,docker,安装
来源: https://www.cnblogs.com/sjmuvx/p/15515095.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有