2017-09-08 3 views
2

을 주요 많은 양의 메모리를 할당 및 TensorFlow r1.3 (소스에서 컴파일 됨), CUDA_VISIBLE_DEVICES이 설정되지 않은 상태에서 32G 물리적 메모리와 2 개의 GPU (GTX Titan X 및 GTX 970)가있는 경우 (즉, 두 GPU 모두 표시됨) 결과 파이썬 프로세스에 59.7G의 메모리가 할당됩니다 ! 실제로는 754M 만 사용합니다.는 TensorFlow 다음과 같은 두 가지 라인 파이썬/TensorFlow 대화 형 세션을 고려 세션 시작 시간에

CUDA_VISIBLE_DEVICES=0 (즉 Titan X 만 표시됨)이면 55.2G가 할당되고 137M이 사용 중입니다.

CUDA_VISIBLE_DEVICES=1 (즉, 970 만 표시됨) 47.0G가 할당되고 325M이 사용 중입니다.

CUDA_VISIBLE_DEVICES= (즉, GPU가 보이지 않는 경우) 2.5G 만 할당되고 131M 만 사용 중입니다.

이것은 할당 된 메모리 양이 제한된 환경에서 문제가됩니다. 그리드 엔진 설정 내부.

TensorFlow가 CUDA를 사용할 때 할당하는 주 메모리의 양을 제한하는 방법이 있습니까?

업데이트 1

할당 된 메모리의 양에 htopVIRT 열 보면,이 시험에서 결정된다.

TensorFlow r1.3은 대부분 기본적으로 configure 답으로 컴파일됩니다. 유일한 변형은 CUDA 및 cuDNN의 경로입니다. 결과적으로 jemalloc이 사용되고 있습니다.

업데이트 2

나는 jemalloc 장애인과 재 컴파일 시도와 같은 동작을 참조했습니다.

+0

여기에 설명 된 CUDA 드라이버 문제로 인해 발생할 수 있습니다. https://stackoverflow.com/questions/11631191/why-does-the-cuda-runtime-reserve-80-gib-virtual-memory-upon-initialization –

+0

얼마나 많은 메모리가 할당되었는지 확인합니까? 또한 다른 할당 자와 함께 실행 해 볼 수도 있습니다 - sudo apt-get install google-perftools; export LD_PRELOAD = "/ usr/lib/libtcmalloc.so.4"' –

+0

감사합니다. @ YaroslavBulatov.나는'tcmalloc'을 사용해 보았지만 행동에 아무런 영향을 미치지 않는 것처럼 보였다. CUDA를 TensorFlow 대신 직접 사용했을 때 비슷한 동작을 들었으므로 최고의 TF가로드 할 때 CUDA 드라이버를 다르게 구성 할 수 있다고 생각합니다. –

답변

0

GPU에서 TensorFlow의 기본 동작은 사용 가능한 모든 메모리를 사용하는 것입니다. 그러나이 동작을 방지하려면 세션에 동적으로 메모리를 할당하도록 지정할 수 있습니다. ConfigProto 선언에서

: 당신을 제한하려면

session_config = tf.ConfigProto() 
session_config.gpu_options.allow_growth=True 
sess = tf.Session(config=session_config) 

:

// allow_growth 
// If true, the allocator does not pre-allocate the entire specified 
// GPU memory region, instead starting small and growing as needed. 

이 작업을 수행하기 위해 세션에 ConfigProto의 개체를 전달할를 생성 사용 된 메모리 양, 배치 크기 및 모델의 매개 변수 개수에 달려 있습니다.

+0

이것은 TF가 사용하는 GPU 메모리의 양에 영향을 미치지 만, CUDA를 사용하는 경우 TF가 메인 시스템 메모리를 사용하는 것과 관련하여 궁금합니다. –

관련 문제