CentOS7 Nvidia Docker環(huán)境搭建
最近在搞tensorflow的一些東西,話說(shuō)這東西是真的皮,搞不懂。但是環(huán)境還是磕磕碰碰的搭起來(lái)了
其實(shí)本來(lái)是沒(méi)想到用docker的,但是就一臺(tái)配置較好的服務(wù)器,還要運(yùn)行公司的其他環(huán)境,vmware esxi用起來(lái)太費(fèi)勁,還是算了。
環(huán)境:
系統(tǒng):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
這個(gè)東西需要注冊(cè)nvidia賬號(hào),就不給直接下載地址了。
5、nvidia驅(qū)動(dòng) : http://www.nvidia.cn/Download/index.aspx?lang=cn
按自己的顯卡型號(hào)下載
6、nvidia docker file : https://hub.docker.com/r/nvidia/cuda/
這里面可以看到很多dockerfile,選擇
9.0-base-centos7 (9.0/base/Dockerfile)
其他的cuda9.1這些應(yīng)該也可以用,另外有像devel和runtime這樣的,其實(shí)就是yum安裝的cuda包不太一樣,沒(méi)多大關(guān)系。
點(diǎn)進(jìn)去后復(fù)制下來(lái)保存為Dockerfile文件,但是之后搞的時(shí)候發(fā)現(xiàn)有點(diǎn)問(wèn)題,修改了一下,可以從這兒復(fù)制
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文件
準(zhǔn)備工作
直接上命令,一看就明白
[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*
安裝驅(qū)動(dòng)
[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
大概步驟就是這樣,如果出現(xiàn)問(wèn)題,可以直接網(wǎng)上找一找,應(yīng)該不會(huì)太難
安裝和啟動(dòng)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
記得顯卡驅(qū)動(dòng)一定要先裝好,nvidia-docker才能正常啟動(dòng)
制作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應(yīng)該不會(huì)有什么問(wèn)題,如果你是用的原版的,可能會(huì)在
#COPY cuda.repo /etc/yum.repos.d/cuda.repo
出錯(cuò),但是咱們已經(jīng)下載cuda 的 repo,并安裝了,所以這一步可以不用。
鏡像制作結(jié)束后,可以用命令 docker images 查看一下:
[root@localhost centos-gpu]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE centos-nvidia latest a02c8e0ad5ca 2 hours ago 207MB
如果有這一行應(yīng)該就算是成功了。
生成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
如果類(lèi)似于上面的輸出結(jié)果,差不多就可以了。
使用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*
這里需要注意的是類(lèi)似于 34d532e76913 這樣的編號(hào),是docker自動(dòng)生成的,運(yùn)行的時(shí)候需要修改一下。
到目前基本上cuda的環(huán)境就搭建好了。
TensorFlow
把下載的cudnn包用docker cp復(fù)制到docker中,解壓下來(lái),將里面的lib64路徑添加到 /etc/ld.so.conf.d/nvidia.conf 中,運(yùn)行l(wèi)dconfig,就ok了。
上面的環(huán)境好了以后,再安裝python等等軟件,這就不說(shuō)了。之后tensorflow的一些例子就可以在docker里運(yùn)行了。當(dāng)然你得安裝gpu版本的,才能發(fā)揮顯卡的威力。
另外也可以不必要這么麻煩,有已經(jīng)制作好的鏡像可以拿來(lái)用,可以參考:https://hub.docker.com/r/tensorflow/tensorflow/
其他
另外也有現(xiàn)成的cuda鏡像可以用,參考:https://hub.docker.com/r/nvidia/cuda/
直接使用命令:docker pull nvidia/cuda 就可以下載鏡像了,只不過(guò)這是ubuntu版本的,和我們的生成環(huán)境不符,如果要其他版本的可以參考上面的例子。
最后
這一段時(shí)間沒(méi)有寫(xiě)什么東西,另外之前的關(guān)于圖形繪圖的東西,一直沒(méi)扔,已經(jīng)有很多東西可以和大家分享了,只不過(guò)時(shí)間很少,還沒(méi)來(lái)得及整理。等有空了就能聽(tīng)著音樂(lè)在屏幕前磨洋工了,KeKe~。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
docker和docker-compose一鍵安裝教程(支持在線和離線)
這篇文章主要介紹了docker和docker-compose一鍵安裝(支持在線和離線),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12詳解掛載運(yùn)行的docker容器中如何掛載文件系統(tǒng)
這篇文章主要給大家介紹了如何在掛載運(yùn)行中的docker容器中掛載文件系統(tǒng),文中通過(guò)一步步的實(shí)踐過(guò)程介紹的很詳細(xì),相信對(duì)有需要的朋友們來(lái)說(shuō)具有一定的參考借鑒價(jià)值,感興趣的朋友們下面來(lái)一起看看吧。2016-12-12Dockerfile中multi-stage(多階段構(gòu)建)詳解
在2017年5月3日即將發(fā)行的 Docker 17.05.0-ce 中,Docker 官方提供了簡(jiǎn)便的多階段構(gòu)建 (multi-stage build) 方案,下面這篇文章主要給大家介紹了關(guān)于Dockerfile中multi-stage(多階段構(gòu)建)的相關(guān)資料,需要的朋友可以參考借鑒,下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2018-03-03使用Docker部署war包項(xiàng)目的實(shí)現(xiàn)
這篇文章主要介紹了使用Docker部署war包項(xiàng)目的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10docker-compose創(chuàng)建網(wǎng)橋,添加子網(wǎng),刪除網(wǎng)卡的實(shí)現(xiàn)
這篇文章主要介紹了docker-compose創(chuàng)建網(wǎng)橋,添加子網(wǎng),刪除網(wǎng)卡的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-03-03