by kimyh
R&M ai developer
AI 모델링, 데이터 분석, 알고리즘 설계를 통해 모듈을 구축하고 제공하는 역할을 맡고 있습니다.
1 min read

Tags

AI 학습 중 GPU 메모리 과부하가 발생할 수 있으며, 이를 확인하려면 nvidia-smi 명령어를 사용하고, 필요 시 배치 사이즈를 조정해야 합니다. CPU 메모리 과부하는 변수 수나 값 축적이 과도할 때 발생하며, 이를 확인하려면 psutil 라이브러리로 메모리 사용량을 점검할 수 있습니다. 학습 중 과도한 메모리 사용을 피하려면 리스트를 초기화하거나, 예측 결과를 json 형태로 저장하고 불러오는 방법을 사용해야 하며, matplotlib를 사용할 때 이미지 변수는 close 메서드로 메모리 누수를 방지해야 합니다.

1. GPU 메모리 확인

가장 기본적인 원인으로, AI 학습 등을 진행하면서 GPU 메모리가 감당 할 수 없을 만큼의 연산메모리를 사용하여 발생하는 경우.

nvidia-smi
watch -n 1 nivida-smi # (1초에 한번씩 계속 보여줌)

nvidia-smi명령어 등을 이용하여 GPU 메모리를 확인하고, 메모리 사용량을 클 경우 batch 사이즈 등을 조절해야 함

2. CPU 메모리 확인

GPU 메모리 등에 문제가 없을 경우, 두 번째 파악해야하는 영역.

CPU 메모리 과부하는 주로 변수의 수를 과도하게 생성하거나 하나의 변수 안에 값을 과하게 축적할 때, 서버가 메모리를 감당하지 못해 발생 함

2-1. 메모리 확인 코드

  • 모델에 CPU 메모리 사용량을 확인하는 python 코드는 아래 와 같음
import psutil

def print_memory_usage():
    memory_info = psutil.virtual_memory()
    cpu_use = memory_info.percent
    memory_avail = memory_info.available / (1024 ** 3)
    print(f'CPU Memory Usage: {cpu_use}% Used, {memory_avail:.2f} GB available')

2-2. 예시

  • list에 과하게 많은 값이 축적되는 경우

아래 코드와 같이 학습이 완료된 예측 값을 list 로 누적하거나, 학습에 사용되는 배치 값을 누적할 경우, 메모리 터짐 현상이 발생하기 때문에, list 를 초기화 하거나 학습이 완료된 결과를 json 형태 등으로 하드에 저장 후 불러오는 등의 해결 방법을 사용해야 함

for i in range(epohcs):
    pred_list = []
    for x, y in dataloader:
        pred = model(x)
        pred_list.append(pred)
  • matplotlib 활용 시 이미지가 누적되는 경우

그래프를 그리는 대표적인 이미지 패키지 matplotlib를 활용할 때 이미지를 선언한 변수를 close하지 않을 경우 메모리가 축적되기 때문에 아래 코드처럼 close메소드를 활용해서 작업이 완료된 변수를 제거해 주어야 함.

plt.close(fig)