인프런 커뮤니티 질문&답변

김동욱님의 프로필 이미지
김동욱

작성한 질문수

[개정판] 딥러닝 컴퓨터 비전 완벽 가이드

NuclearDataset train과정에서 오류가 발생합니다.

작성

·

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 주피터 노트북만 기동하시고 학습부탁드립니다.

김동욱님의 프로필 이미지
김동욱

작성한 질문수

질문하기