본문 바로가기

Python/keras

tensorflow CUBLAS_STATUS_ALLOC_FAILED 오류 대처 및 메모리 할당

반응형

목적

머신러닝 중 메모리 할당 관련 처리 정리

 


10번 중 7번 오류, 3번은 정상으로 작동하는 상황이였습니다.

 

아래 발생된 에러 로그를 보니 메모리 할당이 안되는 문제인 것으로 추축됩니다.

정확한 이유가 맞는지는 모르겠지만 GPU의 메모리 할당을 더 이상 할 수 없는 상황인 것같습니다.

failed to create cublas handle : CUBLAS_STATUS_ALLOC_FAILED

 

제가 해결한 2개의 방법입니다.

 

1) 메모리 할당 Grwoth 변경

메모리 성장 할당의 옵션을 True 설정하면 문제가 해결됩니다.

 

아래 3개의 방법 중 가장 추천하는 순서대로 작성하겠습니다. 텐서플로우의 버전에 따라 적용하시면 됩니다.

 

아래 코드가 모든 GPU에 Growth를 True로 변경 해줍니다. 제가 사용한 버전에서는 아래 코드를  사용했습니다.

1. 모든 GPU의 Growth 변경 코드

import tensorflow as tf
gpus = tf.config.experimental.list_physical_devices('GPU')
if gpus:
    try:
        # Currently, memory growth needs to be the same across GPUs
        for gpu in gpus:
            tf.config.experimental.set_memory_growth(gpu, True)
        logical_gpus = tf.config.experimental.list_logical_devices('GPU')
        print(len(gpus), "Physical GPUs,", len(logical_gpus), "Logical GPUs")
    except RuntimeError as e:
        # Memory growth must be set before GPUs have been initialized
        print(e)

2. Grwoth의 버전을 변경해줍니다. (텐서플로우 버전에 따라 사용하면 될 것 같습니다.)

import tensorflow as tf
config = tf.ConfigProto()
config.gpu_options.allow_growth = True

 

import tensorflow as tf
config = tf.compat.v1.ConfigProto()
config.gpu_options.allow_growth = True

 

2) 메모리 할당 사용량 변경

텐서플로우에서 사용하는 메모리 사용량을 설정합니다. GPU의 메모리 사용량을 보면 설정한 비율만큼 사용하는 것을 확인 할 수 있습니다.

import tensorflow as tf
gpus = tf.config.experimental.list_physical_devices('GPU')
if gpus:
    try:
        for gpu in gpus:
            tf.config.experimental.set_memory_growth(gpu, True)
            tf.config.experimental.set_virtual_device_configuration(gpu, 
        		[tf.config.experimental.VirtualDeviceConfiguration(memory_limit=1*1024)]) # 1GB
    except RuntimeError as e:
        print(e)

 

 

출처 : https://stackoverflow.com/questions/41117740/tensorflow-crashes-with-cublas-status-alloc-failed

반응형

'Python > keras' 카테고리의 다른 글

python keras 설치 window(윈도우) - 2  (0) 2016.11.29
python keras 설치 window(윈도우) - 1  (0) 2016.11.29