web-dev-qa-db-ja.com

テンソルフローがPythonシェル内部からGPUアクセラレーションを使用しているかどうかを判断するにはどうすればいいですか?

私はubuntu 16.04にテンソルフローをインストールしました。2番目の答えは here です。

今私の質問は、テンソルフローが本当にgpuを使っているかどうかをどうやってテストできるかということです。私はgtx 960mのGPUを持っています。私がimport tensorflowするとき、これは出力です

I tensorflow/stream_executor/dso_loader.cc:105] successfully opened CUDA library libcublas.so locally
I tensorflow/stream_executor/dso_loader.cc:105] successfully opened CUDA library libcudnn.so locally
I tensorflow/stream_executor/dso_loader.cc:105] successfully opened CUDA library libcufft.so locally
I tensorflow/stream_executor/dso_loader.cc:105] successfully opened CUDA library libcuda.so.1 locally
I tensorflow/stream_executor/dso_loader.cc:105] successfully opened CUDA library libcurand.so locally

この出力はテンソルフローがgpuを使用しているかどうかチェックするのに十分ですか?

184
Tamim Addari

いいえ、グラフの異なるノードは異なるデバイス上にある可能性があるので、「open CUDAライブラリ」で十分とは言えません。

どのデバイスが使用されているかを調べるには、次のようにログデバイスの配置を有効にします。

sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))

コンソールでこのタイプの出力を確認してください。

198
Yao Zhang

公式のTensorFlow documentation と同様に他の答えで概説されているsess = tf.Session(config=tf.ConfigProto(log_device_placement=True))を使うこととは別に、あなたはgpuに計算を代入してエラーがあるかどうか見ることを試みることができます。

import tensorflow as tf
with tf.device('/gpu:0'):
    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)

with tf.Session() as sess:
    print (sess.run(c))

ここに

  • "/ cpu:0":あなたのマシンのCPUです。
  • "/ gpu:0":あなたが持っているなら、あなたのマシンのGPU。

あなたがGPUを持っていてそれを使うことができるならば、あなたは結果を見るでしょう。そうでなければ、長いスタックトレースでエラーが発生します。最後にあなたはこのようなものを持つでしょう:

ノード 'MatMul'にデバイスを割り当てることができません:明示的なデバイス仕様 '/ device:GPU:0'を満たすことができませんでしたこの仕様に一致するデバイスはこのプロセスに登録されていないため


最近、TFにいくつかの便利な機能が登場しました。

セッションで利用可能なデバイスを確認することもできます。

with tf.Session() as sess:
  devices = sess.list_devices()

devicesはあなたに何かを返すでしょう

[_DeviceAttributes(/job:tpu_worker/replica:0/task:0/device:CPU:0, CPU, -1, 4670268618893924978),
 _DeviceAttributes(/job:tpu_worker/replica:0/task:0/device:XLA_CPU:0, XLA_CPU, 17179869184, 6127825144471676437),
 _DeviceAttributes(/job:tpu_worker/replica:0/task:0/device:XLA_GPU:0, XLA_GPU, 17179869184, 16148453971365832732),
 _DeviceAttributes(/job:tpu_worker/replica:0/task:0/device:TPU:0, TPU, 17179869184, 10003582050679337480),
 _DeviceAttributes(/job:tpu_worker/replica:0/task:0/device:TPU:1, TPU, 17179869184, 5678397037036584928)
203
Salvador Dali

次のコードはテンソルフローに利用できるすべてのデバイスをあなたに与えるでしょう。

from tensorflow.python.client import device_lib
print(device_lib.list_local_devices())

出力例

[名前: "/ cpu:0" device_type: "CPU" memory_limit:268435456ローカリティ{}の形式:4402277519343584096、

名前: "/ gpu:0" device_type: "GPU" memory_limit:6772842168地域{bus_id:1}インカネーション:7471795903849088328 physical_device_desc: "デバイス:0、名前:GeForce GTX 1070、PCIバスID:0000:05:00.0"]

87
Sheraz

これを達成するためのもっと簡単な方法があると思います。

import tensorflow as tf
if tf.test.gpu_device_name():
    print('Default GPU Device: {}'.format(tf.test.gpu_device_name()))
else:
    print("Please install GPU version of TF")

それは通常のように印刷されます

Default GPU Device: /device:GPU:0

これはそれらの詳細ログよりも私には簡単なようです。

38
Ishan Bhatt

これはトレーニング中にGPUを使用してそのテンソルフローも確認しますか?

コード

sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))

出力

I tensorflow/core/common_runtime/gpu/gpu_device.cc:885] Found device 0 with properties: 
name: GeForce GT 730
major: 3 minor: 5 memoryClockRate (GHz) 0.9015
pciBusID 0000:01:00.0
Total memory: 1.98GiB
Free memory: 1.72GiB
I tensorflow/core/common_runtime/gpu/gpu_device.cc:906] DMA: 0 
I tensorflow/core/common_runtime/gpu/gpu_device.cc:916] 0:   Y 
I tensorflow/core/common_runtime/gpu/gpu_device.cc:975] Creating TensorFlow device (/gpu:0) -> (device: 0, name: GeForce GT 730, pci bus id: 0000:01:00.0)
Device mapping:
/job:localhost/replica:0/task:0/gpu:0 -> device: 0, name: GeForce GT 730, pci bus id: 0000:01:00.0
I tensorflow/core/common_runtime/direct_session.cc:255] Device mapping:
/job:localhost/replica:0/task:0/gpu:0 -> device: 0, name: GeForce GT 730, pci bus id: 0000:01:00.0
26
himanshurobo

他の答えに加えて、以下はあなたのバージョンのtensorflowがGPUサポートを確実に含むようにするのに役立ちます。

import tensorflow as tf
print(tf.test.is_built_with_cuda())
17
karaspd

これは(Py-3.6の下で)Tensorflowに利用可能なデバイスのリストを与えるはずです:

tf = tf.Session(config=tf.ConfigProto(log_device_placement=True))
tf.list_devices()
# _DeviceAttributes(/job:localhost/replica:0/task:0/device:CPU:0, CPU, 268435456)
14
f0nzie

GPUの使用状況を監視するには、nvidia-smiを使用します。あなたがプログラムを始めたときにそれがかなり上がるならば、それはあなたのテンソルフローがGPUを使っているという強い兆候です。

10
scott huang

さて、最初に端末からipython Shellimport TensorFlowを起動します。

$ ipython --pylab
Python 3.6.5 |Anaconda custom (64-bit)| (default, Apr 29 2018, 16:14:56) 
Type 'copyright', 'credits' or 'license' for more information
IPython 6.4.0 -- An enhanced Interactive Python. Type '?' for help.
Using matplotlib backend: Qt5Agg

In [1]: import tensorflow as tf

これで、 watch GPUのメモリ使用量を次のコマンドで確認できます。

# realtime update for every 2s
$ watch -n 2 nvidia-smi

TensorFlowをimportしただけで、まだGPUを使用していないので、使用状況は次のようになります。

tf non-gpu usage

GPUのメモリ使用量が非常に少ない(約200MB)ことを確認してください。



それでは、GPUをコードにロードしましょう。 tf documentation に示すように、

In [2]: sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))

さて、 watch statsは以下のように更新されたGPU使用量メモリを表示するはずです。

tf gpu-watch

IpythonシェルのPythonプロセスが7.7GBのGPUメモリをどのように使用しているかを観察します。


P.Sコードが実行されている間、 ウォッチング これらの統計を継続して、GPUの使用率がどれほど激しいかを確認できます。

8
kmario23

コマンドラインからGPUを照会するのが最も簡単です。

nvidia-smi

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 384.98                 Driver Version: 384.98                    |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GeForce GTX 980 Ti  Off  | 00000000:02:00.0  On |                  N/A |
| 22%   33C    P8    13W / 250W |   5817MiB /  6075MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|    0      1060      G   /usr/lib/xorg/Xorg                            53MiB |
|    0     25177      C   python                                      5751MiB |
+-----------------------------------------------------------------------------+

あなたの学習がバックグラウンドプロセスである場合、jobs -pからのpidはnvidia-smiからのpidと一致するはずです。

7
Tim

Tensorflowの最近の更新では、次のように確認できます。

tf.test.is_gpu_available( cuda_only=False, min_cuda_compute_capability=None)

GPUがTrueによって使用されている場合はTensorflowを返し、そうでない場合はFalseを返します。

デバイスdevice_nameが必要な場合は、tf.test.gpu_device_name()と入力できます。 こちら から詳細を取得

5
Cs20

Jupyterで以下を実行してください。

import tensorflow as tf
sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))

あなたの環境が正しく設定されていれば、あなたは "jupyter Notebook"を走らせた端末で以下の の出力を得るでしょう

2017-10-05 14:51:46.335323: I c:\tf_jenkins\home\workspace\release-win\m\windows-gpu\py\35\tensorflow\core\common_runtime\gpu\gpu_device.cc:1030] Creating TensorFlow device (/gpu:0) -> (device: 0, name: Quadro K620, pci bus id: 0000:02:00.0)
Device mapping:
/job:localhost/replica:0/task:0/gpu:0 -> device: 0, name: Quadro K620, pci bus id: 0000:02:00.0
2017-10-05 14:51:46.337418: I c:\tf_jenkins\home\workspace\release-win\m\windows-gpu\py\35\tensorflow\core\common_runtime\direct_session.cc:265] Device mapping:
/job:localhost/replica:0/task:0/gpu:0 -> device: 0, name: Quadro K620, pci bus id: 0000:02:00.0

あなたはここで私がNvidia Quodro K620とTensorFlowを使っているのを見ることができます。

5
wafflecat

Tensorflow 2.0

Tensorflow 2.0以降、セッションは使用されなくなりました。まだ機能しているGPU機能をテストする方法は次のとおりです。

import tensorflow as tf

assert tf.test.is_gpu_available()
assert tf.test.is_built_with_cuda()

エラーが発生した場合は、インストールを確認する必要があります。

5
ma3oun

次のコードを実行して、現在GPUを使用しているかどうかを確認できます。

import tensorflow as tf
tf.test.gpu_device_name()

出力が''の場合は、CPUのみを使用していることを意味します。
出力が/device:GPU:0のようなものであれば、それはGPUが機能することを意味します。


そして、次のコードを使用して、使用しているGPUを確認します。

from tensorflow.python.client import device_lib 
device_lib.list_local_devices()
3
Hu Xixi

これは、bashから直接tf.sessionに使用可能なデバイスをリストするために使用している行です。

python -c "import os; os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'; import tensorflow as tf; sess = tf.Session(); [print(x) for x in sess.list_devices()]; print(tf.__version__);"

利用可能なデバイスとテンソルフローのバージョンを印刷します。例:

_DeviceAttributes(/job:localhost/replica:0/task:0/device:CPU:0, CPU, 268435456, 10588614393916958794)
_DeviceAttributes(/job:localhost/replica:0/task:0/device:XLA_GPU:0, XLA_GPU, 17179869184, 12320120782636586575)
_DeviceAttributes(/job:localhost/replica:0/task:0/device:XLA_CPU:0, XLA_CPU, 17179869184, 13378821206986992411)
_DeviceAttributes(/job:localhost/replica:0/task:0/device:GPU:0, GPU, 32039954023, 12481654498215526877)
1.14.0
2
y.selivonchyk

テンフロー、ケラス、pytorchが現在使用されていることを確認するには、 https://stackoverflow.com/a/53244520/420400 を参照してください。

0
Paul Williams

単にコマンドプロンプトまたはLinux環境から次のコマンドを実行します。

python -c 'import torch; print(torch.cuda.is_available())'上記は 'True'を表示します。

python -c 'import torch; print(torch.Rand(2,3).cuda())'これは次のものを表示します。

tensor([[0.7997, 0.6170, 0.7042], [0.4174, 0.1494, 0.0516]], device='cuda:0')

0
DSBLR