最近在搞 tensorflow 的一些东西, 话说这东西是真的皮, 搞不懂但是环境还是磕磕碰碰的搭起来了
其实本来是没想到用 docker 的, 但是就一台配置较好的服务器, 还要运行公司的其他环境, vmware esxi 用起来太费劲, 还是算了
环境:
系统: CentOS7 7.4 1708
显卡: Nvidia 1080Ti
下载所有需要的东东
- docker-ce yum repo : https://download.docker.com/linux/centos/docker-ce.repo
- nvidia-docker yum repo : https://nvidia.github.io/nvidia-docker/centos7/x86_64/nvidia-docker.repo
- 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
- nvidia cudnn : https://developer.nvidia.com/cudnn
这个东西需要注册 nvidia 账号, 就不给直接下载地址了
5nvidia 驱动 : http://www.nvidia.cn/Download/index.aspx?lang=cn
按自己的显卡型号下载
6nvidia docker file : https://hub.docker.com/r/nvidia/cuda/
这里面可以看到很多 dockerfile, 选择
9.0-base-centos7 (9.0/base/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~
来源: https://www.cnblogs.com/yxfangcs/p/8438462.html