ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [GPU/메모리] 내 GPU엔 몇 B 모델까지 올라갈 수 있을까? (+ 필요 메모리 계산하는 코드)
    AI/NLP 2025. 7. 6. 15:51
    728x90
    [메모리] 내 GPU엔 몇 B 모델까지 올라갈 수 있을까? (+ 필요 메모리 계산하는 코드)

     

     

     

     

     

    들어가기 전 

    간단한 계산 정도는 아래 포스트에서 대충 적어놨었다  (https://asidefine.tistory.com/317)

    하지만 어렴풋한 감으로 하는 것보다 원리부터 다시 ! 

     

     

    1. 핵심 개념 정리

    1.1 메모리 구성 요소

    공통 요소:
    - 모델 파라미터: 실제 가중치
    - 입력 데이터: 배치 처리용 토큰들
    - 시스템 오버헤드: 프레임워크 메모리
    
    추론 전용:
    - KV 캐시: 생성 속도 향상용 캐시
    
    학습 전용:
    - 그래디언트: 역전파용 기울기
    - 옵티마이저 상태: Adam/SGD 내부 상태
    - 중간 활성화: 역전파용 순전파 결과
    

    1.2 데이터 정밀도

    정밀도  바이트  메모리 비율  성능 영향
    FP32 4 100% 기준
    FP16 2 50% 거의 없음
    INT8 1 25% 5-10% 손실
    INT4 0.5 12.5% 10-20% 손실

    1.3 주요 모델 스펙

    모델  파라미터  히든차원  레이어  헤드수  FP16크기
    7B 7B 4096 32 32 14GB
    13B 13B 5120 40 40 26GB
    30B 30B 6656 60 52 60GB
    70B 70B 8192 80 64 140GB

     

     

    2. 추론 vs 학습 메모리 차이

    2.1 메모리 사용 패턴 비교

    추론:
    ✓ 모델 (고정)
    ✓ KV 캐시 (시퀀스따라 증가) ← 핵심 변수
    ✓ 입력 데이터 (작음)
    ✓ 시스템 오버헤드 (적음)
    
    학습:
    ✓ 모델 (고정)
    ✓ 그래디언트 (= 모델 크기) ← 고정 부담
    ✓ 옵티마이저 상태 (= 모델 × 1-3배) ← 최대 부담
    ✓ 중간 활성화 (배치따라 증가) ← 핵심 변수
    ✓ 입력 데이터 (큼)
    ✓ 시스템 오버헤드 (많음)
    

     

    2.2 메모리 크기 비교 (7B 모델 기준)

    기본 메모리 14GB 14GB (모델) + 14GB (그래디언트) + 28GB (Adam) = 56GB
    변동 메모리 0-8GB (KV 캐시) 0-10GB (중간 활성화)
    최소 필요 18GB 65GB
    권장GPU A100 40GB A100 80GB

     

     

     

    3. 추론 메모리 계산

     

    3.1 추론 메모리 체크리스트

    □ 1. 모델 메모리 = 파라미터수 × 정밀도
    □ 2. KV 캐시 = 배치 × 시퀀스 × 히든차원 × 레이어 × 2 × 정밀도
    □ 3. 입력 데이터 = 배치 × 시퀀스 × 히든차원 × 정밀도 × 2
    □ 4. 시스템 오버헤드 = 모델 크기 × 0.2 + 1GB
    □ 5. 안전 여유분 = 총합 × 0.1
    

     

    3.2 KV 캐시 계산표 (7B 모델, FP16)

    배치  1K 시퀀스  4K 시퀀스  16K 시퀀스  32K 시퀀스
    1 0.25GB 1GB 4GB 8GB
    2 0.5GB 2GB 8GB 16GB
    4 1GB 4GB 16GB 32GB
    8 2GB 8GB 32GB 64GB

     

     

     

    4. 학습 메모리 계산

    4.1 학습 메모리 체크리스트

    □ 1. 모델 메모리 = 파라미터수 × 정밀도
    □ 2. 그래디언트 = 모델 메모리와 동일
    □ 3. 옵티마이저 상태 = 모델 × 배수 (Adam: ×2, SGD: ×1)
    □ 4. 중간 활성화 = 배치 × 시퀀스 × 히든차원 × 레이어 × 정밀도
    □ 5. 입력 데이터 = 배치 × 시퀀스 × 히든차원 × 정밀도 × 4
    □ 6. 시스템 오버헤드 = 모델 크기 × 0.3 + 2GB
    □ 7. 안전 여유분 = 총합 × 0.1
    

     

    4.2 옵티마이저별 메모리 (7B 모델 기준)

    옵티마이저  상태 메모리  총 파라미터 메모리
    SGD 14GB 42GB (모델+그래디언트+모멘텀)
    Adam 28GB 56GB (모델+그래디언트+2×모멘트)
    AdaFactor 10GB 38GB (압축된 상태)

     

    4.3 중간 활성화 계산표 (7B 모델, FP16)

    배치  1K 시퀀스  2K 시퀀스  4K 시퀀스
    1 0.25GB 0.5GB 1GB
    4 1GB 2GB 4GB
    8 2GB 4GB 8GB
    16 4GB 8GB 16GB

     

    4.4 학습 메모리 계산 예시

    A100 40GB - 7B 모델 (불가능)

    기본 Adam 설정:
    - 모델: 14GB
    - 그래디언트: 14GB
    - Adam 상태: 28GB
    - 중간 활성화: 2GB (배치4, 2K)
    - 입력 데이터: 0.5GB
    - 오버헤드: 5GB
    - 총 필요: 63.5GB ✗ (23.5GB 초과)
    
    최적화 후 (가능):
    - 모델: 14GB (FP16)
    - 그래디언트: 14GB
    - SGD 상태: 14GB
    - 그래디언트 체크포인팅: 0.4GB (80% 절약)
    - 입력 데이터: 0.2GB (배치1)
    - 오버헤드: 4GB
    - 총 사용: 46.6GB ✗ 여전히 초과
    
    ZeRO-2 적용:
    - 모델: 14GB
    - 그래디언트 분산: 7GB
    - SGD 상태 분산: 7GB
    - 중간 활성화: 0.4GB
    - 입력 데이터: 0.2GB
    - 오버헤드: 4GB
    - 총 사용: 32.6GB ✓
    

    A100 80GB - 13B 모델

    ZeRO-2 + 혼합정밀도:
    - 모델: 26GB
    - 그래디언트: 13GB (FP16, 분산)
    - Adam 상태: 26GB (분산)
    - 중간 활성화: 3GB (체크포인팅)
    - 입력 데이터: 1GB
    - 오버헤드: 6GB
    - 총 사용: 75GB ✓ (여유 5GB)
    

     

     

    5. GPU별 실무 권장사항

     

    5.1 V100 16GB

    추론:
    - 7B INT8: 배치1, 시퀀스 4K ✓
    - 7B FP16: 불가능 ✗
    
    학습:
    - 7B: ZeRO-3 + 체크포인팅 + 그래디언트 누적 필수
    - 실용성 낮음, 권장하지 않음
    

     

    5.2 A100 40GB

    추론:
    - 7B FP16: 배치4, 시퀀스 8K ✓
    - 13B FP16: 배치2, 시퀀스 4K ✓
    - 13B INT8: 배치4, 시퀀스 8K ✓
    
    학습:
    - 7B: ZeRO-2 + SGD ✓
    - 13B: 매우 제한적, 권장하지 않음
    

     

    5.3 A100 80GB

    추론:
    - 13B FP16: 배치8, 시퀀스 8K ✓
    - 30B FP16: 배치2, 시퀀스 4K ✓
    - 70B INT8: 배치1, 시퀀스 2K ✓
    
    학습:
    - 7B: Adam, 풀 정밀도 ✓
    - 13B: ZeRO-2 + Adam ✓
    - 30B: ZeRO-2 + 최적화 필요
    

     

    5.4 H100 80GB

    추론:
    - 30B FP16: 배치4, 시퀀스 8K ✓
    - 70B INT8: 배치2, 시퀀스 4K ✓
    
    학습:
    - 13B: 모든 설정 가능 ✓
    - 30B: ZeRO-2로 편안함 ✓
    - 70B: ZeRO-3 + 다중 GPU 필요
    

     

     

    6. 메모리 최적화 전략

     

    6.1 추론 최적화

    1순위: 양자화
    - FP16 → INT8: 메모리 50% 절약
    - FP16 → INT4: 메모리 75% 절약
    
    2순위: KV 캐시 관리
    - 시퀀스 길이 제한
    - 슬라이딩 윈도우 사용
    - 배치 크기 조절
    
    3순위: 모델 분할
    - 텐서 병렬화 (큰 모델)
    - 파이프라인 병렬화 (긴 시퀀스)
    

     

    6.2 학습 최적화

    1순위: 그래디언트 체크포인팅
    - 중간 활성화 80% 절약
    - 계산 시간 20% 증가
    
    2순위: ZeRO 옵티마이저
    - ZeRO-1: 옵티마이저 상태 분산
    - ZeRO-2: 그래디언트도 분산
    - ZeRO-3: 모델 파라미터도 분산
    
    3순위: 그래디언트 누적
    - 작은 배치로 큰 배치 효과
    - 메모리 vs 학습 속도 트레이드오프
    
    4순위: 혼합 정밀도
    - FP16 순전파, FP32 그래디언트
    - 30-50% 메모리 절약
    

     

     

    7. 트러블슈팅

    7.1 OOM 에러 해결 순서

    추론 시:
    1. 배치 크기 절반으로 줄이기
    2. 시퀀스 길이 제한 (32K → 16K → 8K)
    3. 양자화 적용 (FP16 → INT8)
    4. 모델 분할 고려
    
    학습 시:
    1. 그래디언트 체크포인팅 켜기
    2. 배치 크기 줄이고 그래디언트 누적
    3. ZeRO-2 적용
    4. SGD로 옵티마이저 변경
    5. 혼합 정밀도 적용
    6. 다중 GPU로 분산
    

     

    7.2 성능 vs 메모리 트레이드오프

    더 많은 메모리가 필요한 설정:
    ✓ 더 큰 배치 크기 → 학습 안정성 ↑, 속도 ↑
    ✓ 더 긴 시퀀스 → 품질 ↑, 컨텍스트 ↑
    ✓ 높은 정밀도 → 품질 ↑, 안정성 ↑
    
    메모리를 절약하는 설정:
    ✓ 작은 배치 크기 → 학습 불안정, 속도 ↓
    ✓ 짧은 시퀀스 → 품질 ↓, 컨텍스트 ↓
    ✓ 낮은 정밀도 → 품질 ↓, 불안정 ↑
    

     

    8. 빠른 계산 도구

    8.1 간단 공식

    # 추론 메모리 (GB)
    def inference_memory(params_B, batch, seq_len, precision="fp16"):
        bytes_per_param = {"fp16": 2, "int8": 1, "int4": 0.5}[precision]
        
        model = params_B * bytes_per_param
        kv_cache = batch * seq_len * 4096 * 32 * 2 * bytes_per_param / 1024**3
        overhead = model * 0.2 + 1
        
        return model + kv_cache + overhead
    
    # 학습 메모리 (GB)  
    def training_memory(params_B, batch, seq_len, optimizer="adam"):
        model = params_B * 2  # FP16
        gradient = model
        opt_state = model * (2 if optimizer == "adam" else 1)
        activation = batch * seq_len * 4096 * 32 * 2 / 1024**3
        overhead = model * 0.3 + 2
        
        return model + gradient + opt_state + activation + overhead
    
    # 사용 예시
    print(f"7B 추론: {inference_memory(7, 2, 4096):.1f}GB")
    print(f"7B 학습: {training_memory(7, 4, 2048):.1f}GB")
    

     

    8.2 GPU 선택 가이드

    16GB GPU (V100): 7B INT8 추론만
    24GB GPU (RTX4090): 7B FP16 추론 + 제한적 학습
    40GB GPU (A100): 13B 추론, 7B 학습
    80GB GPU (A100/H100): 30B 추론, 13B 학습, 7B 완전 자유
    

     

     

     

    그럼 내 GPU의 스펙을 알아보자 

    그건 ... 다음 포스트에서 

    https://asidefine.tistory.com/342

     

    [GPU] NVIDIA GPU 세대별 비교표

    NVIDIA GPU 세대별 비교표 1. GPU 아키텍처 기초 용어 설명1.1 NVIDIA 아키텍처 진화표아키텍처 출시년 라인업 주요 혁신 대표 모델Maxwell2014게이밍전력 효율 혁신GTX 980, GTX 970Pascal2016게이밍/AI16nm 공정, H

    asidefine.tistory.com

     

     

     

    Ref. 

     

     

     


    결론 

    • 학습, 추론 두 목적에 따라 다르다 
    • 추론 시에는 KV Cache가, 학습 시에는 Activation이 핵심 변수다 

     

     

     

     

     

     

    728x90
Designed by Tistory.