การเรียกใช้กระบวนการเทนเซอร์โฟลว์หลายกระบวนการบน GPU เดียวกันไม่ปลอดภัยหรือไม่

ฉันมี GPU เพียงตัวเดียว (Titan X Pascal, 12 GB VRAM) และฉันต้องการฝึกหลายรุ่นพร้อมกันบน GPU ตัวเดียวกัน

ฉันพยายามห่อหุ้มโมเดลของฉันในโปรแกรมหลามตัวเดียว (เรียกว่า model.py) และฉันรวมโค้ดใน model.py เพื่อจำกัดการใช้งาน VRAM (ตาม ตัวอย่างนี้) ฉันสามารถเรียกใช้ model.py ได้สูงสุด 3 อินสแตนซ์พร้อมกันบน GPU ของฉัน (โดยแต่ละอินสแตนซ์ใช้ VRAM ของฉันน้อยกว่า 33% เล็กน้อย) น่าแปลกที่เมื่อฉันลองกับ 4 รุ่น ฉันได้รับข้อผิดพลาด:

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)

ต่อมาฉันสังเกตเห็น บน tensorflow Github ว่าผู้คนคิดว่าไม่ปลอดภัยที่จะมีมากกว่านี้ มีกระบวนการเทนเซอร์โฟลว์มากกว่าหนึ่งกระบวนการที่ทำงานต่อ GPU นี่เป็นเรื่องจริงหรือไม่ และมีคำอธิบายว่าทำไมถึงเป็นเช่นนั้น? เหตุใดฉันจึงสามารถมีกระบวนการเทนเซอร์โฟลว์ 3 กระบวนการที่ทำงานบน GPU เดียวกันและไม่ใช่ 4 กระบวนการ


person Adamo    schedule 10.09.2017    source แหล่งที่มา
comment
นี่ไม่ใช่กรณีที่ TensorFlow ได้รับการปรับให้เหมาะสม IE การทดสอบและการใช้งานทั้งหมดใน Google ทำได้โดยใช้กระบวนการ TensorFlow เดียวต่อ GPU ซึ่งทำให้มีแนวโน้มว่าจะมีจุดบกพร่องในสถานการณ์นี้ แม้ว่าคุณจะทำให้มันรันได้ แต่ฉันคาดหวังว่ามันจะต้องเสียค่าปรับอย่างมาก กล่าวคือ การรันโปรเซส 2 TF ขนานกันบน GPU เดี่ยวจะช้ากว่าการรันตามลำดับอย่างมาก   -  person Yaroslav Bulatov    schedule 10.09.2017
comment
น่าแปลกที่เรื่องนี้ไม่เป็นเช่นนั้น (อย่างน้อยก็ในการทดลองที่ฉันได้ทำ) ตัวอย่างเช่น ในกรณีของ 3 กระบวนการ แต่ละกระบวนการใช้เวลานานกว่าประมาณ 11% เมื่อเทียบกับกระบวนการเดียวที่มีการใช้งาน VRAM เหมือนกัน   -  person Adamo    schedule 10.09.2017
comment
ฉันเข้าใจ ฉันสงสัยว่า GPU ไม่ใช่คอขวดในสถานการณ์เช่นนี้ (เช่น การใช้งาน GPU ต่ำ)   -  person Yaroslav Bulatov    schedule 10.09.2017
comment
เหตุใดฉันจึงสามารถมีกระบวนการเทนเซอร์โฟลว์ 3 กระบวนการที่ทำงานบน GPU เดียวกันและไม่ใช่ 4 กระบวนการ คุณบอกตัวเองว่าแต่ละอินสแตนซ์ใช้หน่วยความจำ GPU น้อยกว่า 33% เล็กน้อย ดูเหมือนว่าหน่วยความจำวิดีโอของคุณกำลังจะหมดด้วย 4 กระบวนการ (ฉันพบข้อผิดพลาดที่คล้ายกันเนื่องจากหน่วยความจำเหลือน้อย)   -  person jdehesa    schedule 11.09.2017
comment
จริงๆ แล้ว TF จะทำงานได้ดีในหลายอินสแตนซ์บนอุปกรณ์เดียวกัน (แน่นอนว่าตราบเท่าที่มีทรัพยากรเหลืออยู่) สิ่งเดียวที่คุณอาจต้องการดูแลคือการตั้งค่า gpu_options.allow_growth=True เพื่อป้องกันไม่ให้ TF จัดสรร RAM ส่วนใหญ่ของ GPU ของคุณตามค่าเริ่มต้นเมื่อคุณสร้างเซสชัน   -  person GPhilo    schedule 11.09.2017
comment
@jdehesa ฉันปรับการใช้หน่วยความจำให้น้อยกว่า 25% (ต่อกระบวนการ) เล็กน้อยเมื่อฉันลองด้วย 4 ฉันไม่คิดว่ามันเป็นข้อผิดพลาดของหน่วยความจำ ฉันเคยได้รับมาก่อนแล้วและพวกเขาระบุอย่างชัดเจนว่าหน่วยความจำไม่สามารถเป็นได้ ได้รับการจัดสรร ขออภัยสำหรับความสับสนในโพสต์ต้นฉบับของฉัน ฉันหวังว่าสิ่งนี้จะกระจ่างขึ้น   -  person Adamo    schedule 11.09.2017
comment
@GPhilo ฉันไม่ต้องการให้มีหน่วยความจำเพิ่มขึ้นเนื่องจากอาจทำให้กระบวนการทำงานช้าลงในบางกรณี ฉันอยากจะจัดสรรหน่วยความจำในบล็อกที่กำหนดไว้ล่วงหน้าเมื่อฉันรันกระบวนการ คุณมีข้อมูลอ้างอิง/ลิงก์ที่อธิบายว่าการเรียกใช้กระบวนการเทนเซอร์โฟลว์หลายรายการบน GPU เดียวกันนั้นปลอดภัยหรือไม่ ฉันไม่พบข้อมูลอย่างเป็นทางการที่ชี้ไปทางใดทางหนึ่ง   -  person Adamo    schedule 11.09.2017
comment
@Adamo คุณได้ตรวจสอบแล้วว่ามีอย่างอื่นที่ใช้หน่วยความจำ GPU ด้วยหรือไม่? ตัวอย่างเช่น Xorg? สมมติว่าคุณใช้ NVIDIA คุณสามารถใช้ nvidia-smi เพื่อตรวจสอบได้ หากมี การจัดสรรหน่วยความจำของคุณอาจรุนแรงเกินไป   -  person Joshua Chia    schedule 30.11.2018
comment
ฉันตรวจสอบแล้ว ไม่มีสิ่งใดใช้หน่วยความจำ GPU เลย   -  person Adamo    schedule 25.05.2020


คำตอบ (2)


กล่าวโดยย่อ: ใช่ การรันหลาย procceses บน GPU เดียวกันนั้นปลอดภัย (ณ เดือนพฤษภาคม 2560) ก่อนหน้านี้มันไม่ปลอดภัยที่จะทำเช่นนั้น

ลิงก์ไปยังซอร์สโค้ด tensorflow ที่ยืนยันสิ่งนี้

person Adamo    schedule 16.10.2017
comment
ในความเป็นจริงมันไม่ปลอดภัยอย่างแน่นอน ดูคำตอบของฉัน - person FindOutIslamNow; 28.08.2018

ตอบ

ขึ้นอยู่กับขนาดหน่วยความจำวิดีโอว่าจะอนุญาตหรือไม่

สำหรับกรณีของฉัน ฉันมีหน่วยความจำวิดีโอทั้งหมด 2GB ในขณะที่อินสแตนซ์เดี่ยวสงวนไว้ประมาณ 1.4GB เมื่อฉันพยายามเรียกใช้โค้ด tensorflow อื่นในขณะที่ฉันกำลังเรียกใช้การฝึกอบรมการรู้จำคำพูด .

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)

ฉันได้รับข้อผิดพลาดต่อไปนี้ในการรู้จำเสียง ซึ่งทำให้สคริปต์สิ้นสุดลงโดยสมบูรณ์: (ฉันคิดว่าตาม กับสิ่งนี้ เกี่ยวข้องกับหน่วยความจำวิดีโอไม่เพียงพอ)

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
โปรแกรมของคุณล้มเหลวเพียงเพราะหน่วยความจำ GPU หมดใช่หรือไม่ หากเป็นเช่นนั้น นั่นไม่ใช่คำถามเดิม ในบริบทของคำถามเดิม โปรแกรมต่างๆ สามารถทำงานได้โดยใช้หน่วยความจำ GPU ที่ถูกจำกัดแยกกันอยู่แล้ว และผลรวมของการจัดสรรทั้งหมดจะน้อยกว่า 100% - person Joshua Chia; 30.11.2018