Apakah tidak aman menjalankan beberapa proses tensorflow pada GPU yang sama?

Saya hanya memiliki satu GPU (Titan X Pascal, VRAM 12 GB) dan saya ingin melatih beberapa model, secara paralel, pada GPU yang sama.

Saya mencoba merangkum model saya dalam satu program python (disebut model.py), dan saya menyertakan kode di model.py untuk membatasi penggunaan VRAM (berdasarkan contoh ini). Saya dapat menjalankan hingga 3 instance model.py secara bersamaan di GPU saya (dengan setiap instance memerlukan kurang dari 33% VRAM saya). Secara misterius, ketika saya mencoba dengan 4 model saya menerima kesalahan:

2017-09-10 13:27:43.714908: E tensorflow/stream_executor/cuda/cuda_dnn.cc:371] coul d not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR 2017-09-10 13:27:43.714973: E tensorflow/stream_executor/cuda/cuda_dnn.cc:338] coul d not destroy cudnn handle: CUDNN_STATUS_BAD_PARAM 2017-09-10 13:27:43.714988: F tensorflow/core/kernels/conv_ops.cc:672] Check failed : stream->parent()->GetConvolveAlgorithms( conv_parameters.ShouldIncludeWinogradNon fusedAlgo<T>(), &algorithms) Aborted (core dumped)

Saya kemudian mengamati di tensorflow Github bahwa orang-orang tampaknya menganggap tidak aman untuk memiliki lebih banyak dari satu proses tensorflow yang berjalan per GPU. Apakah ini benar dan apakah ada penjelasan mengapa hal ini terjadi? Mengapa saya bisa menjalankan 3 proses tensorflow pada GPU yang sama dan bukan 4?


person Adamo    schedule 10.09.2017    source sumber
comment
TensorFlow tidak dioptimalkan untuk hal ini. Yaitu, semua pengujian dan penggunaan di Google dilakukan dengan hanya memiliki satu proses TensorFlow per GPU. Hal ini memungkinkan adanya bug dalam skenario ini. Bahkan jika Anda menjalankannya, saya perkirakan akan ada penalti biaya yang signifikan -- misalnya, menjalankan 2 proses TF secara paralel pada satu GPU akan jauh lebih lambat dibandingkan menjalankannya secara berurutan   -  person Yaroslav Bulatov    schedule 10.09.2017
comment
Anehnya hal ini tidak terjadi (setidaknya dalam percobaan yang saya jalankan). Misalnya, dalam kasus 3 proses, setiap proses memakan waktu ~11% lebih lama dibandingkan dengan satu proses dengan penggunaan VRAM yang sama.   -  person Adamo    schedule 10.09.2017
comment
Begitu ya, saya curiga GPU bukanlah penghambat dalam situasi seperti ini (yaitu, penggunaan GPU rendah)   -  person Yaroslav Bulatov    schedule 10.09.2017
comment
Mengapa saya bisa menjalankan 3 proses tensorflow pada GPU yang sama dan bukan 4? Anda sendiri yang mengatakan bahwa setiap instance memerlukan kurang dari 33% memori GPU; sepertinya Anda baru saja kehabisan memori video dengan 4 proses (saya sendiri pernah melihat kesalahan serupa karena memori rendah).   -  person jdehesa    schedule 11.09.2017
comment
Sebenarnya, TF akan berjalan dengan baik dalam beberapa kasus di perangkat yang sama (tentu saja, selama sumber daya tersedia). Satu-satunya hal yang mungkin ingin Anda perhatikan adalah menyetel gpu_options.allow_growth=True untuk mencegah pengalokasian TF sebagian besar RAM GPU Anda secara default saat Anda membuat Sesi   -  person GPhilo    schedule 11.09.2017
comment
@jdehesa Saya menyesuaikan penggunaan memori menjadi kurang dari 25% (per proses) ketika saya mencoba dengan 4. Menurut saya ini bukan kesalahan memori, saya sudah mendapatkannya sebelumnya dan mereka secara eksplisit menyatakan bahwa memori tidak dapat dialokasikan. Maaf atas kebingungan dalam posting asli saya, saya harap ini menjelaskan semuanya.   -  person Adamo    schedule 11.09.2017
comment
@GPhilo Saya tidak ingin mengizinkan pertumbuhan memori, karena hal ini dapat membuat proses berjalan lebih lambat dalam beberapa kasus. Saya lebih suka mengalokasikan memori di blok yang telah ditentukan ketika saya menjalankan proses saya. Apakah Anda memiliki kutipan/tautan yang menjelaskan bahwa menjalankan beberapa proses tensorflow pada GPU yang sama aman? Saya tidak dapat menemukan informasi resmi apa pun yang menunjukkan satu atau lain hal.   -  person Adamo    schedule 11.09.2017
comment
@Adamo Sudahkah Anda memeriksa apakah ada hal lain yang juga menggunakan memori GPU? Misalnya, Xorg? Dengan asumsi Anda menggunakan nvidia, Anda dapat menggunakan nvidia-smi untuk memeriksanya. Jika ada, alokasi memori Anda mungkin terlalu agresif.   -  person Joshua Chia    schedule 30.11.2018
comment
Saya sudah memeriksanya, tidak ada lagi yang menggunakan memori GPU.   -  person Adamo    schedule 25.05.2020


Jawaban (2)


Singkatnya: ya, aman untuk menjalankan banyak proses pada GPU yang sama (per Mei 2017). Sebelumnya tidak aman untuk melakukan hal tersebut.

Tautan ke kode sumber tensorflow yang mengonfirmasi hal ini

person Adamo    schedule 16.10.2017
comment
Faktanya, hal ini tidak sepenuhnya aman. Lihat jawaban saya - person FindOutIslamNow; 28.08.2018

Jawab

Tergantung pada ukuran memori video, itu akan diizinkan atau tidak.

Untuk kasus saya, saya memiliki total memori video sebesar 2 GB sedangkan satu instance memiliki cadangan sekitar 1,4 GB. Ketika saya mencoba menjalankan kode tensorflow lain saat saya sedang menjalankan pelatihan pengenalan suara .

2018-08-28 08:52:51.279676: I T:\src\github\tensorflow\tensorflow\core\common_runtime\gpu\gpu_device.cc:1405] Found device 0 with properties:
name: GeForce 940MX major: 5 minor: 0 memoryClockRate(GHz): 1.2415
pciBusID: 0000:01:00.0
totalMemory: 2.00GiB freeMemory: 1.65GiB
2018-08-28 08:52:51.294948: I T:\src\github\tensorflow\tensorflow\core\common_runtime\gpu\gpu_device.cc:1484] Adding visible gpu devices: 0
2018-08-28 08:52:55.643813: I T:\src\github\tensorflow\tensorflow\core\common_runtime\gpu\gpu_device.cc:965] Device interconnect StreamExecutor with strength 1 edge matrix:
2018-08-28 08:52:55.647912: I T:\src\github\tensorflow\tensorflow\core\common_runtime\gpu\gpu_device.cc:971]      0
2018-08-28 08:52:55.651054: I T:\src\github\tensorflow\tensorflow\core\common_runtime\gpu\gpu_device.cc:984] 0:   N
2018-08-28 08:52:55.656853: I T:\src\github\tensorflow\tensorflow\core\common_runtime\gpu\gpu_device.cc:1097] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 1409 MB memory) -> physical GPU (device: 0, name: GeForce 940MX, pci bus id: 0000:01:00.0, compute
capability: 5.0)

Saya mendapatkan kesalahan berikut dalam pengenalan ucapan, yang menghentikan skrip sepenuhnya: (Saya pikir menurut untuk ini terkait dengan kehabisan memori video)

2018-08-28 08:53:05.154711: E T:\src\github\tensorflow\tensorflow\stream_executor\cuda\cuda_driver.cc:1108] could not synchronize on CUDA context: CUDA_ERROR_LAUNCH_FAILED ::
Traceback (most recent call last):
  File "C:\Python35\lib\site-packages\tensorflow\python\client\session.py", line 1278, in _do_call
    return fn(*args)
  File "C:\Python35\lib\site-packages\tensorflow\python\client\session.py", line 1263, in _run_fn
    options, feed_dict, fetch_list, target_list, run_metadata)
  File "C:\Python35\lib\site-packages\tensorflow\python\client\session.py", line 1350, in _call_tf_sessionrun
    run_metadata)
tensorflow.python.framework.errors_impl.InternalError: GPU sync failed
person FindOutIslamNow    schedule 28.08.2018
comment
Apakah program Anda gagal hanya karena kehabisan memori GPU? Jika demikian, pertanyaan aslinya bukan tentang itu. Dalam konteks pertanyaan awal, program sudah dapat berjalan dengan memori GPU yang dibatasi secara individual dan jumlah alokasi total kurang dari 100%. - person Joshua Chia; 30.11.2018