CentOS7 Nvidia Docker環境

最近在搞tensorflow的一些東西,話說這東西是真的皮,搞不懂。可是環境仍是磕磕碰碰的搭起來了python

其實原本是沒想到用docker的,可是就一臺配置較好的服務器,還要運行公司的其餘環境,vmware esxi用起來太費勁,仍是算了。linux

 

環境:c++

系統:CentOS7 7.4 1708git

顯卡:Nvidia 1080Tigithub

 

下載全部須要的東東docker

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

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

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

四、nvidia cudnn : https://developer.nvidia.com/cudnn 服務器

這個東西須要註冊nvidia帳號,就不給直接下載地址了。

五、nvidia驅動 : http://www.nvidia.cn/Download/index.aspx?lang=cn 

按本身的顯卡型號下載

六、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~。

相關文章
相關標籤/搜索