Python、CUDA、CUDNN 多版本共存採坑日記

2021-12-27 狗頭Rser
前言

昨天和前天在搭建 mask-rcnn 環境的時候發現發現無論怎麼搭環境都會報下面一個錯:

AttributeError: module 'tensorflow' has no attribute 'log'

後來在 github 裡的 issue 中找到了答案,就是 tensorflow 的版本過高了(高於了 2.0).

這就帶來了一個問題, tensorflow 需要 degrade 到 1.3.0 到 2.0 之間的版本,所以我想按照指示將其 degrade 到 1.15.0 ,查官網,發現 tensorflow 1.15.0 對應的 Python、CUDA 和 CUDNN 的版本對應的關係。

選擇 1.15.0 是因為沒法選擇 CUDA 9.0 不支持 Ubuntu 18.04 的版本,所以換了 1.15.0

看到 tensorflow 1.15.0 對應的 Python 版本為 3.6, 對應的 CUDA 為 10.0,CUDNN 為7.4 ,所以會出現多個版本的 Python 和多個版本的 CUDA、CUDNN 共存的問題。

多個版本的 Python 共存的問題

  說實話,一開始我以為要去 anaconda 去多下幾個發行版,後來偶然翻 issue 的時候發現 conda create -n env-name python=x.x.x 的時候可以指定 python 的版本(其實一開始就知道能指定 python 版本,但是不知道這樣能不能算數…),也就是說, anaconda 創建 virtualenv 的時候能夠自動下載 python 對應的版本,所以,無需再下 anaconda 對應的發行版,只需要讓 anaconda 自動去下相應版本的 python 就可以了(即 conda 創建虛擬環境的時候會自動安裝對應的 python 版本)


我嘗試激活了一下 mask-rcnn 的虛擬環境,並且啟動 python 的 env,發現 python 的版本為 3.6.13 即是我要的 python 3.6 的版本。

多個 CUDA 共存的問題

  在這我查找的一段資料原文是:

Installing multiple versions won’t cause any of the previous versions to get overwritten, so no need to worry. Each version you install will overwrite the configurations that cause the operating system to use a certain version, but by default they all get installed under /usr/local in separate directories by their version numbers.

即,安裝多個 CUDA 並不會導致先前安裝的版本被覆蓋,而是覆蓋了使用的權限——也就是說,你需要用哪個版本的 CUDA 的時候就去給哪個 CUDA 權限就可以了!

所以只是安裝 CUDA 的問題,然後再給它指派軟連結的事情。

首先下載 CUDA 10.0 ,下載的時候發現 11.0 好像不支持拉下本地文件,而是一定要用 wget 命令,而 10.0 是支持拉下本地文件解壓後下載的。可以用 runfile 或者 deb下載。

所以就用 deb 方式下載吧,比較 dpkg 比較熟練(hhhhhh)。

事實上,CUDA 安裝幾個都是無所謂的,只要在運行的時候選擇好需要的 CUDA 即可, CUDA 又可以分為 runtime 和 drivertime,即 nvcc -V獲取到的是 runtime 的 cuda,而 nvidia-smi獲取到的是顯卡驅動自帶的連結,

而 nvcc -v 才是我們需要運行時候需要的 cuda 的版本。

  一般來說下載完 cuda 後, 在 /usr/local下會有 cuda 對應版本的文件夾,例如:


可以看到這裡面有 cuda 10.0,cuda 11.0,而由於我需要跑 mask-RCNN時候的版本是 tensorflow-gpu==1.15.0,其對應的 cuda 版本為 10.0,所以我需要取消原來的 cuda 11.0 的軟連結,然後將 10.0 給連結上,連結的方式為:

sudo rm -rf cuda
sudo ln -s /usr/local/cuda-<verision> /usr/local/cuda

實際上,想要對 cuda 進行軟連結。只需要先移除 /usr/local 下的 cuda 文件夾,然後用 ln 命令對 cuda 特定的版本進行軟連結即可。

唯一無法確定的是 CUDA 安裝時候的環境變量的導出問題,網上眾說紛紜,官網也沒找到合適的答案,只能等待以後慢慢理解了,下面掛一下目前的環境變量導出的方法。

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-10.0/lib64
export PATH=$PATH:/usr/local/cuda-10.0/bin

CUDNN 的安裝

CUDNN 是深層卷積神經網絡加速的工具,對於 CUDNN 的安裝,其實之前的公眾號或者博客也已經講過了,用 tar 解壓的方式其實很簡單,其實就是把相應的 *.h 文件拷貝到 cuda 裡,然後賦予權限即可。例如:

sudo cp cuda/include/cudnn.h /usr/local/cuda/include/
sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64/
sudo chmod a+r /usr/local/cuda/include/cudnn.h
sudo chmod a+r /usr/local/cuda/lib64/libcudnn*

就是將 library 文件加壓後的 cuda 文件中的 cudnn.h 複製到 cuda/inlcude 裡面,把 lib64裡面的 libcudnn* 複製到 lib64 裡面去,就安裝成功了。然後可以使用下面的方法查看 CUDNN 的版本

查看 CUDNN 的方法

cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2


例如,這裡面就是 7.4.2 的版本。

關於 Mask-RCNN env 的搭建

   Mask-RCNN 實際上也是目標檢測中的一種算法,它就是所謂的 fast-rcnn 再進行 mask,我預計我後期的 target 重點在於 training 還有 geocode,即在訓練出一種泛化的權重下然後進行 extraction。

  關於 Mask-RCNN 的搭建,坑真的好多,一方面自己煞筆了一晚上,另一方面,它就是 bug 太多了

首先,在上面已經講了可以用 conda create -n mask-rcnn python=3.6 創建一個虛擬環境,專門用來一個深度學習框架的使用,然後,需要把 code 給拉下來,

numpy
scipy
Pillow
cython
matplotlib
scikit-image
keras>=2.0.8
opencv-python
h5py
tensorflow-gpu==1.15.0
keras
imgaug
jupyter

這是我裡面 requirements.txt 需要的東西,結果最讓我沒想到的是,pip install 和 conda install 也存在著區別,pip install安裝著裡面相應的庫的同時也加入一些必要的依賴庫的安裝,但是conda install 也安裝,同時,它還安裝了 cuda-toolkit 還有 CUDNN 的安裝,真的是裝到氣吐血,一堆錯誤。最關鍵的一開始還把 tensorflow-gpu==1.15.0 裝成了 tensorflow-gpu==1.5.0 ,然後一直報錯

h5py 的 error,版本太高,需要 degrade 到 version

AttributeError: 『str』 object has no attribute 『decode』

pip install h5py==2.10.0

ImportError: libcublas.so.9.0: cannot open shared object file: No such file or directory

出現這個問題很可能是 tf 的版本和  CUDA 和 CUDNN 沒有對應,我出現這個問題就是因為裝錯了 tf 的版本(曹)。

   3. tensorflow 的 error
Error : Failed to get convolution algorithm. This is probably because cuDNN failed to initialize, so try looking to see if a warning log message was printed above

出現這個問題可能是 CUDNN 沒安裝正確,但是我用 cat 命令檢查過 CUDNN 的版本了,學長建議我用 conda install  代替  pip install  後來在安裝的過程中我確實看到了 cuda-toolkit10.0 還有 CUDNN,但是具體是不是本地不需要裝,無法確定,學長建議我還是裝一下,反正現在裝的挺熟練了....

 

這是終於安裝成功的結果了,tf-gpu 正確各種錯誤也排完了,但是由於電腦顯存的問題,無法 inference,所以…後續租伺服器或者用 colab 或者用 pytorch 框架去跑,學長和我說 batch-size 設成 1 勉強能 training,那沒辦法了,深度學習就是個吃顯卡的怪獸~-~

相關焦點

  • 計算機視覺必備開發環境(CUDA、cuDNN及多CUDA共存)
    可以按照Step 4的步驟安裝多個cuda,比如我們現在安裝了cuda9、cuda10、cuda10.1、cuda10.2、cuda11.5等多個cuda版本。我們在實際的項目中切換cuda版本需要修改環境變量,然後再source一下,這樣會很麻煩,有沒有簡單的方法處理多cuda共存的問題呢?
  • cuda cudnn安裝 Ubuntu&Windows
    Ubuntucuda安裝cuda-repo-ubuntu16.04-10.0_local_xxx_amd64.deb cuda地址cudnn-
  • CUDA CUDNN AnaConda Tensorflow-GPU pycharm安裝及設置教程
    查看當前驅動支持的CUDA版本,本計算機支持的版本為11.22、CUDA 下載,cudnn環境路徑,由於本機安裝軟體較多,path路徑存儲超限,因此採用將cuda路徑單獨存儲的方法進行存儲,如下圖所示。
  • 深度學習環境搭建:Ubuntu16.04+ python3.5+cuda8.0+Tensorflow1.4
    本文介紹最常見的深度學習環境(Ubuntu+Cuda+Tensorflow)搭建過程,說明如何在眾多發行版本的軟體中選擇適合自己的版本,節約踩坑的時間。最近跟風在刷吳恩達老師的深度學習課程,開始一直在用anaconda安裝tensorflow的CPU版本,但是發現這個速度很慢,再加上筆記本有GTX960m,不用起來也是浪費了。於是就開始折騰。
  • 2021-12-25 CUDA的坑
    linux的坑,這個順路紀以下,之前用的一直是ubuntu 18的,一直提醒我更新到20,我一直都沒關,直到有一次,我腦子一熱,點了升級,然後。。。。。。。整個黑屏了。。。一般來說,你有兩種方式區查看自己的N卡的cuda版本,一個是Nvidia-smi這個顯示的CUDA 的版本是顯卡驅動的版本還有一個方法,是nvcc -V
  • Ubuntu配置--cuda和cudnn的安裝(已經多個cuda間的切換)
    在 /usr/local 中可以看到文件夾 cuda 和 cuda-9.2 。這裡cuda是創建的軟連接,cuda-9.2是你新安裝的版本cuda,可以同時安裝多個cuda,以創建不同的軟連接來實現不同cuda版本間的切換。5.
  • Ubuntu安裝和卸載CUDA和CUDNN
    卸載CUDA很簡單,一條命令就可以了,主要執行的是CUDA自帶的卸載腳本,讀者要根據自己的cuda版本找到卸載腳本:sudo /usr/local/cuda-8.0/bin/uninstall_cuda_8.0.pl卸載之後,還有一些殘留的文件夾,之前安裝的是CUDA 8.0。
  • 深度學習GPU環境Ubuntu16.04+GTX1080+CUDA9+cuDNN7+TensorFlow1.6環境配置
    接下來我們驗證下 python3、pip3 命令是否都來自 Anaconda,命令如下:pip3 -Vpip 9.0.1 from /usr/local/anaconda3/lib/python3.6/site-packages (python 3.6)which python3/usr/local/anaconda3/bin/python3python3Python
  • Anaconda3+CUDA10.1+CUDNN7.6+TensorFlow2.6安裝(Ubuntu16)
    10.1版本匹配去tensorflow官網查看版本匹配關係,地址:https://tensorflow.google.cn/install/source如下圖,在我的電腦上有三個合適的版本:版本,所以,就下載最新版吧(此刻是2021.05版)
  • Ubuntu 配置多個版本cuda(10.0、10.1)
    環境配置問題一般都是各個框架與cuda版本的適配問題,裝不好cuda就沒辦法調用gpu進行快速訓練或推理,所以深度學習要是用不上gpu這不相當於學習了個寂寞!多提一句,很多童鞋一開始就是接觸的tensorflow,特別在tf1.x時代,各個tf版本與不同cuda版本的適配,經常被搞得欲仙欲死,直接從入門到放棄。
  • Win10系統下Pytorch1.7 + tensorflow2.x +CUDA10.1 安裝與配置
    首先看一下軟體版本信息:CUDA10.1cuDNN7.6.5tensorflow2.2.0pytorch1.7python3.6.5VS2017在安裝之前請先確認一下,你的電腦上有獨立的N卡,沒有N就不用看了!有N卡的繼續往下看。
  • 多版本python共存
    1.python2和python3版本共存的配置首先進入python2的安裝路徑如下  重命名文件python.exe為python2.exe,pythonw.exe為pythonw2.exe  重命名文件python.exe為python3.exe,pythonw.exe為pythonw3.exe
  • 深度學習環境配置 (Ubuntu18.04 + CUDA10.0 + cuDNN7.6.5 + TensorFlow2.0)
    第一次安裝 CUDA 的過程簡直抓狂,中間出現了很多次莫名其妙的 bug,踩了很多坑。其他的版本可查看對應的Online Documentation[8]。首先需要註冊下載對應 CUDA 版本號的 cuDNN 安裝包: 連結[11]。
  • ubuntu16+python3.5+cuda8+cudnn6+tensorflow1.4安裝指南
    在/usr/local/路勁下輸入: sudo rm -r cuda-9.0 第五步:安裝cuDNN V6下載地址:https://developer.nvidia.com/cudnncudnn-8.0-linux-x64-v6.0.tgz進入下載目錄:tar -zxvf cudnn
  • 那些年配置tensorflow-GPU環境的坑
    【配置】:win10+python 3.7+tensorflow2.0.0+Cuda 10.0+Cudnn 7.6.5+GTX 1650【安裝思路】:0.主要是弄清自己的版本、自己需要裝的版本1.查看自己電腦有沒有GPU2.查看自己NVIDA GPU驅動程序的版本並安裝CUDA驅動3.查看cuda和tensorflow-gpu、cudnn對應版本4.創建虛擬環境安裝對應的tensorflow版本5.檢測能否使用GPU6.在spyder/pycahrm中的bug【1】.查看自己電腦有沒有
  • Win10安裝GPU版本的Tensorflow 2.1
    首先,下載Anaconda個人版,最新版本是3.7,安裝的時候推薦把Anaconda添加到系統環境變量中。
  • Linux雙系統安裝+cuda+cuDNN+pytorch
    /cuda-downloads選擇對應Linux版本(選擇deb(local)安裝方式)後,輸入下面的指令即可之後參考https://docs.nvidia.com/cuda/cuda-quick-start-guide/index.html#ubuntu-x86_64https://docs.nvidia.com/cuda/cuda-installation-guide-linux
  • 使用 Amazon Deep Learning AMI 快速實現 CUDA,cuDNN 和深度學習框架版本兼容
    /local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2*左滑查看更多默認版本cuDNN 7.5.1#define CUDNN_MAJOR 7#define CUDNN_MINOR 5#define CUDNN_PATCHLEVEL 1--#define CUDNN_VERSION
  • Python機器學習和深度學習環境搭建
    【附錄二】cuda+cudnn+tensorflow-GPU安裝的問題1. 安裝時請特別注意,cuda、cudnn、tensorflow-gpu、python的第一個小版本號(小數點後第一位)一定要匹配!!a.