작성
·
431
0
cpu사용량이 올라가다가 BlockingIOError: [Errno 11] Resource temporarily unavailable 가 발생합니다.GPU는 사용량은 없습니다. data augumentaion과정에서 발생하는 것 같습니다.
배치숫자를 1로 바꾸어서 해도 동일한 오류가 발생합니다. 어떤 이유일까요? 강의 도중에 augmenters가 무겁다고 하셨는데, 혹시 저기에 적용할만한 다른 img_aug를 추천해주실 수 있을까요?
감사합니다.
BlockingIOError Traceback (most recent call last) <ipython-input-38-ce418a61f9ea> in <module> 6 learning_rate=train_config.LEARNING_RATE, 7 epochs=40, augmentation=img_aug, ----> 8 layers='all') ~/.conda/envs/tf113/lib/python3.6/site-packages/mask_rcnn-2.1-py3.6.egg/mrcnn/model.py in train(self, train_dataset, val_dataset, learning_rate, epochs, layers, augmentation, custom_callbacks, no_augmentation_sources) 2372 max_queue_size=100, 2373 workers=workers, -> 2374 use_multiprocessing=True, 2375 ) 2376 self.epoch = max(self.epoch, epochs) ~/.conda/envs/tf113/lib/python3.6/site-packages/keras/legacy/interfaces.py in wrapper(*args, **kwargs) 89 warnings.warn('Update your `' + object_name + 90 '` call to the Keras 2 API: ' + signature, stacklevel=2) ---> 91 return func(*args, **kwargs) 92 wrapper._original_function = func 93 return wrapper ~/.conda/envs/tf113/lib/python3.6/site-packages/keras/engine/training.py in fit_generator(self, generator, steps_per_epoch, epochs, verbose, callbacks, validation_data, validation_steps, class_weight, max_queue_size, workers, use_multiprocessing, shuffle, initial_epoch) 1413 use_multiprocessing=use_multiprocessing, 1414 shuffle=shuffle, -> 1415 initial_epoch=initial_epoch) 1416 1417 @interfaces.legacy_generator_methods_support ~/.conda/envs/tf113/lib/python3.6/site-packages/keras/engine/training_generator.py in fit_generator(model, generator, steps_per_epoch, epochs, verbose, callbacks, validation_data, validation_steps, class_weight, max_queue_size, workers, use_multiprocessing, shuffle, initial_epoch) 157 use_multiprocessing=use_multiprocessing, 158 wait_time=wait_time) --> 159 enqueuer.start(workers=workers, max_queue_size=max_queue_size) 160 output_generator = enqueuer.get() 161 else: ~/.conda/envs/tf113/lib/python3.6/site-packages/keras/utils/data_utils.py in start(self, workers, max_queue_size) 724 thread = threading.Thread(target=self._data_generator_task) 725 self._threads.append(thread) --> 726 thread.start() 727 except: 728 self.stop() ~/.conda/envs/tf113/lib/python3.6/multiprocessing/process.py in start(self) 103 'daemonic processes are not allowed to have children' 104 _cleanup() --> 105 self._popen = self._Popen(self) 106 self._sentinel = self._popen.sentinel 107 # Avoid a refcycle if the target function holds an indirect ~/.conda/envs/tf113/lib/python3.6/multiprocessing/context.py in _Popen(process_obj) 221 @staticmethod 222 def _Popen(process_obj): --> 223 return _default_context.get_context().Process._Popen(process_obj) 224 225 class DefaultContext(BaseContext): ~/.conda/envs/tf113/lib/python3.6/multiprocessing/context.py in _Popen(process_obj) 275 def _Popen(process_obj): 276 from .popen_fork import Popen --> 277 return Popen(process_obj) 278 279 class SpawnProcess(process.BaseProcess): ~/.conda/envs/tf113/lib/python3.6/multiprocessing/popen_fork.py in __init__(self, process_obj) 17 util._flush_std_streams() 18 self.returncode = None ---> 19 self._launch(process_obj) 20 21 def duplicate_for_child(self, fd): ~/.conda/envs/tf113/lib/python3.6/multiprocessing/popen_fork.py in _launch(self, process_obj) 64 code = 1 65 parent_r, child_w = os.pipe() ---> 66 self.pid = os.fork() 67 if self.pid == 0: 68 try: BlockingIOError: [Errno 11] Resource temporarily unavailable
답변 4
0
감사합니다. 저는 imgaug를 제외하고 수행했더니 문제없이 수행되었습니다. 다만 처음에는 gpu를 활용하는것 같더니 이후 시도에서는 cpu만 써서 시간이 오래걸리는 문제를 해결하려고 하고있습니다. 제 서버말고 colab에 올려서 해봐도 동일하네요. 문제를 해결하면 또 올리겠습니다
0
0
저는 balloon_model.train(...) 실행시, 같은 문제가 발생하여 다음과 같이 수정하여 사용하고 있습니다.
1) 다운로드 받은 Mask_RCNN/mrcnn/model.py 에서 use_multiprocessing=False 로 수정하여 저장
2) python setup.py install 명령을 사용하여 Mask_RCNN 재배포
혹시, 해당 기능이 성능 상 문제가 된다면, 나중에 다시 use_multiprocessing=True로 수정하여 재배포하면 될 것 같네요.
정상동작 확인했으며, train() 소요시간은 12분 58초 걸렸네요.
(use_multiprocessing=True 로 했을 경우 시간이 얼마나 걸릴까요?)
(GPU는 Titan X(메모리 12GB) 사용 중입니다.)
#---[관련 소스코드]--------
print("Training network heads")
balloon_model.train(dataset_train, dataset_val,
learning_rate=train_config.LEARNING_RATE,
epochs=30,
layers='heads')
#---[에러내용]-------------
#~/anaconda3/envs/tf113/lib/python3.6/site-packages/mask_rcnn-2.1-py3.6.egg/mrcnn/model.py in train(self, train_dataset, val_dataset, learning_rate, epochs, layers, augmentation, custom_callbacks, no_augmentation_sources)
# 2372 max_queue_size=100,
# 2373 workers=workers,
#-> 2374 use_multiprocessing=True,
#:
# EOFError
#Process Process-15:
# File "../anaconda3/envs/tf113/lib/python3.6/multiprocessing/connection.py", line 407, in _recv_bytes
# buf = self._recv(4)
#EOFError
#-----[수정 후 정상 동작함: 소요시간 12분 58초]-----------
:
Epoch 30/30 61/61 [==============================] - 22s 361ms/step - loss: 0.1355 - rpn_class_loss: 0.0026 - rpn_bbox_loss: 0.0274 - mrcnn_class_loss: 0.0214 - mrcnn_bbox_loss: 0.0211 - mrcnn_mask_loss: 0.0630 - val_loss: 0.6885 - val_rpn_class_loss: 0.0778 - val_rpn_bbox_loss: 0.3417 - val_mrcnn_class_loss: 0.0657 - val_mrcnn_bbox_loss: 0.0819 - val_mrcnn_mask_loss: 0.1214 time: 12min 58s
0
안녕하십니까,
일단 제 환경에서는 다시 mask_rcnn 패키지를 다운로드 받아서 학습을 해봐도 정상적으로 동작합니다.
오류 내용으로만 보면 fit_generator( )호출 시 use_multiprocessing=True에서 과다 메모리 사용으로 문제가 있다고 나옵니다. 원래 keras의 use_multiprocessing=True는 좀 문제가 있지만 matter port mask_rnn 패키지에서는 default로 use_multiprocessing=True 로 적용되어도 별 문제가 없었습니다.
1. 수행 환경이 리눅스인지, tensorflow 환경이 1.13 인지 확인 부탁드립니다.
2. 주피터 노트북을 재 기동하거나, 커널은 다시 Restart 후에 수행 부탁드립니다. 다른 커널은 수행하지 않은 채로 해당 nucleus 주피터 노트북만 기동하시고 학습부탁드립니다.