tensorflow前前后后裝過幾十次,每次裝cuda&cuDNN都很麻煩,決定整理一下踩過的坑和安裝流程,記錄可能會遇到的問題在這里備忘,過程會盡量寫得完整詳細。
如果無法解決問題,建議查閱結尾參考資料中的官方文檔鏈接,畢竟大部分情況下官方文檔才是最完整的。
記錄兩種安裝方法,第一種是使用runfile,第二種用deb文件安裝。
環境:
主板——Z370XP SLI
顯卡——2 * 微星紅龍1070ti
ssd——建興(LITEON) 睿速系列 T10 240G
系統環境——Ubuntu16.04 64位、Windows10 64位專業版本,雙系統
電源——美商海盜船(USCorsair)額定1000W
當時折騰ubuntu的引導程序也花了不少時間,不過如何分盤裝雙系統這里還是不具體介紹了,網上一堆教程。
前置準備工作:
首先在官網查閱,自己的電腦是否支持。
查閱:Pre-installation Actions先確定下面四個沒有問題。
Verify You Have a CUDA-Capable GPU]
Verify You Have a Supported Version of Linux
Verify the System Has gcc Installed
Verify the System has the Correct Kernel Headers and Development Packages Installed
開始做預備工作:
安裝cuda的依賴包。
這里是cuda-sample的依賴包,不裝sample可以只裝上面的
1. deb安裝:
1.1 CUDA安裝
這種方法比較簡單,推薦這種方法。
下載cuda9.0(https://developer.nvidia.com/nvidia-developer-zone)
下好以后在終端輸入(版本格式參考官方文檔)
sudo apt-get autoremove --purge nvidia-*
或者
sudo apt-get purge nvidia* 或者 sh ./nvidia.run --uninstall
來卸載原有驅動。(可以用nvcc -V 查看是否成功卸載。)
卸載完后開始安裝:
1. sudo dpkg -i cuda-repo-ubuntu1604-9-0-local_9.0.176-1_amd64.deb
2. sudo apt-key add /var/cuda-repo-9-0-local/7fa2af80.pub #添加key
3. sudo apt update
4. sudo apt -y install cuda
- 添加環境變量
配置環境變量,運行如下命令打開profile文件
在profile結尾加入:
export CUDA_HOME=/usr/local/cuda-9.0
export PATH=/usr/local/cuda-9.0/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-9.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
然后source /etc/profile
立即生效。
在終端輸入 : nvcc -V
看到相應的nvcc編譯器信息,那么CUDA配置成功。
那么重新啟動:sudo reboot
5*. 注意:重啟以后可能會有 循環登陸 的問題,我之前就卡在這邊挺久,碰到這種情況最簡單的方法當然是使用第二種方法runfile文件安裝,然后安裝的時候選擇不安裝OpenGL。
但是實際上還有一種方法可以解決,這種情況發生很可能是主板的安全啟動secure boot引起的,先把它關掉(http://www.icharm.me/%E6%8A%80%E5%98%89gigabyte-b350m-gaming-3-%E5%85%B3%E9%97%AD-secure-boot.html),如果沒有解決那么應該是顯卡的問題。WIN10的電腦如果存在獨顯,那么cpu的核顯驅動是不會下載的,我們需要兩塊顯卡就得手動設置,設置以后WIN10就能識別核顯并且能安裝驅動了,此時ubuntu也一樣,我們需要下載ubuntu對應的cpu的核顯,很多七代八代的cpu核顯ubuntu16.04并不支持,那么我需要對linux內核降級比較麻煩,比較好的方法是用官網提供的自動安裝腳本來安裝驅動程序包,ubuntu 16.04 lts的解決方法在此網址:(https://software.intel.com/en-us/forums/opencl/topic/738108)
- 性能測試:
其實主要是看看cuda是否正確安裝,
# 切換到cuda-samples所在目錄
cd /usr/local/cuda/samples
# 沒有make,先安裝命令 sudo apt-get install cmake,-j是最大限度的使用cpu編譯,加快編譯的速度
sudo make –j8
# 編譯完畢,切換release目錄(/usr/local/cuda/samples/bin/x86_64/linux/release完整目錄)
cd ./bin/x86_64/linux/release
# 檢驗是否成功,運行實例
./deviceQuery
# 最后能看到Result = PASS就算成功了。
1.2 cuDNN 安裝
cuDNN是GPU加速計算深層神經網絡的庫。首先去官網(https://developer.nvidia.com/rdp/cudnn-download)下載cuDNN,需要注冊一個賬號才能下載,以前需要幾天的審核時間,現在基本是秒批。
選擇對應版本下載。
安裝cudnn比較簡單,簡單地說,就是復制幾個文件:庫文件和頭文件。將cudnn的頭文件復制到cuda安裝路徑的include路徑下,將cudnn的庫文件復制到cuda安裝路徑的lib64路徑下。具體操作如下:
#解壓文件
cp cudnn-9.0-linux-x64-v7.solitairetheme8 cudnn-9.0-linux-x64-v7.tgz
tar -xvf cudnn-9.0-linux-x64-v7.tgz
#切換到剛剛解壓出來的文件夾路徑
cd cuda
#復制include里的頭文件(記得轉到include文件里執行下面命令)
sudo cp include/cudnn.h /usr/local/cuda/include/
#復制lib64下的lib文件到cuda安裝路徑下的lib64(記得轉到lib64文件里執行下面命令)
sudo cp lib64/* /usr/local/cuda/lib64/
#設置權限
sudo chmod a+r /usr/local/cuda/include/cudnn.h
sudo chmod a+r /usr/local/cuda/lib64/libcudnn*
#======更新軟連接======
cd /usr/local/cuda/lib64/
sudo rm -rf libcudnn.so libcudnn.so.7 #刪除原有動態文件,版本號注意變化,可在cudnn的lib64文件夾中查看
sudo ln -s libcudnn.so.7.0.5 libcudnn.so.7 #生成軟銜接(注意這里要和自己下載的cudnn版本對應,可以在/usr/local/cuda/lib64下查看自己libcudnn的版本)
sudo ln -s libcudnn.so.7 libcudnn.so #生成軟鏈接
sudo ldconfig -v #立刻生效
終端輸入:nvcc -V
查看是否正常
2. runfile安裝
2.1 runfile安裝的前置準備工作
首先去官網(http://www.nvidia.cn/Download/index.aspx?lang=cn)查找適配自己電腦GPU的驅動,我的電腦驅動版本如下:
2.2 CUDA的安裝
(1)卸載原有驅動 sudo apt-get autoremove --purge nvidia-*
或者
sudo apt-get purge nvidia* 或者 sh ./nvidia.run --uninstall
(2)禁用nouveau驅動
編輯文件blacklist.conf
sudo gedit /etc/modprobe.d/blacklist.conf
在文件最后部分插入以下兩行內容
blacklist nouveau
options nouveau modeset=0
更新系統sudo update-initramfs -u
重啟系統sudo reboot
終端中運行: lsmod | grep nouveau
確定已經禁用了 nouveau,輸入以后沒反應即成功
(3)安裝驅動:
sudo add-apt-repository ppa:graphics-drivers/ppa
//添加驅動源
sudo apt update
sudo apt-get install nvidia-390
sudo apt-get install mesa-common-dev
//本句及下一句命令有的電腦需要,有的電腦不需要,根據實際情況輸入命令
sudo apt-get install freeglut3-dev
執行完上述命令后若無問題,重啟,若有問題,轉到第二種方法。
sudo reboot
重啟后輸入:
sudo nvidia-smi
如果顯示GPU列表,則證明驅動安裝成功了,另外也可以通過如下命令:
nvidia-settings
查看GPU信息,顯示界面如下:
出現這個是正常的
(4)下載cuda9.0 (https://developer.nvidia.com/nvidia-developer-zone)
(5)Ctrl + Alt + F1(或init 3等于直接執行(5)和(6))
(6)輸入了sudo service lightdm stop
(7)sudo sh cuda_9.0.176_384.81_linux.run
(8)單擊回車或者 q,輸入accept,一路選yes往下運行,直到提示“是否為NVIDIA安裝驅動nvidia-384?”,選擇否,因為已經安裝好驅動程序了,其他的全都是默認,(如果是安裝tensorflow的話,cuda sample 可以不裝,一是裝了也經常會有問題,二是我們只通過tensorflow來調用CUDA,不直接寫CUDA代碼,也不是必須要安裝)不過要記住安裝位置,默認是安裝在/usr/local/cuda文件夾下。
(8*)如果之前沒有手動安裝驅動,而下載的cuda版本里自帶的驅動剛好支持現在的顯卡
那么可以輸入:(如果是為了避免循環登陸,記得選擇不安裝opengl)
sudo sh cuda_9.0.176_384.81_linux.run -no-x-check -no-nouveau-check -no-opengl-files
Accept以后全部點了yes 和 enter
(9)輸入sudo service lightdm start
(10)添加環境變量
配置環境變量,運行如下命令打開profile文件
在profile結尾加入:
export CUDA_HOME=/usr/local/cuda-9.0
export PATH=/usr/local/cuda-8.0/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-9.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
然后source/etc/profile
立即生效。
注意:
如果環境變量寫錯導致 gedit命令失效,那么先臨時設置環境變量
export PATH="$PATH:/usr/bin"
現在這些命令就可以臨時使用了,打開再修改就行。
碰到Would you like to register the kernel module sources with DKMS?This will allow DKMS to auomatically build a new module,if you install a different kernel later
回答No。
(11)安裝完成以后
輸入: nvcc -V
會得到nvcc-V相應信息,那么CUDA配置成功了。
2.3 安裝cuDNN
同第一種方法
3.anaconda 的常用命令以及tensorflow的安裝
3.1 anaconda 的常用命令
conda list (所有安裝的庫列表)
conda install package_name (庫)安裝
conda clean清理
conda update package_name(更新)
conda remove package_name(庫) 刪除
conda search package_name(庫)搜索
conda list -n env_name #指定查看某環境下安裝的庫
conda info -e 查看當前系統下的環境
創建新的環境:
指定python版本為2.7,注意至少需要指定python版本或者要安裝的包
conda create -n env_name python=2.7
同時安裝必要的包:conda create -n env_name numpy matplotlib python=2.7
環境切換:
切換到新環境
linux下需要使用:source activate env_name
win下: activate env_name
退出環境:
win下(也可以使用’activate root’ 切回root環境)
deactivate env_name
linux下:
source deactivate
移除環境
conda remove -n env_name --all
安裝庫
anaconda search -t conda (庫例如:tensorflow) 搜索可用版本,搜到的名字
anaconda show (搜到的名字) 會顯示這個庫需要用什么指令下載
輸入安裝指令即可
更常用的方法是:直接pip install (庫名)
當想要安裝的庫安裝不了或者下載沒速度的時候,連到這個網址,(http://www.lfd.uci.edu/~gohlke/pythonlibs/#xgboost)直接ctrl+f搜想要的庫。
cp27代表python2.7以此類推,找到對應版本的庫(和自己python版本以及win32/amd64版本一樣的庫下載)
下載下來是一個whl文件,找到該文件的路徑,然后pip install (該文件的文件名.whl)
3.2 安裝tensorflow
為了提升速度,建議使用清華大學開源鏡像。復制生成的連接直接在終端輸入即可完成安裝。
另外,tensorflow中的依賴庫例如numpy跟anaconda root下的庫可能版本不一致,這樣會出現tensorflow報錯的情況。需要刪掉anaconda中的numpy庫,替換為tensorflow中自帶的,可是使用舊版本的numpy在其他代碼又會出現問題。
所以推薦使用 anaconda或者virtualenv來隔離環境。
隔離環境可以參考另外兩篇博客,關于廖雪峰的python教程(http://www.lxweimin.com/p/3d6c0241503a)和anaconda 常用命令。(http://www.lxweimin.com/p/cf14d7b51fe7)
為了保持連貫,anaconda常用命令已經貼在3.1部分。
怕麻煩的改配置,以后就都是從清華源安裝庫了
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --set show_channel_urls yes
4. References:
[1]https://developer.nvidia.com/cudnn
[2]http://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html#ubuntu-installation
[3]https://tensorflow.google.cn/install/install_linux#InstallingAnaconda
[4]https://www.cnblogs.com/iloveblog/p/7683349.html
[5]http://www.icharm.me/%E6%8A%80%E5%98%89gigabyte-b350m-gaming-3-%E5%85%B3%E9%97%AD-secure-boot.html
[6]https://stackoverflow.com/questions/12883128/installing-cuda-5-0-rc-samples
[7]https://software.intel.com/en-us/forums/opencl/topic/738108
[8]https://software.intel.com/en-us/forums/opencl/topic/738108
[9]Keras2.0官方中文教程