Table of Contents

728x90

메모리 사용량을 줄이기 위해 다음과 같은 추가적인 방법들을 시도해 볼 수 있습니다. 특히, 현재 실행 중인 프로세스와 사용 중인 애플리케이션을 구체적으로 살펴보면서 메모리 사용량을 최적화하는 방법을 찾아야 합니다.

1. 현재 메모리 사용량 분석

1.1. 프로세스별 메모리 사용량 확인

htop이나 top 명령어를 사용하여 메모리를 많이 사용하는 프로세스를 찾아내고, 불필요한 프로세스를 종료합니다.

htop
# or
top

1.2. 메모리 사용량 상세 분석

smem 도구를 사용하여 프로세스별 메모리 사용량을 자세히 분석할 수 있습니다.

sudo apt-get install smem
smem -t -k

2. 메모리 사용량 최적화

2.1. 데이터 로드 및 전처리 최적화

데이터셋을 한 번에 모두 메모리에 로드하지 않고, 배치 단위로 로드하여 메모리 사용량을 줄입니다.

from torch.utils.data import DataLoader

# 데이터셋 및 데이터로더 예시
dataset = CustomDataset(...)
dataloader = DataLoader(dataset, batch_size=32, shuffle=True, num_workers=4)

2.2. 캐시 및 버퍼 비우기

리눅스 시스템에서는 캐시와 버퍼를 비워 메모리 사용량을 줄일 수 있습니다.

sudo sync
sudo sysctl -w vm.drop_caches=3

2.3. 불필요한 객체 삭제 및 가비지 컬렉션 호출

사용이 끝난 변수는 del을 사용하여 메모리에서 해제하고, gc.collect를 호출하여 가비지 컬렉션을 수행합니다.

import gc

# 큰 변수 삭제 및 가비지 컬렉션 호출
del large_variable
gc.collect()

3. 메모리 릭 점검

3.1. 메모리 프로파일링 도구 사용

Python에서는 memory_profiler를 사용하여 메모리 사용량을 분석하고 메모리 릭을 점검할 수 있습니다.

from memory_profiler import profile

@profile
def my_function():
    # 메모리 사용량이 많은 코드
    ...

my_function()

4. 시스템 설정 조정

4.1. 스왑 메모리 설정

스왑 메모리를 활성화하여 물리적 메모리 부족 시 스왑을 사용할 수 있도록 설정합니다.

# 스왑 파일 생성 (예: 4GB 스왑 파일)
sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

# 스왑 활성화 확인
sudo swapon --show

5. 주요 프로세스 종료 및 재시작

5.1. Jupyter Notebook 서버 종료

Jupyter Notebook 서버가 여러 개 실행 중이라면, 이를 종료하고 필요한 경우 다시 시작합니다.

pkill -f jupyter-notebook

5.2. VSCode 서버 종료

VSCode 서버가 여러 개 실행 중이라면, 이를 종료하고 필요한 경우 다시 시작합니다.

pkill -f vscode-server

5.3. Python 프로세스 종료

불필요한 Python 프로세스를 종료합니다.

pkill -f python

예시 코드: 메모리 사용량 최적화

import torch
from torch.utils.data import DataLoader
import numpy as np
import gc

# 데이터셋 및 데이터로더 설정
dataset = CustomDataset(...)
dataloader = DataLoader(dataset, batch_size=32, shuffle=True, num_workers=4)

# 큰 변수 삭제 및 가비지 컬렉션 호출
del large_variable
gc.collect()

# 메모리 프로파일러 사용 예시
from memory_profiler import profile

@profile
def train_model():
    model = create_model()
    optimizer = create_optimizer(model)
    for data in dataloader:
        inputs, labels = data
        optimizer.zero_grad()
        outputs = model(inputs)
        loss = compute_loss(outputs, labels)
        loss.backward()
        optimizer.step()

train_model()

# 캐시 및 버퍼 비우기
import os
os.system('sudo sync; sudo sysctl -w vm.drop_caches=3')

결론

메모리 사용량을 줄이기 위해 여러 가지 최적화 방법을 시도할 수 있습니다. 특히, 현재 실행 중인 프로세스를 분석하고 불필요한 프로세스를 종료하며, 데이터 로드 및 전처리 과정을 최적화하여 메모리 사용량을 줄이는 것이 중요합니다. 메모리 프로파일링 도구를 사용하여 메모리 릭을 점검하고, 시스템 설정을 조정하여 메모리 사용량을 효율적으로 관리할 수 있습니다.