1. 程式人生 > >雲主機搭建深度學習環境

雲主機搭建深度學習環境

今天申請了一臺雲主機,一下是搭建深度學習環境的過程:

整體還是很多坑的,基本上的思路就是遇到問題解決問題,每個人的環境不一樣,網上基本都有解決方案

1.確認機器到底有沒有GPU

運維有時候會搞錯,可能給一臺壓根沒有GPU的機器,這個可以用lspci命令來檢視是否有GPU的資訊

2.確認機器有沒有GPU的驅動

執行nvidia-smi,如果找不到命令就是沒有。

安裝過程:

注意:

a、執行命令 update-pciids

b、查詢nvidia的pci裝置資訊
       lspci |grep 3D -i |grep nvidia -i
       如:00:07.0 3D controller: NVIDIA Corporation GV100GL [Tesla V100 PCIe 16GB] (rev a1) 此資訊中包含了nvidia gpu型號Tesla V100 PCIe 16GB,則不需要繼續查詢


       如:00:07.0 3D controller: NVIDIA Corporation Device 1db4 (rev a1),此資訊中沒有包含nvidia gpu型號,只是顯示裝置id:1db4,則需要根據裝置id繼續第b步查詢
c、查詢上述裝置id 1db4是對應nvidia gpu型號
      https://pci-ids.ucw.cz/read/PC/10de

以下可根據查出的nvidia gpu型號下載相應的驅動

1、 獲取GPU驅動安裝包:

(1)   進入 NVIDIA 官網。

(2)   手動查詢適用於例項的驅動程式,並單擊 搜尋。篩選資訊說明如下表所示。

 

(3)   確認無誤後,單擊 下載 按鈕,下圖是centos7.4的驅動截圖

 

在centos7.4中也可以通過以下命令直接下載上述驅動:

      wget http://cn.download.nvidia.com/tesla/396.44/NVIDIA-Linux-x86_64-396.44.run 

2、 安裝GPU驅動:

(1)   下載並安裝kernel對應版本的kernel-devel和kernel-header包:

通過 ”uname -r” 命令檢視centos7.4中的kernel版本為:3.10.0-693.17.1.el7.x86_64

對應的Kernel-devel下載地址:http://vault.centos.org/7.4.1708/updates/x86_64/Packages/kernel-devel-3.10.0-693.17.1.el7.x86_64.rpm

對應的kernel-header下載地址:http://vault.centos.org/7.4.1708/updates/x86_64/Packages/kernel-headers-3.10.0-693.17.1.el7.x86_64.rpm

( 附 3.10.0-693.el7.x86_64 kernel, kernel-devel 和 kernel-header包下載地址:

http://vault.centos.org/7.4.1708/os/x86_64/Packages/kernel-3.10.0-693.el7.x86_64.rpm

http://vault.centos.org/7.4.1708/os/x86_64/Packages/kernel-devel-3.10.0-693.el7.x86_64.rpm

http://vault.centos.org/7.4.1708/os/x86_64/Packages/kernel-headers-3.10.0-693.el7.x86_64.rpm )

通過wget命令下載上面兩個包,然後通過yum install安裝。

需要特別注意下載的kernel-devel,kernel-header版本要與當前執行的kernel版本完全一致,否則gpu驅動無法正常安裝使用 ! ! !

安裝完成後,如下所示:

# uname –r

3.10.0-693.17.1.el7.x86_6

# rpm -qa | grep 693.17.1

kernel-devel-3.10.0-693.17.1.el7.x86_64

kernel-headers-3.10.0-693.17.1.el7.x86_64

kernel-3.10.0-693.17.1.el7.x86_64

(2)按以下步驟關閉nouveau驅動,這個驅動如果不關是裝不上的,因為和nvidia的驅動衝突。

  1. 執行 vim /etc/modprobe.d/blacklist.conf,新增 blacklist nouveau

2. 執行 vim /lib/modprobe.d/dist-blacklist.conf,新增以下內容。 

blacklist nouveau

options nouveau modeset=0

3. 執行 mv /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r)-nouveau.img

4. 執行 dracut /boot/initramfs-$(uname -r).img $(uname -r)

(3)執行 reboot 重啟系統。

(4)執行yum install gcc 安裝gcc 。

(5)安裝下載的gpu驅動

# Chmod +x NVIDIA-Linux-x86_64-396.44.run

# ./ NVIDIA-Linux-x86_64-396.44.run

正確安裝過程如下所示:

   

 

 

安裝完成後,執行:nvidia-smi,顯示如下圖所示,說明安裝成功。

 

 3.安裝cuda

這裡要確認一下自己使用的tensorflow版本,因為tf版本和cuda是要匹配起來的,網上可以找一下對應的關係,比如我用的1.14.0,cuda就是用10.0

這裡最簡單的辦法就是用conda裝

conda install cudatoolkit==xxx

當然也可以去nvidia官網去下載對應的cuda版本,傳到伺服器上安裝

這裡有個地方要注意就是安裝的時候不要選擇安裝顯示卡驅動,因為前邊已經裝過了,另外這個驅動也不太行。

4.安裝cudnn

這裡不能用conda裝了,因為conda有點傻,裝cudnn的時候會一起安裝cuda,而且經常兩個版本還不匹配。

最簡單的方法就是去nvidia官網下載一個cudnn的安裝包自己裝,這裡注意cudnn和cuda也是要匹配版本的,比如cuda10.0和cudnn7.x就可以。

下載了rpm包,用yum install xxx.rpm安裝就行

5.測試是否可以用了,用tensorflow測試一下

import tensorflow as tf

sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))

上邊兩個程式碼如果不報錯,就問題不大了。正確安裝應該顯示:

 

 

所有的資訊都是成功就對了,可以看到這裡是P40顯示卡。

如果還不確定,可以跑一下程式試試

import tensorflow as tf

  with tf.device('/cpu:0'):     = tf.constant ([1.02.03.0], shape=[3], name='a')     = tf.constant ([1.02.03.0], shape=[3], name='b') with tf.device('/gpu:1'):     = + b   # 注意:allow_soft_placement=True表明:計算裝置可自行選擇,如果沒有這個引數,會報錯。 # 因為不是所有的操作都可以被放在GPU上,如果強行將無法放在GPU上的操作指定到GPU上,將會報錯。 sess = tf.Session(config=tf.ConfigProto (allow_soft_placement=True, log_device_placement=True)) # sess = tf.Session(config=tf.ConfigProto(log_device_placement=True)) sess.run(tf.global_variables_initializer()) print (sess.run(c)) 能執行出來就沒問題了     其他如果遇上一些問題了就google或者百度就行了 可以參考https://blog.csdn.net/lzcong1986/article/details/810506