記錄安裝tensorflow-gpu版本時遇到的一些問題
我現在用的時Pycharm,裏面的Interpreter使用的是Anaconda的python.exe。我的想法是,把所有的package全都放在一個Interpreter裏,這樣的話,以後我不管運行什麼文件都可以只是用這個Interpreter,從而不需要安裝重複的package。
但事實上,我請教了一些大佬,他們說tensorflow一般都單獨創建一個虛擬環境,因爲像tensorflow, pytorch之類誰知道混在一起就會崩了。而我看了網上的一些教程也都是讓你先創建一個名爲tensorflow的環境,然後安裝進去之類…
再然後就是,我使用Pycharm的時候會遇到一些問題,有時候我會繞過去,但早晚還會再遇見這些坑,於是這次我又跳了進去…但最後還是跳了出來。
一、首先是Anaconda的安裝
正常默認安裝, 記得勾選添加環境變量。
打開Anaconda Prompt,輸入
conda info --e
顯示結果如下,它要我們激活這個base:
此時,我們執行
conda activate base
我們就進入了base
接着在這裏輸入
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple tensorflow-gpu==2.0.0a0
OK,tensorflow-gpu版本就已經安裝完成了!
二、然後我們安裝Cuda
https://developer.nvidia.com/cuda-10.0-download-archive?target_os=Windows&target_arch=x86_64&target_version=10&target_type=exelocal
選擇version10安裝,然後全都默認安裝到結束。
然後就是cudnn的安裝
https://developer.nvidia.com/rdp/cudnn-download
下載之後解壓縮,然後將文件夾的內容放到Cuda的安裝目錄下(需要自己建立一個名爲cudnn的文件夾)
最後就是環境變量的配置了。在安裝的時候機會有前兩個環境自動配置好,而我們需要手動配置後兩個:
至此,Cuda算是安裝完成了。
正常默認安裝, 記得勾選添加環境變量。
三、記錄一下安裝tensorflow-gpu遇到的一些問題
裝完之後,運行以下測試代碼(來自網絡)
import tensorflow as tf
import timeit
with tf.device('/cpu:0'):
cpu_a = tf.random.normal([10000, 1000])
cpu_b = tf.random.normal([1000, 2000])
print(cpu_a.device, cpu_b.device)
with tf.device('/gpu:0'):
gpu_a = tf.random.normal([10000, 1000])
gpu_b = tf.random.normal([1000, 2000])
print(gpu_a.device, gpu_b.device)
def cpu_run():
with tf.device('/cpu:0'):
c = tf.matmul(cpu_a, cpu_b)
return c
def gpu_run():
with tf.device('/gpu:0'):
c = tf.matmul(gpu_a, gpu_b)
return c
# warm up
cpu_time = timeit.timeit(cpu_run, number=10)
gpu_time = timeit.timeit(gpu_run, number=10)
print('warmup:', cpu_time, gpu_time)
cpu_time = timeit.timeit(cpu_run, number=10)
gpu_time = timeit.timeit(gpu_run, number=10)
print('run time:', cpu_time, gpu_time)
此時結果是正常出來了,但是報出如下:
意思是你的 CPU 支持AVX AVX2 (可以加速CPU計算),但你安裝的 TensorFlow 版本不支持。但我用的是GPU的Cuda加速,想想就不需要CPU了。雖然這些不是警告也不是錯誤,但看起來還是不舒服。
查找了忽略這些信息的一些方法:
os.environ["TF_CPP_MIN_LOG_LEVEL"] = '1' # 默認,顯示所有信息
os.environ["TF_CPP_MIN_LOG_LEVEL"] = '2' # 只顯示 warning 和 Error
os.environ["TF_CPP_MIN_LOG_LEVEL"] = '3' # 只顯示 Error
因此,對於現在的情況,我們選擇‘2’
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
結果如下: