일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 데이터베이스
- I'm Sorry
- 네트워크
- 보안
- 프로그래밍
- 소프트웨어공학
- 클라우드컴퓨팅
- 컴퓨터공학
- 네트워크보안
- 버전관리
- 사이버보안
- 2
- 데이터과학
- 웹개발
- 컴퓨터비전
- 자바스크립트
- 프로그래밍언어
- 코딩
- 자료구조
- 딥러닝
- 머신러닝
- 인공지능
- 컴퓨터과학
- Yes
- 파이썬
- 데이터분석
- 빅데이터
- 알고리즘
- 소프트웨어
- 데이터구조
- Today
- Total
스택큐힙리스트
텐서플로우가 GPU 메모리 전체를 할당하는 것을 방지하는 방법은 무엇인가요? 본문
저는 컴퓨터 자원이 공유되는 환경에서 일합니다. 즉, 몇 대의 서버 머신마다 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 기반 딥러닝 모델을 훈련할 때 메모리 문제가 발생하지 않습니다.