스택큐힙리스트

텐서플로우가 GPU 메모리 전체를 할당하는 것을 방지하는 방법은 무엇인가요? 본문

카테고리 없음

텐서플로우가 GPU 메모리 전체를 할당하는 것을 방지하는 방법은 무엇인가요?

스택큐힙리스트 2023. 4. 20. 10:04
반응형

저는 컴퓨터 자원이 공유되는 환경에서 일합니다. 즉, 몇 대의 서버 머신마다 Nvidia Titan X GPU 몇 개가 장착되어 있습니다.

소형〜중형 모델의 경우 Titan X의 12GB는 일반적으로 동시에 같은 GPU에서 훈련을 실행하는 2-3명에게 충분합니다. 하나의 모델이 GPU의 모든 계산 단위를 최대한 활용하지 않는 경우, 여러 훈련 프로세스를 연속으로 실행하는 것보다 이것이 실제로 속도 향상을 가져올 수 있습니다. GPU에 동시 액세스하는 경우 개별 훈련 시간이 느려지더라도 여전히 여러 사용자가 동시에 GPU에서 훈련을 할 수 있는 유연성이 있는 것이 좋습니다.

TensorFlow의 문제는 기본 설정으로 실행될 때 사용 가능한 전체 GPU 메모리를 할당한다는 것입니다. 작은 두 개의 레이어 신경망에 대해서도 GPU 메모리 12GB가 모두 사용되는 것을 확인했습니다.

만약 모델에 4GB의 GPU 메모리만 있으면 충분하다는 것을 안다면, TensorFlow가 4GB의 GPU 메모리만 할당하도록 하는 방법이 있을까요?

답변 1

당신은 선택적 인수의 일부로 config을 전달하여 tf.Session을 구성할 때 할당할 GPU 메모리의 분수를 설정할 수 있습니다.

# Assume that you have 12GB of GPU memory and want to allocate ~4GB:

gpu_options = tf.GPUOptions(per_process_gpu_memory_fraction=0.333)

sess = tf.Session(config=tf.ConfigProto(gpu_options=gpu_options))

per_process_gpu_memory_fraction는 동일한 컴퓨터의 각 GPU에서 프로세스에서 사용될 GPU 메모리 양의 하한 역할을합니다. 현재이 분수는 동일한 기계의 모든 GPU에 균일하게 적용됩니다. 이를 GPU 당으로 설정하는 방법은 없습니다.

답변 2

텐서플로우는 딥러닝 모델을 학습하고 실행하는 데 사용되는 인기있는 프레임 워크 중 하나입니다. 그러나, 텐서플로우가 GPU의 전체 메모리를 할당하는 경우 너무 많은 메모리가 필요하다는 문제가 발생할 수 있습니다. 이는 다른 프로세스나 애플리케이션에서 GPU를 사용할 수 없도록 만들 수 있습니다. 이를 방지하고 텐서플로우가 필요한 만큼의 메모리만 사용하도록하려면 다음의 방법을 사용하여야 합니다.

1. GPU의 일부분만 할당

텐서플로우가 GPU의 전체 메모리를 할당하지 못하도록 하려면 GPU의 일부분만 할당하면 됩니다. 이는 TensorFlow의 config 메소드를 사용하여 수행할 수 있습니다. 예를 들어, 다음과 같은 코드를 사용해서 50%의 GPU 메모리만 할당할 수 있습니다.

```python

import tensorflow as tf

config = tf.ConfigProto()

config.gpu_options.allow_growth = True

config.gpu_options.per_process_gpu_memory_fraction = 0.5

session = tf.Session(config=config, ...)

```

2. 메모리 사용량 로깅

TensorFlow의 세션 객체를 만들 때, `log_device_placement` 를 true로 설정하여 모든 소스 장치가 잘못 설정되지 않은 경우 외부 메모리에 쓰러지지 않도록 확인할 수 있습니다.

```python

import tensorflow as tf

config = tf.ConfigProto()

config.gpu_options.allow_growth = True

config.log_device_placement = True

session = tf.Session(config=config, ...)

```

3. 메모리 누수 식별 및 제거

TensorFlow는 세션이 종료될 때 자동으로 만료되지 않는 연산이 있는 경우 메모리 누수가 발생할 수 있습니다. TensorFlow 2.0은 지속적인 메모리 사용량 문제를 해결하기 위해 메모리 누수 디버깅 툴을 제공합니다. 디버깅 툴을 사용하여 메모리 누수를 식별하고 해결할 수 있습니다.

위와 같은 방법을 사용하여 TensorFlow가 GPU의 전체 메모리를 할당하지 않도록 할 수 있습니다. 이는 다른 프로세스 및 애플리케이션이 GPU를 사용할 수 있도록하므로 TensorFlow 기반 딥러닝 모델을 훈련할 때 메모리 문제가 발생하지 않습니다.

반응형
Comments