1. ホーム
  2. Deep Learning

Tensorflow-gpu2.0.0インストールとtensorflow-gpuインストール成功のテストプログラム。

2022-02-16 07:37:28

オリジナルです。

テストコードです。

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)

メッセージを出力します。

E:\anaconda3\envs\tf_gpu200\python.exe E:/pycharmProject/helloWorld.py
2019-11-04 23:06:03.772940: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cudart64_ 100.dll
2019-11-04 23:06:04.772659: [I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library nvcuda.dll
2019-11-04 23:06:04.797803: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1618] Found device 0 with properties: 
name: GeForce RTX 2070 SUPER major: 7 minor: 5 memoryClockRate(GHz): 1.77
pciBusID: 0000:08:00.0
2019-11-04 23:06:04.797917: I tensorflow/stream_executor/platform/default/dlopen_checker_stub.cc:25] GPU libraries are statically linked, skip dlopen check.
2019-11-04 23:06:04.798299: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1746] Adding visible gpu devices: 0
2019-11-04 23:06:04.798570: I tensorflow/core/platform/cpu_feature_guard.cc:142] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2
2019-11-04 23:06:04.800913: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1618] Found device 0 with properties: 
name: GeForce RTX 2070 SUPER major: 7 minor: 5 memoryClockRate(GHz): 1.77
pciBusID: 0000:08:00.0
2019-11-04 23:06:04.801028: I tensorflow/stream_executor/platform/default/dlopen_checker_stub.cc:25] GPU libraries are statically linked, skip dlopen check.
2019-11-04 23:06:04.801406: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1746] Adding visible gpu devices: 0
2019-11-04 23:06:05.265320: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1159] Device interconnect StreamExecutor with strength 1 edge matrix:
2019-11-04 23:06:05.265399: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1165] 0 
2019-11-04 23:06:05.265443: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1178] 0: N 
2019-11-04 23:06:05.266070: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1304] Created TensorFlow device (/job:localhost/replica:0/ task:0/device:GPU:0 with 6283 MB memory) -> physical GPU (device: 0, name: GeForce RTX 2070 SUPER, pci bus id: 0000:08:00.0, compute capability: 7.5 )
/job:localhost/replica:0/task:0/device:CPU:0 /job:localhost/replica:0/task:0/device:CPU:0
/job:localhost/replica:0/task:0/device:GPU:0 /job:localhost/replica:0/task:0/device:GPU:0
2019-11-04 23:06:06.226104: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cublas64_ 100.dll
warmup: 0.6706975 0.20009929999999998
run time: 0.6638971000000001 0.000571399999999998887

Process finished with exit code 0

インストール作業です。

        NVIDIAのドライバは これは のビデオインストールで、ドライバをインストールするかどうかを見に行くことができます(アドレスも出ますが、私はとても遅いので、ダウンロードボタンを右クリックして、アドレスをコピーしてからThunderboltを使ってダウンロードすると、超高速でダウンロードできます)。tensorflow-gpuをインストールしたい場合は、普通にインストールするだけで、まずcondaで仮想環境を作り、有効化し

# -i https://pypi.doubanio.com/simple
pip install tensorflow-gpu -i https://pypi.tuna.tsinghua.edu.cn/simple

先ほど、tensorflow-gpu version 2.0.0 を使わずに下位バージョンをインストールしようとし、version 1.14 をインストールし、最後に tensoflow-gpu が動くかどうかをテストしたら、最終出力が表示されました。

ImportError: Could not find 'cudnn64_7.dll'.

 Webで見てみると、cudnnのバージョンとtensorflowのバージョンにコンフリクトがあることがわかります。当然どちらかを変更しなければならないので、結局手間を減らすためにtensorflow-gpu 2.0.0をインストールすることにしました。

更新しました。

        pipを使ったtensorflow-gpu version 1.14.0のオリジナルインストールでは、上記のようなエラーが発生しました。突然ですが、conda install tensorflow-gpu version 1.14.0を使うと意外とうまくいくことがわかりました。しかし、condaを使ったtfのインストールは少し奇妙で、2つの意味で奇妙です。

  1. pipのリスト出力とcondaのリスト出力は以下のように異なっています(お気づきでしょうか? 一方はtensorflow-gpuがインストールされており、もう一方はtensorflow-cpuがインストールされていることを示しています)。 <テーブル

            システムはPYTHONPATHがanacondaディレクトリを指すように設定するので、Pipコマンドを使用してパッケージをインストールすると、デフォルトでanacondaの下にロードされます。
    condaは環境としてanacondaの他に他の環境も管理します。conda は python ライブラリだけでなく c/c++ などの非 python ライブラリも管理できますが、pip は python ライブラリを管理するための公式推奨コマンドのみです。

  2. 一番重要なのは、condaのリストで、CPU版とGPU版の両方がインストールされていることです。これはCPUとGPUのどちらで動作するのでしょうか?

テスト結果は以下の通りです。

import tensorflow as tf
a = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[2, 3], name='a')
b = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[3, 2], name='b')
c = tf.matmul(a, b)
sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
print(sess.run(c))

出力はこのようになります。

WARNING:tensorflow:From E:/pycharmProject/testpy.py:6: The name tf.Session is deprecated. Please use tf.compat.v1.Session instead.

WARNING:tensorflow:From E:/pycharmProject/testpy.py:6: The name tf.ConfigProto is deprecated. Please use tf.compat.v1.ConfigProto instead.

2019-11-25 23:45:23.874021: I tensorflow/core/platform/cpu_feature_guard.cc:142] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX AVX2
2019-11-25 23:45:23.876005: I tensorflow/stream_executor/platform/default/dso_loader.cc:42] Successfully opened dynamic library nvcuda.dll
2019-11-25 23:45:23.903390: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1640] Found device 0 with properties: 
name: GeForce RTX 2070 SUPER major: 7 minor: 5 memoryClockRate(GHz): 1.77
pciBusID: 0000:08:00.0
2019-11-25 23:45:23.903510: I tensorflow/stream_executor/platform/default/dlopen_checker_stub.cc:25] GPU libraries are statically linked, skip dlopen check.
2019-11-25 23:45:23.903933: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1763] Adding visible gpu devices: 0
2019-11-25 23:45:24.423957: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1181] Device interconnect StreamExecutor with strength 1 edge matrix:
2019-11-25 23:45:24.424051: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1187] 0 
2019-11-25 23:45:24.424097: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1200] 0: N 
2019-11-25 23:45:24.425108: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1326] Created TensorFlow device (/job:localhost/replica:0/ task:0/device:GPU:0 with 6292 MB memory) -> physical GPU (device: 0, name: GeForce RTX 2070 SUPER, pci bus id: 0000:08:00.0, compute capability: 7.5 )
Device mapping:
/job:localhost/replica:0/task:0/device:GPU:0 -> device: 0, name: GeForce RTX 2070 SUPER, pci bus id: 0000:08:00.0, compute capability: 7.5
MatMul: (MatMul): /job:localhost/replica:0/task:0/device:GPU:0
a: (Const): /job:localhost/replica:0/task:0/device:GPU:0
b: (Const): /job:localhost/replica:0/task:0/device:GPU:0
2019-11-25 23:45:24.428183: I tensorflow/core/common_runtime/direct_session.cc:296] Device mapping:
/job:localhost/replica:0/task:0/device:GPU:0 -> device: 0, name: GeForce RTX 2070 SUPER, pci bus id: 0000:08:00.0, compute capability: 7.5

2019-11-25 23:45:24.429366: I tensorflow/core/common_runtime/placer.cc:54] MatMul: (MatMul)/job:localhost/replica:0/task:0/device:GPU:0
2019-11-25 23:45:24.429471: I tensorflow/core/common_runtime/placer.cc:54] a: (Const)/job:localhost/replica:0/task:0/device:GPU:0
2019-11-25 23:45:24.429570: I tensorflow/core/common_runtime/placer.cc:54] b: (Const)/job:localhost/replica:0/task:0/device:GPU:0
[[22. 28.]]
 [49. 64.]]

Process finished with exit code 0

        上記の情報からGPUを使用していることがわかりますが、condaを使ってtensorflow-gpuをインストールすると、最も重要なcudaやcudnnなどの依存関係をダウンロードしてくれることがネットでわかっています。cudaやcudnnを自分でインストールすると明らかに大きくなるので、これが隠れた問題なのかどうかわかりません。しばらく使ってみて、問題がないかどうか確認してみます。あと、condaがダウンロードする依存関係は必ずしも一致せず、高いバージョンをダウンロードすることがあるので、condaを使ってtensorflowをインストールするときは、エラーに関連するものを検索して、バージョンの問題かどうか確認する必要があります(私はnumpyのバージョンが高すぎるという問題が発生しました)。

その他のtensorflowのテストコードです。

# -*- coding: utf-8 -*-#
# Author: weiz
# Date: 2020/3/4 9:41 am
# Name: test-tf.py
# Description:
import tensorflow as tf
import numpy as np
import time

value = np.random.randn(5000, 1000)
a = tf.constant(value)

b = a * a

c = 0
tic = time.time()
with tf.Session() as sess:
    for i in range(1000):
        sess.run(b)

        c += 1
        if c % 100 == 0:
            d = c / 10
            print("Calculation progress: %s%%" % d)

toc = time.time()
t_cost = toc - tic

print("Current device test time spent:%s" % t_cost)
# GPU
print("GPU on Ubuntu is 1050Ti test time is:6.079401016235352")
print("GPU on CenOs for 1080Ti test time is:4.752010345458984")
print("Ubuntu GPU for 2070s test time is:3.87003231048584") # CPU for R7-3700x run time is 8.4 seconds
print("GPU on Ubuntu for 2060s test time is:4.5342936515808105")
# CPU
print("CPU(i7-8700k) on Ubuntu test time is:11.881832599639893")
print("CPU(i9-9900k) on CenOs test time is:7.578999996185303")


<イグ