Ubuntu 18.04 nvidia driver 390.48 安裝 TensorFlow 1.12.0 和 PyTorch 1.0.0 詳細教程
最近要在個人桌上型電腦上搭建TensorFlow和PyTorch執行環境,期間遇到了一些問題。這裡就把解決的過程記錄下來,同時也可以作為安裝上述環境的過程記錄。
如果沒有遇到類似的問題,想直接從零安裝上述兩個包的執行環境的,請直接閱讀第三部分 。
一、硬體和環境配置:
1)作業系統:Ubuntu 18.04;
2)NVIDIA Driver Version :390.48;(可通過nvidia-smi命令查到)
3)GPU:GTX 1080; (可通過nvidia-smi命令查到)
4)已安裝CUDA Toolkit 9.1; (可通過nvcc --version命令查到)
5)已安裝Anaconda3。
二、問題描述及解決過程:
1)在安裝Anaconda3後,建立名為mydev的虛擬環境
conda create --name mydev
2)隨後
source activate mydev
啟用虛擬環境
3)安裝torch1.0.0和tensorflow1.12.0
conda install -c pytorch pytorch
conda install tensorflow-gpu
4)安裝完成後,檢測上述兩個包是否均能夠使用GPU進行訓練
pytorch的測試程式碼:
# -*- coding: utf-8 -*- from __future__ import print_function import os import torch cuda = torch.cuda.is_available() if cuda: print('OK! CUDA device detected.') else : print('Error, CUDA device NOT detected.')
tensorflow的測試程式碼:
import tensorflow as tf print(tf.test.is_gpu_available())
測試結果:
pytorch測試結果顯示: OK! CUDA device detected.
tensorflow測試結果顯示: False.
說明torch可以檢測到GPU但是tensorflow沒檢測到GPU。
5)開始查錯。首先
source deactivate
退出當前虛擬環境
6)然後
source activate mydev
重新進入虛擬環境,
conda list
讓conda列出當前虛擬環境下安裝的所有包的資訊,目的是檢視包的版本
發現一個名為cudatoolkit的包,其版本是9.2,是隨著tensorflow一併安裝到虛擬環境內的。看似沒有什麼問題。
7)在當前虛擬環境內進入python
python
在python內,敲入:
>>> import tensorflow as tf
>>> tf.__file__
>>> tf.__version__
來獲取tensorflow的安裝位置,我們要檢查一下tensorflow到底安裝到了哪裡,以及版本對不對。
從python的輸出結果來看:
tensorflow的版本是1.10.0,而且位置也不對,被安裝到了 ~/.local/lib/python3.6/site-packages/... 目錄下,而不是類似 ~/anaconda3/envs/mydev/... 下。
同樣類似的問題也出現在了pytorch上。
突然回想起來電腦剛裝完驅動和CUDA Toolkit的時候,可能用過pip安裝過tensorflow,而且當時沒有意識到tensorflow有CPU和GPU版本之分,就誤安裝了tensorflow1.10的CPU版,而pip安裝的包會優先於conda虛擬環境內安裝的包,所以都亂套了。
8)根據上面的發現,我們要退出當前虛擬環境,
source deactivate
然後在主環境內
pip uninstall tensorflow
pip uninstall torch
解除安裝掉這兩個舊的包。
9)解除安裝之後,再
source activate mydev
進入虛擬環境,執行tensorflow的測試程式碼,顯示
cudaGetDevice() failed. Status: CUDA driver version is insufficient for CUDA runtime version
意思是CUDA驅動版本和CUDA執行庫版本不匹配,這是由於之前所說的cudatoolkit版本是9.2,版本過高造成的。
10)於是根據出錯資訊上網搜解決措施,發現在conda虛擬環境內,利用
conda update --all
可以使conda意識到在當前虛擬環境內,包之間的版本依賴問題,敲入上述指令後,發現conda提出的解決方案中,將cudatoolkit降級為9.0,pytorch降級為0.4.1。
於是很欣慰的敲入上述指令並執行,發現tensorflow可以發現GPU了。
11)第10步中我們降級了pytorch,所以我們要重新安裝pytorch為1.0.0版:
conda install -c pytorch pytorch
12)完整操作後,我們就有了tensorflow1.12.0和pytorch1.0.0了~
三、上述的環境配置全過程整理
1)首先,如果您的電腦之前利用pip命令曾經安裝過tensorflow或者pytorch,請用
pip uninstall tensorflow
pip uninstall torch
在pip中解除安裝掉這兩個包。
2)隨後按照如下步驟操作:
建立虛擬環境
conda create --name mydev
進入虛擬環境
source activate mydev
安裝tensorflow和pytorch
conda install -c pytorch pytorch
conda install tensorflow-gpu
讓conda再次整理包間的依賴
conda update --all
重新安裝pytorch
conda install -c pytorch pytorch
3)測試安裝好的兩個包是否均支援GPU,測試程式碼已在上面給出。
四、總結
1)安裝tensorflow時,一定要寫tensorflow-gpu而不是tensorflow,否則安裝的是tensorflow的CPU版而不是GPU版。
2)理論上來說,pip和conda命令是衝突的。pip解決的是python內包之間的依賴問題,而conda的目標是管理任何程式語言之間的包的依賴問題。所以根據喜好,以後儘量使用二者中的一個。
3)當包的狀態不對時,可以利用packageName.__version__和packageName.__file__可以檢視包的版本和安裝位置。