จะทราบได้อย่างไรว่า tensorflow ใช้การเร่งด้วย gpu จากไพ ธ อนเชลล์


303

ฉันได้ติดตั้ง tensorflow ใน Ubuntu 16.04 ของฉันโดยใช้คำตอบที่สองที่นี่กับการติดตั้ง cpu builtin apt cuda

ตอนนี้คำถามของฉันคือฉันจะทดสอบได้อย่างไรว่ากระบวนการของเทอร์มินัลนั้นใช้ 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

เอาต์พุตนี้เพียงพอที่จะตรวจสอบว่า


1
คุณควรเห็นสิ่งนี้ในบันทึกของคุณ: I tensorflow / core / common_runtime / gpu / gpu_device.cc: 838] การสร้างอุปกรณ์ TensorFlow (/ gpu: 0) -> (อุปกรณ์: 0, ชื่อ: GeForce GTX 980, pci บัส id : 0000: 03: 00.0)
Yaroslav Bulatov

2
มีlog_device_placementวิธีการในการตอบ วิธีที่น่าเชื่อถือที่สุดคือดูไทม์ไลน์ตามที่ระบุไว้ในความคิดเห็นนี้: github.com/tensorflow/tensorflow/issues/…
Yaroslav Bulatov

ใช่ฉันได้รับผลลัพธ์นี้ตามคำตอบของเหยาจาง ...
Tamim Addari

@YaroslavBulatov ในบันทึกอะไร มันเขียนไปยังไฟล์หรือฉันจะตรวจสอบว่าคำสั่งเช่นนั้นปรากฏขึ้นที่ไหน?
Charlie Parker

1
มันเขียนถึง stdout หรือ stderr
Yaroslav Bulatov

คำตอบ:


290

ไม่ฉันไม่คิดว่า "ไลบรารี CUDA เปิด" นั้นเพียงพอที่จะบอกได้เนื่องจากโหนดต่าง ๆ ของกราฟอาจอยู่ในอุปกรณ์ต่าง ๆ

ในการค้นหาว่ามีการใช้อุปกรณ์ใดคุณสามารถเปิดใช้งานการจัดวางอุปกรณ์บันทึกเช่นนี้:

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

ตรวจสอบคอนโซลของคุณสำหรับเอาต์พุตประเภทนี้


17
ฉันลองมันแล้วมันก็ไม่ได้พิมพ์อะไรเลย ความคิดใด ๆ ที่อาจจะเป็นเพราะเหตุใด
Qubix

8
คุณทำมันบนโน๊ตบุ๊ค jupyter หรือไม่?
Tamim Addari

27
ผลลัพธ์อาจถูกสร้างขึ้นบนคอนโซลจากจุดที่คุณรัน Jupyter Notebook
musically_ut

18
เราจะได้รับคำตอบที่ปรับปรุงแล้วสำหรับ Tensorflow V2 (ซึ่งไม่รองรับ tf.Sessions)
iyop45

6
@ iyop45 สำหรับ tensorflow V2 คำสั่งถูกแก้ไขเล็กน้อย:sess = tf.compat.v1.Session(config=tf.compat.v1.ConfigProto(log_device_placement=True))
Vandan

276

นอกเหนือจากการใช้sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))ซึ่งระบุไว้ในคำตอบอื่น ๆ เช่นเดียวกับในเอกสาร TensorFlow อย่างเป็นทางการคุณสามารถลองกำหนดการคำนวณให้กับ 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': ไม่สามารถตอบสนองข้อกำหนดอุปกรณ์ที่ชัดเจน '/ อุปกรณ์: 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)

17
ผลลัพธ์: [[22. 28. ] [49. 64. ]]
George Pligoropoulos

6
@ GeorgePligor ผลลัพธ์ไม่ได้สำคัญนักที่นี่ ไม่ว่าคุณจะมีผลและใช้ GPU หรือคุณมีข้อผิดพลาดซึ่งหมายความว่ามันไม่ได้ใช้
Salvador Dali

1
สิ่งนี้ไม่ได้ผลสำหรับฉัน ฉันวิ่งไปด้านในของ Docker Container ของฉันซึ่ง exectued โดย nvidia-docker และ etcetc อย่างไรก็ตามฉันไม่ได้รับข้อผิดพลาดและ CPU เป็นสิ่งที่ทำงานได้ ฉันเพิ่มเมทริกซ์นิดหน่อย (10k * 10k) เพื่อให้แน่ใจว่ามันคำนวณได้สักพัก ซีพียูใช้ประโยชน์มากถึง 100% แต่ GPU ก็ยังคงเจ๋งเหมือนเดิม
pascalwhoop

ฉันได้รับข้อผิดพลาด "ไม่มีอุปกรณ์ที่ตรงกัน" เมื่อเรียกใช้ในคอนโซล ใน IDE เช่น pycharm ไม่มีข้อผิดพลาด ฉันเดาว่ามันเกี่ยวข้องกับเซสชันที่ฉันใช้ซึ่งมีความแตกต่างในคอนโซล
cn123h

เข้าใจง่าย หากมี GPU มันจะพิมพ์บางอย่างเช่นFound device 0 with properties: name: GeForce GTX 1080 Ti major: 6 minor: 1 memoryClockRate(GHz): 1.582 pciBusID: 0000:02:00.0 totalMemory: 10.92GiB freeMemory: 10.76GiB
Leoli

166

ส่วนต่อไปนี้ของรหัสควรให้อุปกรณ์ทั้งหมดที่มีให้กับเทนเซอร์โฟลว์

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

ตัวอย่างผลลัพธ์

[ชื่อ: "/ cpu: 0" อุปกรณ์ _type: "CPU" memory_limit: 268435456 ท้องที่ {} ชาติ: 4402277519343535404096,

ชื่อ: "/ 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"


9
นี่คือคำตอบที่ดีที่สุด
lolski

3
และหากคำสั่งนี้ไม่ส่งคืนรายการใด ๆ ด้วย "GPU" หมายความว่าเครื่องของฉันมี GPU อยู่หรือไม่สามารถหาค่าเทนเซอร์โฟลว์ได้?
mercury0114

@ mercury0114 มันอาจเป็นได้ทั้ง ตัวอย่างเช่นคุณอาจมี GPU แต่ไม่ได้ติดตั้ง tensorflow-gpu อย่างถูกต้อง
jimijazz

4
ผมไม่เห็นด้วยนี้ไม่ได้ตอบคำถาม: มันไม่ได้เกี่ยวกับอุปกรณ์ที่มีอยู่แต่ใหัใช้ และนั่นอาจเป็นเรื่องที่แตกต่างอย่างสิ้นเชิง! (เช่น TF จะใช้ 1 GPU เป็นค่าเริ่มต้นเท่านั้น
Mayou36

ชื่อ: "/ อุปกรณ์: GPU: 0" device_type: "GPU" memory_limit: 10711446324 ท้องที่ {bus_id: 1 ลิงก์ {}} ชาติ: 17935632445266485019 physical_device_desc: "อุปกรณ์: 0, ชื่อ: GeForce RTX 2080 Ti, pci บัส id: 0000: 01: 00.0, ความสามารถในการคำนวณ: 7.5 "]
kamran kausar

89

ฉันคิดว่ามีวิธีที่ง่ายกว่าในการบรรลุเป้าหมายนี้

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

ดูเหมือนว่าฉันจะง่ายกว่าบันทึก verbose เหล่านั้น


ตกลง ง่ายกว่าวิธีที่อธิบายข้างต้น พิมพ์รายการ GPUs ที่ใช้ ขอบคุณ
user907629

2
สุดยอดที่สุดของทั้งหมด
echan00

นี่ไม่ใช่การทดสอบที่ถูกต้อง มันจะกลับสู่คำสั่ง else แม้ว่าคุณจะติดตั้ง tensorflow เวอร์ชั่น GPU แล้วก็ตาม
ก็อดดาร์ด

68

Tensorflow 2.0

เซสชั่นจะไม่ใช้ใน 2.0 อีกต่อไป แต่สามารถใช้tf.test.is_gpu_available:

import tensorflow as tf

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

หากคุณได้รับข้อผิดพลาดคุณต้องตรวจสอบการติดตั้งของคุณ


มันยังใช้ได้กับ TF 1.14 (อาจเป็นเวอร์ชั่นที่เก่ากว่า)!
Overdrivr

6
ขอแนะนำให้ทำตอนนี้tf.config.list_physical_devices('GPU')
Roy Shilkrot

@Roy Shilkrot ฉันคิดว่า 'tf.config.list_physical_devices (' GPU ')' ไม่ทำงานใน Tensorflow 2.0
joselquin

1
@joselquin เอกสาร TF v2.x ระบุว่าควรใช้งานได้: tensorflow.org/api_docs/python/tf/config/experimental/ …และฉันสามารถตรวจสอบได้ว่ามันทำงานได้ไหมสำหรับฉัน
Roy Shilkrot

29

สิ่งนี้จะเป็นการยืนยันว่าการใช้เทนเซอร์ใน 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

5
โปรดเพิ่มคำอธิบายเล็กน้อยว่าทำไมคำตอบของคุณถึงใช้งานได้ (สิ่งที่log_device_placementต้องทำและวิธีดู CPU เทียบกับ GPU ในผลลัพธ์) นั่นจะปรับปรุงคุณภาพของคำตอบของคุณ!
Nander Speerstra

25

นอกเหนือจากคำตอบอื่น ๆ แล้วต่อไปนี้จะช่วยให้คุณมั่นใจได้ว่าเวอร์ชันของ tenorflow ของคุณมีการรองรับ GPU

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

7
คำเตือน: นั่นจะบอกคุณว่า TensorFlow ถูกคอมไพล์ด้วย GPU หรือไม่ ไม่ว่าจะใช้ GPU หรือไม่ (หากติดตั้งไดรเวอร์ไม่ถูกต้องเช่นนั้นจะใช้ CPU แม้ว่า "is_built_with_cuda ()" จะเป็นจริง)
Ricardo Cruz

19

ตกลงเริ่มipython shellจากเทอร์มินัลและimportTensorFlow ก่อน:

$ 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

ตอนนี้เราสามารถดูการใช้หน่วยความจำ GPU ในคอนโซลโดยใช้คำสั่งต่อไปนี้:

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

เนื่องจากเราเพิ่งimportเปิดตัว TensorFlow แต่ยังไม่ได้ใช้ GPU เลยสถิติการใช้งานจะเป็น:

tf การใช้งานที่ไม่ใช่ gpu

สังเกตว่าการใช้หน่วยความจำ GPU น้อยมาก (~ 700MB); บางครั้งการใช้หน่วยความจำ GPU อาจต่ำถึง 0 MB


ทีนี้มาโหลด GPU ในโค้ดของเรากัน ตามที่ระบุไว้ในtf documentation:

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

ตอนนี้สถิติการดูควรแสดงหน่วยความจำการใช้ GPU ที่อัปเดตแล้วดังต่อไปนี้:

tf gpu-watch

สังเกตได้ว่ากระบวนการ Python ของเราจากเปลือก ipython ใช้หน่วยความจำ GPU ของหน่วยความจำประมาณ ~ 7 GB อย่างไร


ป.ล. คุณสามารถดูสถิติเหล่านี้ต่อไปขณะที่รหัสกำลังทำงานเพื่อดูว่าการใช้ GPU มีความเข้มข้นมากเพียงใดเมื่อเวลาผ่านไป


1
ฉันหวังว่าฉันจะตอบดาวได้ อันนี้เป็นทองคำ
Zain Rizvi

18

สิ่งนี้จะให้รายการของอุปกรณ์ที่พร้อมใช้งานสำหรับ Tensorflow (ภายใต้ Py-3.6):

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)

ผู้ชายฉัน downvote คำถามของคุณโดยไม่ได้ตั้งใจ ... ถ้าคุณแก้ไขคำถามของคุณฉันจะยกเลิก downvote ของฉัน
ฟรานเชสโก Boi

14

ฉันชอบใช้ nvidia-smi เพื่อตรวจสอบการใช้ GPU ถ้ามันเพิ่มขึ้นอย่างมีนัยสำคัญเมื่อคุณเริ่มโปรแกรมของคุณมันเป็นสัญญาณที่ดีที่ว่าเมตริกซ์ของคุณกำลังใช้ GPU


นี่เป็นวิธีทางอ้อม
papabiceps

คุณใช้ nvdia-smi เพื่อตรวจสอบการใช้ GPU อย่างไร
Razin

หลังจากที่คุณติดตั้ง cuda nvidia-smi ควรอยู่ในระบบของคุณ ฉันมักจะใช้ 'nvidia-smi -l' เพื่อตรวจสอบการใช้งาน
กอ

3
คุณยังสามารถใช้ watch nvidia-smi อัปเดตหน้าจอทุก 2 วินาที
Perseus14

ดู nvidia-smi ทำงานได้ดีสำหรับฉัน ฉันสามารถเห็นผลลัพธ์ที่กระบวนการของหลามใช้ GPU
formica

9

ด้วยการอัปเดตล่าสุดของ Tensorflow คุณสามารถตรวจสอบได้ดังต่อไปนี้:

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

สิ่งนี้จะส่งคืนTrueหากมีการใช้ GPU โดยTensorflowและจะส่งคืนเป็นFalseอย่างอื่น

หากคุณต้องการอุปกรณ์ที่คุณสามารถพิมพ์:device_name tf.test.gpu_device_name()รับรายละเอียดเพิ่มเติมจากที่นี่


8

รันสิ่งต่อไปนี้ใน Jupyter

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

หากคุณได้ตั้งค่าสภาพแวดล้อมของคุณอย่างถูกต้องคุณจะได้รับต่อไปนี้การส่งออกใน terminal ที่คุณวิ่ง "jupyter โน๊ตบุ๊ค" ,

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

คุณสามารถดูได้ที่นี่ฉันใช้ TensorFlow กับ Nvidia Quodro K620


Jupyter ไม่จำเป็นเลยโปรดอย่าเพิ่มความซับซ้อนให้กับคำถาม
Patrizio Bertoni

1
ผู้ใช้บางคนอาจต้องการให้ GPU ใช้งานได้ใน Jupyter นอกจากนี้สามารถเรียกใช้จากสคริปต์ Python
wafflecat

8

ฉันพบว่าการสืบค้น 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 |
+-----------------------------------------------------------------------------+

หากการเรียนรู้ของคุณเป็นกระบวนการพื้นหลัง pid จาก jobs -pควรตรงกับ pid จากnvidia-smi


6

คุณสามารถตรวจสอบว่าคุณใช้ 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()

หากผลลัพธ์คือ' 'สิ่งที่เราควรทำอย่างไร
เจสัน

@ Jason เพียงแค่ติดตั้งรุ่น GPU
Hu Xixi

6

วางสิ่งนี้ไว้ใกล้ด้านบนสุดของสมุดบันทึก jupyter ของคุณ แสดงความคิดเห็นในสิ่งที่คุณไม่ต้องการ

# confirm TensorFlow sees the GPU
from tensorflow.python.client import device_lib
assert 'GPU' in str(device_lib.list_local_devices())

# confirm Keras sees the GPU (for TensorFlow 1.X + Keras)
from keras import backend
assert len(backend.tensorflow_backend._get_available_gpus()) > 0

# confirm PyTorch sees the GPU
from torch import cuda
assert cuda.is_available()
assert cuda.device_count() > 0
print(cuda.get_device_name(cuda.current_device()))

บันทึก:ด้วยการเปิดตัว TensorFlow 2.0 ตอนนี้ Keras จะรวมอยู่ในส่วนหนึ่งของ TF API

แต่เดิม answerwed ที่นี่


5

สำหรับ Tensorflow 2.0

import tensorflow as tf

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

แหล่งที่มาที่นี่

ตัวเลือกอื่น ๆ คือ:

tf.config.experimental.list_physical_devices('GPU')

1
is_gpu_available(จาก tensorflow.python.framework.test_util) เลิกใช้แล้วและจะถูกลบในรุ่นอนาคต
Himanshu Teotia

5

อัปเดตสำหรับ TENSORFLOW> = 2.1

วิธีที่แนะนำในการตรวจสอบว่า TensorFlow ใช้ GPU อยู่หรือไม่:

tf.config.list_physical_devices('GPU') 

ในฐานะของ TensorFlow 2.1 tf.test.gpu_device_name()ได้รับการปฏิเสธในความโปรดปรานของดังกล่าวข้างต้น


3

นี่คือบรรทัดที่ฉันใช้เพื่อแสดงรายการอุปกรณ์ที่สามารถใช้ได้tf.sessionโดยตรงจาก bash:

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

3

ฉันพบข้อมูลตัวอย่างด้านล่างมีประโยชน์มากในการทดสอบ gpu ..

การทดสอบ Tensorflow 2.0

import tensorflow as tf
import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()
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))

การทดสอบแรงดึง 1

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))

3

ต่อไปนี้จะคืนชื่ออุปกรณ์ GPU ของคุณด้วย

import tensorflow as tf
tf.test.gpu_device_name()

หากเอาต์พุตของคำสั่งนี้เป็นสตริงว่าง ... ฉันจะดีบักอย่างไร?
zthomas.nc


3
>>> import tensorflow as tf 
>>> tf.config.list_physical_devices('GPU')

2020-05-10 14:58:16.243814: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcuda.so.1
2020-05-10 14:58:16.262675: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:981] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2020-05-10 14:58:16.263119: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1555] Found device 0 with properties:
pciBusID: 0000:01:00.0 name: GeForce GTX 1060 6GB computeCapability: 6.1
coreClock: 1.7715GHz coreCount: 10 deviceMemorySize: 5.93GiB deviceMemoryBandwidth: 178.99GiB/s
2020-05-10 14:58:16.263143: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcudart.so.10.1
2020-05-10 14:58:16.263188: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcublas.so.10
2020-05-10 14:58:16.264289: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcufft.so.10
2020-05-10 14:58:16.264495: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcurand.so.10
2020-05-10 14:58:16.265644: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcusolver.so.10
2020-05-10 14:58:16.266329: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcusparse.so.10
2020-05-10 14:58:16.266357: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcudnn.so.7
2020-05-10 14:58:16.266478: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:981] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2020-05-10 14:58:16.266823: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:981] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2020-05-10 14:58:16.267107: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1697] Adding visible gpu devices: 0
[PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU')]

ตามที่แนะนำโดย @AmitaiIrron:

ส่วนนี้ระบุว่าพบ GPU

2020-05-10 14:58:16.263119: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1555] Found device 0 with properties:

pciBusID: 0000:01:00.0 name: GeForce GTX 1060 6GB computeCapability: 6.1
coreClock: 1.7715GHz coreCount: 10 deviceMemorySize: 5.93GiB deviceMemoryBandwidth: 178.99GiB/s

และที่นี่มันได้รับการเพิ่มเป็นอุปกรณ์ทางกายภาพที่มีอยู่

2020-05-10 14:58:16.267107: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1697] Adding visible gpu devices: 0

[PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU')]

มันจะมีประโยชน์ถ้าคุณชี้ไปที่ส่วนในผลลัพธ์ที่ระบุว่าใช้ GPU หรือไม่
Amitai Irron

@AmtaiIrron ขอบคุณสำหรับคำแนะนำฉันหวังว่ามันจะชัดเจนขึ้นในตอนนี้
bLeDy

2

คุณมีตัวเลือกบางอย่างเพื่อทดสอบว่ามีการใช้การเร่งความเร็วของ GPU ในการติดตั้ง TensorFlow ของคุณหรือไม่

คุณสามารถพิมพ์คำสั่งต่อไปนี้ในสามแพลตฟอร์มที่แตกต่างกัน

import tensorflow as tf
sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
  1. Jupyter Notebook - ตรวจสอบคอนโซลที่ใช้งาน Jupyter Notebook คุณจะสามารถเห็นการใช้ GPU
  2. Python Shell - คุณจะสามารถเห็นผลลัพธ์โดยตรง (หมายเหตุ - อย่ากำหนดเอาต์พุตของคำสั่งที่สองให้กับตัวแปร 'sess' หากมีประโยชน์)
  3. Spyder - พิมพ์คำสั่งต่อไปนี้ในคอนโซล

    import tensorflow as tf tf.test.is_gpu_available()


2

Tensorflow 2.1

การคำนวณอย่างง่ายที่สามารถตรวจสอบได้ด้วย nvidia-smi สำหรับการใช้งานหน่วยความจำบน GPU

import tensorflow as tf 

c1 = []
n = 10

def matpow(M, n):
    if n < 1: #Abstract cases where n < 1
        return M
    else:
        return tf.matmul(M, matpow(M, n-1))

with tf.device('/gpu:0'):
    a = tf.Variable(tf.random.uniform(shape=(10000, 10000)), name="a")
    b = tf.Variable(tf.random.uniform(shape=(10000, 10000)), name="b")
    c1.append(matpow(a, n))
    c1.append(matpow(b, n))

1

หากคุณใช้ TensorFlow 2.0 คุณสามารถใช้สิ่งนี้เป็นลูปเพื่อแสดงอุปกรณ์:

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

1

หากคุณกำลังใช้ tensorflow 2.x ให้ใช้:

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.