• 安装使用NVIDIA-Docker-- 可使用GPU的Docker容器


    nvidia-docker是一个可以使用GPUdockernvidia-docker是在docker上做了一层封装,通过nvidia-docker-plugin,然后调用到docker上,其最终实现的还是在docker的启动命令上携带一些必要的参数。因此在安装nvidia-docker之前,还是需要安装docker的。

    docker一般都是使用基于CPU的应用,而如果是GPU的话,就需要安装特有的硬件环境,比如需要安装nvidia driver。所以docker容器并不直接支持Nvidia GPU。为了解决这个问题,最早的处理办法是在容器内部,全部重新安装nvidia driver,然后通过设置相应的设备参数来启动container,然而这种办法是很脆弱的。因为宿主机的driver的版本必须完全匹配容器内的driver版本,这样导致docker image无法共享,很可能本地机器的不一致导致每台机器都需要去重复操作,这很大的违背了docker的设计之初。

    为了使docker image能很便利的使用Nvidia GPU,从而产生了nvidia-docker,由它来制作nvidia driverimage,这就要求在目标机器上启动container时,确保字符设备以及驱动文件已经被挂载。

    nvidia-docker-plugin是一个docker plugin,被用来帮助我们轻松部署containerGPU混合的环境下。类似一个守护进程,发现宿主机驱动文件以及GPU 设备,并且将这些挂载到来自docker守护进程的请求中。以此来支持docker GPU的使用。

    需提前安装好的软件

    docker

    由于nvidia docker是基于docker基础之上运行的,因此需要安装原生的docker。

    1.12.6版本的docker安装可查看这篇文章:Docker安装使用命令。http://www.linuxidc.com/Linux/2017-12/149575.htm

    Docker CE版本可查看这篇文章:Docker CE安装教程。http://www.linuxidc.com/Linux/2017-12/149576.htm

    nvidia显卡驱动

    毫无疑问,要想使用GPU,必须要安装显卡驱动,这样nvidia docker才能正常运行。

    显卡驱动的安装方式可查看这篇文章: CentOS集成GTX-1080Ti显卡搭建深度学习环境全过程。http://www.linuxidc.com/Linux/2017-12/149577.htm

    这篇文章中讲解了CentOS安装显卡搭建深度学习环境的全过程,显卡驱动就是其中一项工作,因此这里就不单独写了,这篇文章中有安装的过程。

    安装nvidia docker

    1、下载nvidia-docker.repo文件,并将该文件输出到/etc/yum.repos.d/nvidia-docker.repo

    curl -s -L https://nvidia.github.io/nvidia-docker/centos7/x86_64/nvidia-docker.repo | sudo tee /etc/yum.repos.d/nvidia-docker.repo  

    操作结果:

    这里写图片描述

    2、查找可安装的nvidia docker版本

    yum search --showduplicates nvidia-docker

    运行上面的语句,会出现下面这张图中的信息,一路点击y

    这里写图片描述

    最终输出结果是下面这张图:

    这里写图片描述

    大家可以从中选择自己需要安装的nvidia docker版本,这里我安装的是docker1.12.6版本的。因此我选择安装倒数第一个版本的nvidia docker

    3、安装nvidia-docker

    yum install nvidia-docker-1.0.1-1.x86_64

    点击回车,系统就会安装nvidia-docker,需要选yes o的地方输入y,再点击回车,最终安装成功。

    运行nvidia docker

    1、运行docker

    // 运行docker
    systemctl start docker
    // 加入开机启动
    systemctl enable docker
    // 查看状态
    systemctl status coker

    2、运行nvidia-docker

    systemctl start nvidia-docker
    systemctl enable nvidia-docker
    systemctl status nvidia-docker

    nvidia-docker的操作命令与docker基本相同,所以操作起来没有什么障碍。

    kubernetes调用GPU

    yaml文件配置:

    apiVersion: v1
    kind: Pod
    metadata:
      name: gpu-test
    spec:
      volumes:
      - name: nvidia-driver
        hostPath:
          path: /var/lib/nvidia-docker/volumes/nvidia_driver/384.69
      - name: cgroup
        hostPath:
          path: /sys/fs/cgroup
      containers:
      - name: tensorflow
        image: tensorflow:0.11.0-gpu
        ports:
        - containerPort: 8000
        resources:
          limits:
            alpha.kubernetes.io/nvidia-gpu: 1
        volumeMounts:
        - name: nvidia-driver
          mountPath: /usr/local/nvidia/
          readOnly: true
        - name: cgroup
          mountPath: /sys/fs/cgroup
    1. alpha.kubernetes.io/nvidia-gpu: 1:表示只使用1块gpu

    2. path: /var/lib/nvidia-docker/volumes/nvidia_driver/384.69:宿主机driver位置,安装了nvidia-docker之后有的,当然需要保证宿主机nvidia driver是已经安装ok的,应该是安装了nvidia-docker之后,会发现宿主机的driver,然后映射到此。

    3. path: /sys/fs/cgroup:挂载该目录也是为了识别显卡,使容器内部能够使用宿主机显卡。

    4. volumeMounts:将宿主机目录挂载到容器内部,这个标签下的配置项就是要把宿主机目录挂载到容器内部的那个目录,通过name标识。

    通过这些目录挂载配置,启动pod之后,容器就能够正常识别GPU并进行工作了。

    更多Docker相关教程见以下内容: 

    Docker安装应用(CentOS 6.5_x64) http://www.linuxidc.com/Linux/2014-07/104595.htm 

    Ubuntu 16.04 服务器上配置使用 Docker  http://www.linuxidc.com/Linux/2017-06/145176.htm 

    Ubuntu 15.04下安装Docker  http://www.linuxidc.com/Linux/2015-07/120444.htm 

    Docker 安装实例 http://www.linuxidc.com/Linux/2017-04/142666.htm 

    Docker 创建基础镜像  http://www.linuxidc.com/Linux/2017-05/144112.htm 

    在 Ubuntu 15.04 上如何安装Docker及基本用法 http://www.linuxidc.com/Linux/2015-09/122885.htm 

    Ubuntu 16.04上Docker使用手记 http://www.linuxidc.com/Linux/2016-12/138490.htm 

    使用Docker分分钟启动常用应用  http://www.linuxidc.com/Linux/2017-04/142649.htm 

    Ubuntu 16.04下Docker修改配置文件不生效解决办法  http://www.linuxidc.com/Linux/2017-05/143862.htm 

    Docker 的详细介绍请点这里
    Docker 的下载地址请点这里

    本文永久更新链接地址http://www.linuxidc.com/Linux/2017-12/149578.htm

  • 相关阅读:
    slice()、substring()、substr()的区别用法
    程序员如何快速上手一个自己不太熟悉的新项目?有什么技巧?
    计算重复字符串长度
    计算机视觉算法研发岗招聘要求
    C++进阶STL-2
    C++进阶STL-1
    拼硬币
    序列找数
    寻找合法字符串
    字符串是否由子串拼接
  • 原文地址:https://www.cnblogs.com/wuchangsoft/p/9767074.html
Copyright © 2020-2023  润新知