最近要在我的臺式機上搭建TensorFlow和PyTorch運行環境,期間遇到了一些問題。這裏就把解決的過程記錄下來,同時也能夠做爲安裝上述環境的過程記錄。python
若是沒有遇到相似的問題,想直接從零安裝上述兩個包的運行環境的,請直接閱讀第三部分。編程
1、硬件和環境配置:編程語言
1)操做系統:Ubuntu 18.04;測試
2)NVIDIA Driver Version :390.48;(可經過nvidia-smi命令查到)spa
3)GPU:GTX 1080; (可經過nvidia-smi命令查到)操作系統
4)已安裝CUDA Toolkit 9.1; (可經過nvcc --version命令查到)code
5)已安裝Anaconda3。blog
2、問題描述及解決過程:ip
1)在安裝Anaconda3後,建立名爲mydev的虛擬環境utf-8
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了~
3、上述的環境配置全過程整理
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,測試代碼已在上面給出。
4、總結
1)安裝tensorflow時,必定要寫tensorflow-gpu而不是tensorflow,不然安裝的是tensorflow的CPU版而不是GPU版。
2)理論上來講,pip和conda命令是衝突的。pip解決的是python內包之間的依賴問題,而conda的目標是管理任何編程語言之間的包的依賴問題。因此根據喜愛,之後儘可能使用兩者中的一個。
3)當包的狀態不對時,能夠利用packageName.__version__和packageName.__file__能夠查看包的版本和安裝位置。