피드로 돌아가기
Dev.toAI/ML
원문 읽기
VRAM 최적화 설계를 통한 8GB GPU 기반 SDXL 추론 안정성 확보
How to Fix CUDA Out of Memory Errors in Stable Diffusion WebUI
AI 요약
Context
Stable Diffusion WebUI의 SDXL 모델 가동 시 U-Net 가중치(6.6GB)와 Attention Map의 이차함수적 메모리 증가로 인한 CUDA OOM 발생. PyTorch Caching Allocator의 메모리 파편화로 인해 연속 생성 시 가용 VRAM이 급감하는 구조적 한계 존재.
Technical Solution
- xformers 도입을 통한 Memory-efficient Attention 구현으로 VRAM 사용량의 30-40% 절감
- --medvram 및 --lowvram 플래그를 활용한 U-Net, VAE, Text Encoder의 순차적 로딩으로 Peak Memory 점유율 분산
- PYTORCH_CUDA_ALLOC_CONF 설정을 통해 max_split_size_mb 제한 및 garbage_collection_threshold(0.8) 적용으로 메모리 파편화 방지
- --opt-split-attention 설정을 통한 Attention 연산의 Sequence Dimension 단위 청킹 처리
- Tiled VAE Extension 도입으로 Latent 디코딩 과정을 청크 단위로 분할하여 최종 단계의 VRAM 스파이크 억제
- gc.collect() 및 torch.cuda.empty_cache() 호출을 통한 Resident Tensor 강제 해제 로직 구현
Impact
- xformers 적용 시 VRAM 사용량 30-40% 감소
- --medvram 적용 시 추론 속도 10-15% 저하 대비 런타임 안정성 확보
Key Takeaway
하드웨어 확장보다 Memory Allocator 튜닝과 연산 단위 분할(Chunking)이라는 소프트웨어적 제어가 VRAM 제약 환경에서 더 효율적인 해결책임.
실천 포인트
1. nvidia-smi로 백그라운드 프로세스의 VRAM 점유율 확인 및 불필요한 하드웨어 가속 종료
2. xformers 및 --medvram/--lowvram 플래그 적용 여부 검토
3. PyTorch Allocator의 max_split_size_mb 설정으로 메모리 파편화 억제
4. 고해상도 생성 시 Native Resolution 대신 Low-res 생성 후 Hires fix 2-pass 전략 채택
5. 추론 스크립트 설계 시 empty_cache()를 통한 명시적 메모리 플러시 구현