zoukankan      html  css  js  c++  java
  • CentOS7 Nvidia Docker环境

    最近在搞tensorflow的一些东西,话说这东西是真的皮,搞不懂。但是环境还是磕磕碰碰的搭起来了

    其实本来是没想到用docker的,但是就一台配置较好的服务器,还要运行公司的其他环境,vmware esxi用起来太费劲,还是算了。

    环境:

    系统:CentOS7 7.4 1708

    显卡:Nvidia 1080Ti

    下载所有需要的东东

    1、docker-ce yum repo : https://download.docker.com/linux/centos/docker-ce.repo

    2、nvidia-docker yum repo : https://nvidia.github.io/nvidia-docker/centos7/x86_64/nvidia-docker.repo

    3、nvidia cuda yum repo : http://developer.download.nvidia.com/compute/cuda/repos/rhel7/x86_64/cuda-repo-rhel7-9.1.85-1.x86_64.rpm

    4、nvidia cudnn : https://developer.nvidia.com/cudnn 

    这个东西需要注册nvidia账号,就不给直接下载地址了。

    5、nvidia驱动 : http://www.nvidia.cn/Download/index.aspx?lang=cn 

    按自己的显卡型号下载

    6、nvidia docker file : https://hub.docker.com/r/nvidia/cuda/

    这里面可以看到很多dockerfile,选择

    其他的cuda9.1这些应该也可以用,另外有像devel和runtime这样的,其实就是yum安装的cuda包不太一样,没多大关系。

    点进去后复制下来保存为Dockerfile文件,但是之后搞的时候发现有点问题,修改了一下,可以从这儿复制

    FROM centos:7
    LABEL maintainer "NVIDIA CORPORATION <cudatools@nvidia.com>"
    
    RUN NVIDIA_GPGKEY_SUM=d1be581509378368edeec8c1eb2958702feedf3bc3d17011adbf24efacce4ab5 && 
        curl -fsSL https://developer.download.nvidia.com/compute/cuda/repos/rhel7/x86_64/7fa2af80.pub | sed '/^Version/d' > /etc/pki/rpm-gpg/RPM-GPG-KEY-NVIDIA && 
        echo "$NVIDIA_GPGKEY_SUM  /etc/pki/rpm-gpg/RPM-GPG-KEY-NVIDIA" | sha256sum -c --strict -
    
    #COPY cuda.repo /etc/yum.repos.d/cuda.repo
    
    ENV CUDA_VERSION 9.0.176
    
    ENV CUDA_PKG_VERSION 9-0-$CUDA_VERSION-1
    #RUN yum install -y 
    #        cuda-cudart-$CUDA_PKG_VERSION && 
    #    ln -s cuda-9.0 /usr/local/cuda && 
    #    rm -rf /var/cache/yum/*
    
    # nvidia-docker 1.0
    LABEL com.nvidia.volumes.needed="nvidia_driver"
    LABEL com.nvidia.cuda.version="${CUDA_VERSION}"
    
    RUN echo "/usr/local/nvidia/lib" >> /etc/ld.so.conf.d/nvidia.conf && 
        echo "/usr/local/nvidia/lib64" >> /etc/ld.so.conf.d/nvidia.conf
    
    ENV PATH /usr/local/nvidia/bin:/usr/local/cuda/bin:${PATH}
    ENV LD_LIBRARY_PATH /usr/local/nvidia/lib:/usr/local/nvidia/lib64
    
    # nvidia-container-runtime
    ENV NVIDIA_VISIBLE_DEVICES all
    ENV NVIDIA_DRIVER_CAPABILITIES compute,utility
    ENV NVIDIA_REQUIRE_CUDA "cuda>=9.0"
    

     

    所有的文件

    [root@localhost nvidia]# pwd
    /root/nvidia
    [root@localhost nvidia]# ll
    total 420000
    drwxr-xr-x. 2 root root      4096 Feb 10 10:50 centos-gpu
    -rw-r--r--. 1 root root      3335 Jan 29 10:36 cuda-repo-rhel7-9.1.85-1.x86_64.rpm
    -rw-r--r--. 1 root root 348817823 Feb  6 16:26 cudnn-9.0-linux-x64-v7.tgz
    -rw-r--r--. 1 root root      2424 Feb  9 10:36 docker-ce.repo
    -rw-r--r--. 1 root root       796 Feb  9 17:11 nvidia-docker.repo
    -rwxr-xr-x. 1 root root  81242220 Jan 31 14:19 NVIDIA-Linux-x86_64-390.25.run

     centos-gpu里有Dockerfile文件

    准备工作

    直接上命令,一看就明白

    [root@localhost nvidia]# cp docker-ce.repo nvidia-docker.repo /etc/yum.repos.d/
    [root@localhost nvidia]# rpm -ivh cuda-repo-rhel7-9.1.85-1.x86_64.rpm
    [root@localhost nvidia]# yum install epel-release
    [root@localhost nvidia]# yum install gcc gcc-c++

    [root@localhost nvidia]# yum install kernel*

    安装驱动 

    [root@localhost nvidia]# echo "blacklist nouveau" >>/etc/modprobe.d/blacklist.conf
    [root@localhost nvidia]# mv /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r).img.bak dracut -v /boot/initramfs-$(uname -r).img $(uname -r) 
    [root@localhost nvidia]# init 3 
    [root@localhost nvidia]# chmod +x NVIDIA-Linux-x86_64-390.25.run 
    [root@localhost nvidia]# ./NVIDIA-Linux-x86_64-390.25.run

    大概步骤就是这样,如果出现问题,可以直接网上找一找,应该不会太难

    安装和启动docker

    [root@localhost nvidia]# yum install docker-ce nvidia-docker
    [root@localhost nvidia]# systemctl enable docker
    [root@localhost nvidia]# systemctl start docker
    [root@localhost nvidia]# systemctl enable nvidia-docker
    [root@localhost nvidia]# systemctl start nvidia-docker

    记得显卡驱动一定要先装好,nvidia-docker才能正常启动

    制作docker镜像

    [root@localhost nvidia]# yum install cuda-cudart-9-0-9.0.176-1
    [root@localhost nvidia]# ln -s cuda-9.0 /usr/local/cuda
    [root@localhost nvidia]# nvidia-docker build -t centos-nvidia /root/nvidia/centos-gpu

    如果你是用的我修改的Dockfile应该不会有什么问题,如果你是用的原版的,可能会在

    #COPY cuda.repo /etc/yum.repos.d/cuda.repo

    出错,但是咱们已经下载cuda 的 repo,并安装了,所以这一步可以不用。

    镜像制作结束后,可以用命令 docker images 查看一下:

    [root@localhost centos-gpu]# docker images
    REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
    centos-nvidia           latest              a02c8e0ad5ca        2 hours ago         207MB

    如果有这一行应该就算是成功了。

    生成docker

    [root@localhost centos-gpu]# nvidia-docker run --name="centos-gpu2" -ti a02c /bin/bash
    [root@34d532e76913 /]# nvidia-smi 
    Sat Feb 10 03:42:20 2018       
    +-----------------------------------------------------------------------------+
    | NVIDIA-SMI 390.25                 Driver Version: 390.25                    |
    |-------------------------------+----------------------+----------------------+
    | GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
    | Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
    |===============================+======================+======================|
    |   0  GeForce GTX 108...  Off  | 00000000:02:00.0 Off |                  N/A |
    | 23%   17C    P8     8W / 250W |     10MiB / 11178MiB |      0%      Default |
    +-------------------------------+----------------------+----------------------+
                                                                                   
    +-----------------------------------------------------------------------------+
    | Processes:                                                       GPU Memory |
    |  GPU       PID   Type   Process name                             Usage      |
    |=============================================================================|
    |  No running processes found                                                 |
    +-----------------------------------------------------------------------------+
    [root@34d532e76913 /]# exit

    如果类似于上面的输出结果,差不多就可以了。

    使用Docker

    [root@localhost centos-gpu]# nvidia-docker ps -a
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
    34d532e76913        a02c                "/bin/bash"         3 minutes ago       Exited (0) 12 seconds ago                       centos-gpu2
    d16c2db2bf2e        a02c                "/bin/bash"         2 hours ago         Exited (0) 19 minutes ago                       centos-gpu
    370671db8df1        3afd                "/bin/bash"         19 hours ago        Exited (137) 3 hours ago                        centos-dronemap
    [root@localhost centos-gpu]# nvidia-docker start 34d5
    34d5
    [root@localhost centos-gpu]# nvidia-docker cp /root/nvidia/cuda-repo-rhel7-9.1.85-1.x86_64.rpm 34d532e76913:/root
    [root@localhost centos-gpu]# nvidia-docker exec -ti 34d5 /bin/bash
    [root@34d532e76913 /]# cd
    [root@34d532e76913 ~]# ls
    anaconda-ks.cfg  cuda-repo-rhel7-9.1.85-1.x86_64.rpm
    [root@34d532e76913 ~]# rpm -ivh cuda-repo-rhel7-9.1.85-1.x86_64.rpm 
    warning: cuda-repo-rhel7-9.1.85-1.x86_64.rpm: Header V3 RSA/SHA512 Signature, key ID 7fa2af80: NOKEY
    Preparing...                          ################################# [100%]
    Updating / installing...
       1:cuda-repo-rhel7-9.1.85-1         ################################# [100%]
    [root@34d532e76913 ~]# yum install cuda-*9-0*

    这里需要注意的是类似于 34d532e76913 这样的编号,是docker自动生成的,运行的时候需要修改一下。

    到目前基本上cuda的环境就搭建好了。

    TensorFlow

    把下载的cudnn包用docker cp复制到docker中,解压下来,将里面的lib64路径添加到 /etc/ld.so.conf.d/nvidia.conf 中,运行ldconfig,就ok了。

    上面的环境好了以后,再安装python等等软件,这就不说了。之后tensorflow的一些例子就可以在docker里运行了。当然你得安装gpu版本的,才能发挥显卡的威力。

    另外也可以不必要这么麻烦,有已经制作好的镜像可以拿来用,可以参考:https://hub.docker.com/r/tensorflow/tensorflow/ 

    其他

    另外也有现成的cuda镜像可以用,参考:https://hub.docker.com/r/nvidia/cuda/   

    直接使用命令:docker pull nvidia/cuda 就可以下载镜像了,只不过这是ubuntu版本的,和我们的生成环境不符,如果要其他版本的可以参考上面的例子。

    如果文中有不对之处,欢迎指正。

    最后

    这一段时间没有写什么东西,另外之前的关于图形绘图的东西,一直没扔,已经有很多东西可以和大家分享了,只不过时间很少,还没来得及整理。等有空了就能听着音乐在屏幕前磨洋工了,KeKe~。

  • 相关阅读:
    android入门教程(十六)之 使用Intent传递数据
    Android入门教程(十八)之ListView (二) (转)
    Android入门教程(十四)之ListView的应用 (转)
    Android入门教程(十七)之GridView(转自http://blog.csdn.net/hellogv/)
    (原创)Android入门教程(十五)之 Activity生命周期及其配置使用
    Android入门教程(十九)之ListView (三) (转)
    Android入门教程(十三)之自定义下拉菜单模式Spinner与setDropDownViewResource的应用(转)
    Android入门教程(十)之Menu功能菜单设计 (转)
    [vp]ARC059
    欧拉路学习笔记
  • 原文地址:https://www.cnblogs.com/yxfangcs/p/8438462.html
Copyright © 2011-2022 走看看