Saya punya rencana untuk menggunakan TensorFlow yang didistribusikan, dan saya melihat TensorFlow dapat menggunakan GPU untuk pelatihan dan pengujian. Dalam lingkungan cluster, setiap mesin dapat memiliki 0 atau 1 atau lebih GPU, dan saya ingin menjalankan grafik TensorFlow saya ke dalam GPU pada sebanyak mungkin mesin.
Saya menemukan bahwa ketika menjalankan tf.Session()
TensorFlow memberikan informasi tentang GPU dalam pesan log seperti di bawah ini:
I tensorflow/core/common_runtime/gpu/gpu_init.cc:126] DMA: 0
I tensorflow/core/common_runtime/gpu/gpu_init.cc:136] 0: Y
I tensorflow/core/common_runtime/gpu/gpu_device.cc:838] Creating TensorFlow device (/gpu:0) -> (device: 0, name: GeForce GTX 1080, pci bus id: 0000:01:00.0)
Pertanyaan saya adalah bagaimana cara mendapatkan informasi tentang GPU yang tersedia saat ini dari TensorFlow? Saya dapat memperoleh informasi GPU yang dimuat dari log, tetapi saya ingin melakukannya dengan cara yang lebih canggih dan terprogram. Saya juga dapat membatasi GPU dengan sengaja menggunakan variabel lingkungan CUDA_VISIBLE_DEVICES, jadi saya tidak ingin tahu cara mendapatkan informasi GPU dari kernel OS.
Singkatnya, saya ingin fungsi seperti tf.get_available_gpus()
itu akan kembali ['/gpu:0', '/gpu:1']
jika ada dua GPU yang tersedia di mesin. Bagaimana saya bisa menerapkan ini?
sumber
Free memory
untuk saya, menggunakantensorflow1.1
. Dengan pythonfrom tensorflow.python.client import device_lib
device_lib.list_local_devices()
Anda dapat memeriksa semua daftar perangkat menggunakan kode berikut:
sumber
python3 -c "from tensorflow.python.client import device_lib; print(device_lib.list_local_devices())"
cannot import name 'format_exc' from 'traceback'
Ada juga metode dalam util tes . Jadi yang harus dilakukan adalah:
dan / atau
Lihatlah dokumen Tensorflow untuk argumen.
sumber
tf.test.is_gpu_available()
akan kembaliTrue
Di TensorFlow 2.0, Anda dapat menggunakan
tf.config.experimental.list_physical_devices('GPU')
:Jika Anda memiliki dua GPU yang diinstal, ini menghasilkan ini:
Dari 2.1, Anda dapat menjatuhkan
experimental
:Lihat:
sumber
'GPU'
ke'XLA_GPU'
.The diterima Jawaban memberikan jumlah GPU tetapi juga mengalokasikan semua memori pada orang-orang GPU. Anda dapat menghindari ini dengan membuat sesi dengan memori tetap rendah sebelum memanggil device_lib.list_local_devices () yang mungkin tidak diinginkan untuk beberapa aplikasi.
Saya akhirnya menggunakan nvidia-smi untuk mendapatkan jumlah GPU tanpa mengalokasikan memori apa pun pada mereka.
sumber
Terlepas dari penjelasan yang sangat baik oleh Mrry, di mana ia menyarankan untuk menggunakan,
device_lib.list_local_devices()
saya dapat menunjukkan kepada Anda bagaimana Anda dapat memeriksa informasi terkait GPU dari baris perintah.Karena saat ini hanya GPU Nvidia yang berfungsi untuk kerangka kerja NN, jawabannya hanya mencakup mereka. Nvidia memiliki halaman di mana mereka mendokumentasikan bagaimana Anda dapat menggunakan antarmuka sistem file / proc untuk mendapatkan informasi run-time tentang driver, kartu grafis NVIDIA yang diinstal, dan status AGP.
Jadi Anda dapat menjalankan ini dari baris perintah
cat /proc/driver/nvidia/gpus/0/information
dan melihat informasi tentang GPU pertama Anda. Sangat mudah untuk menjalankan ini dari python dan Anda juga dapat memeriksa GPU kedua, ketiga, keempat sampai gagal.Jelas jawaban Mrry lebih kuat dan saya tidak yakin apakah jawaban saya akan bekerja pada mesin non-linux, tetapi halaman Nvidia memberikan informasi menarik lainnya, yang tidak banyak orang ketahui.
sumber
Karya-karya berikut di tensorflow 2:
Dari 2.1, Anda dapat menjatuhkan
experimental
:https://www.tensorflow.org/api_docs/python/tf/config/list_physical_devices
sumber
Saya mendapat GPU yang dipanggil
NVIDIA GTX GeForce 1650 Ti
dengan mesin sayatensorflow-gpu==2.2.0
Jalankan dua baris kode berikut:
Keluaran:
sumber
Gunakan cara ini dan periksa semua bagian:
sumber
Pastikan Anda memiliki GPU TensorFlow 2.x terinstal di mesin pendukung GPU Anda, Jalankan kode berikut dalam python,
Akan mendapatkan output seperti,
sumber