• [笔记] 基于nvidia/cuda的深度学习基础镜像构建流程


    基于NVidia开源的nvidia/cuda image,构建适用于DeepLearning的基础image。
    思路就是先把常用的东西都塞进去,再装某个框架就省事儿了。
    为了体验重装系统的乐趣,所以采用慢慢来比较快的步骤,而不是通过Dockerfile来build。

    环境信息

    已经安装了Docker CEnvidia-docker2

    Host OS: Ubuntu 18.04 64 bit
    CUDA: 10.0
    cuDNN: 7.4
    Docker CE: 18.09.1
    nvidia-docker2: 2.0.3

    镜像信息

    拉取镜像nvidia/cuda

    $ sudo docker pull nvidia/cuda
    

    目前拉取到的镜像nvidia/cuda信息如下:

    OS: Ubuntu 18.04.1 LTS
    CUDA: 10.0
    Size: 2.24GB

    启动镜像

    创建目录base,方便数据导入导出,映射为容器内的/host目录,然后在这个目录下运行命令创建容器dl-base

    $ sudo nvidia-docker run -it --name dl-base -v `pwd`:/host nvidia/cuda
    

    一切顺利的话,出现类似下面的命令行:

    root@a336efb2d5b0:/host#
    

    可以运行nvidia-smi验证容器内的CUDA环境正常。

    替换阿里源

    大陆的网络环境下,阿里源速度还不错。
    将下面的内容存为base目录下的sources.list文件。

    deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted
    deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted
    deb http://mirrors.aliyun.com/ubuntu/ bionic universe
    deb http://mirrors.aliyun.com/ubuntu/ bionic-updates universe
    deb http://mirrors.aliyun.com/ubuntu/ bionic multiverse
    deb http://mirrors.aliyun.com/ubuntu/ bionic-updates multiverse
    deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
    deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted
    deb http://mirrors.aliyun.com/ubuntu/ bionic-security universe
    deb http://mirrors.aliyun.com/ubuntu/ bionic-security multiverse
    

    在容器命令行下运行命令更新源。

    $ cp /host/sources.list /etc/apt/sources.list
    $ apt update
    

    安装基本工具

    $ apt install -y vim curl git iputils-ping net-tools telnet tmux unzip
    

    创建工作及下载目录

    $ mkdir -p /work/download
    

    修改~/.bashrc

    在文件尾部添加下面内容:

    alias u='cd ..'
    alias ins='apt install -y'
    alias ta='tmux a -t'
    
    export PATH=/usr/local/cuda-10.0/bin:$PATH
    export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
    export LD_LIBRARY_PATH="/usr/local/lib:/usr/local/cuda-10.0/lib64:/home/etworker/anaconda3/lib:$LD_LIBRARY_PATH"
    export CUDNN_PATH="/usr/local/cuda-10.0/lib64/libcudnn.so"
    

    再使其生效:

    $ source ~/.bashrc
    

    安装cnDNN

    Host下虽然已经安装了cnDNN环境,但是容器内没法使用,所以需要再搞一把。
    先将cnDNN的压缩包解压到base目录,此处为cudnn-10.0-linux-x64-v7.4.2.24目录,在容器命令行下运行:

    $ cp /host/cudnn-10.0-linux-x64-v7.4.2.24/cuda/include/cudnn.h /usr/local/cuda-10.0/include
    $ cp /host/cudnn-10.0-linux-x64-v7.4.2.24/cuda/lib64/libcudnn* /usr/local/cuda-10.0/lib64
    $ chmod a+r /usr/local/cuda-10.0/include/cudnn.h /usr/local/cuda-10.0/lib64/libcudnn*
    

    然后验证一下,不报错就OK了。

    $ echo -e '#include"cudnn.h"
     void main(){}' | nvcc -x c - -o /dev/null -lcudnn
    

    安装openssh-server

    $ apt install -y openssh-server
    

    修改/etc/ssh/sshd_config,找到#PermitRootLogin开头的这一行,修改为PermitRootLogin yes,这样就可以通过root登录了。
    然后修改密码:

    $ passwd
    

    两次输入密码,然后重启ssh:

    $ /etc/init.d/ssh restart 
    

    出现下面内容就OK了。

     * Restarting OpenBSD Secure Shell server sshd [ OK ]
    

    这里为了简单粗暴,采用了root来登陆。
    如果考虑安全,可自行创建用户,并对ssh进行配置。

    安装python常用组件

    Ubuntu 18.04的容器,默认安装了python 3.6.7,此时还需安装pip:

    $ apt install -y python3-pip
    

    建议不要更新pip,否则容易出现问题。

    创建pip的配置文件目录~/.pip,再创建文件~/.pip/pip.conf,内容如下:

    [global]
    trusted-host=mirrors.aliyun.com
    index-url=https://mirrors.aliyun.com/pypi/simple/
    

    安装常用的包:

    $ pip3 install numpy matplotlib Pillow scipy jupyter pandas h5py easydict sklearn
    

    安装opencv-python

    $ apt install -y libsm6 libxext6 libfontconfig1 libxrender1
    $ pip3 install opencv-python
    

    此时安装的opencv版本是4.0.0。

    保存镜像

    至此,就可以在Host下运行命令将容器保存为镜像了。

    $ sudo nvidia-docker commit dl-base dl/base
    

    这样就生成了一个镜像dl/base,大小为4.36GB。

    在此镜像基础上,可以自行安装不同的框架。

    jupyter notebook

    如果希望在容器中启动jupyter notebook,需要加上参数如下:

    $ jupyter notebook --ip=0.0.0.0 --allow-root
    
  • 相关阅读:
    Sharepoint COMException 0x81020037
    [SharePoint]如何去掉欢迎导航的信息?
    配置两台Azure服务器,一台加入另一台的ad域加入不进去的问题
    在Azure上部署Sqlserver网络访问不了的问题
    Page 由于代码已经过优化或者本机框架位于调用堆栈之上
    ProjectOnline同步数据到线下
    关于ProjectServer定制化项目中心页面
    oracle数据库逐步学习总结【基础二】
    Java学习个人总结
    oracle数据库逐步学习总结【基础一】
  • 原文地址:https://www.cnblogs.com/journeyonmyway/p/10327367.html
Copyright © 2020-2023  润新知