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 <[email protected]>"

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"

 

所有的文件

[[email protected] nvidia]# pwd
/root/nvidia
[[email protected] 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文件

准备工作

直接上命令,一看就明白

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

[[email protected] nvidia]# yum install kernel*

安装驱动 

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

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

安装和启动docker

[[email protected] nvidia]# yum install docker-ce nvidia-docker
[[email protected] nvidia]# systemctl enable docker
[[email protected] nvidia]# systemctl start docker
[[email protected] nvidia]# systemctl enable nvidia-docker
[[email protected] nvidia]# systemctl start nvidia-docker

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

制作docker镜像

[[email protected] nvidia]# yum install cuda-cudart-9-0-9.0.176-1
[[email protected] nvidia]# ln -s cuda-9.0 /usr/local/cuda
[[email protected] 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 查看一下:

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

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

生成docker

[[email protected] centos-gpu]# nvidia-docker run --name="centos-gpu2" -ti a02c /bin/bash
[[email protected] /]# 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                                                 |
+-----------------------------------------------------------------------------+
[[email protected] /]# exit

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

使用Docker

[[email protected] 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
[[email protected] centos-gpu]# nvidia-docker start 34d5
34d5
[[email protected] centos-gpu]# nvidia-docker cp /root/nvidia/cuda-repo-rhel7-9.1.85-1.x86_64.rpm 34d532e76913:/root
[[email protected] centos-gpu]# nvidia-docker exec -ti 34d5 /bin/bash
[[email protected] /]# cd
[[email protected] ~]# ls
anaconda-ks.cfg  cuda-repo-rhel7-9.1.85-1.x86_64.rpm
[[email protected] ~]# 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%]
[[email protected] ~]# 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~。

原文地址:https://www.cnblogs.com/yxfangcs/p/8438462.html

时间: 2024-10-11 22:43:01

CentOS7 Nvidia Docker环境的相关文章

centos7 搭建 docker 环境

1. 安装centos7  http://isoredirect.centos.org/centos/7/isos/x86_64/ 下载 everything 版本,最小化版本可能缺失很多东西 我是在esx 环境上安装的系统,安装完成后启动没有获取到ip地址 修改下面的文件 /etc/sysconfig/network-scripts/ifcfg-ens192 重启系统或者 service network restart yum -y install net-tools  就可以使用ifconf

centos7搭建docker环境。

1.准备工作,(要是yum源有问题更新yum源.)mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup替换阿里云镜像源wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo或者使用网易镜像源(推荐用这个, 最近阿里镜像源抽了, 经常无法访问)wget -O /etc/yum.re

centos7 安装 NVIDIA Docker

安装环境: 1.centos7.3 2.NVIDIA Corporation GP106 [GeForce GTX 1060 6GB] 安装nvidia-docker a.安装docker 可参考centos7 安装docker b: # Install nvidia-docker and nvidia-docker-plugin wget -P /tmp https://github.com/NVIDIA/nvidia-docker/releases/download/v1.0.1/nvidi

centos7安装docker并配置php运行环境

原文:centos7安装docker并配置php运行环境 一.安装docker 首先我们先来了解一下什么是docker. docker是一个虚拟化的技术,基于 Linux 内核,是将进程进行封装隔离,由于隔离的进程独立于宿主机和其它的隔离的进程,因此也可以称为容器.很多人把docker理解为虚拟机,其实不是的,因为它不需要进行硬件虚拟以及运行完整操作系统等额外开销的,docker的出现也是为了解决在各种复杂的环境下不需要做任何的修改还可以保证程序正常稳定的运行,也就是环境一致性的问题,当然还有k

centos7下通过yum方式安装docker环境

1.移除旧版本: yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-selinux docker-engine-selinux docker-engine rm -rf /etc/systemd/system/docker.service.d rm -rf /var/lib/docker r

centos7主要特性 ---docker安装测试

红帽日前正式发布了企业版Linux 7,满足企业当前对数据中心的需求和对下一代的云服务.Containers.大数据的需求,为用户提供军用级安全以及稳定.易用.高效的管理.社区发行版CentOS 7也已经发布出来了,抢先体验docker1.0. rpm -Uvh http://dl.Fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm 安装docker      yum install docker-io 启动服务    

centos7 搭建docker内运行单实例rabbitmq的教程

1.安装centos7.x,配置好网络2.因为docker需要比较高版本的内核,比如使用overlayfs作为默认docker文件系统要3.18,所以先升级内核到3.18以上版本,能直接过4是最佳了检查内核uname -r 不够3.18.x的话 升级内核导入key rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.orgrpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elr

centos7之docker安装

下午四点左右,我准备接触docker这个技术.之所以接触它,原因来自tomcat服务器老是挂,也不能说老是挂,一周一次吧,或者不定时,最初出现的问题,分为这么几类? 一类,java代码的问题,某个类导致线程阻塞导致内存泄露,使tomcat突然宕机和某个类找不到异常导致宕机; 二类,java运行环境内存不足,通过调tomcat内存解决该问题,不过这并不能解决这个问题,当然tomcat初始内存的确小,需求适当的调大,但是前提必须符合服务器的配置和内存; 三类,tomcat连接池和线程池的缘故,需要t

.netcore mvc docker环境jenkins一键部署(DevOps)

[前言] DevOps方面的文章很早之前就想分享了,挤出一点时间把前段时间搭建的一些提高开发效率的东西给大家分享一下吧. 本文介绍了一个.netcore mvc web项目,从项目push到github开始 自动从github上拉取代码 编译,生成,发布 停止docker容器,删除docker镜像 通过项目的dockerfile新建docker镜像 Run容器,自动绑定ip,站点启动 整个过程只需要在jenkins这个自动化工具上点一个按钮.下面我们按顺序来简单介绍一下. 使用的内容都很基础,重