EBS 최소 볼륨 실험기 & gp3로 전환한 이유
“이 모델이 진짜 8GB로 돌아갈 수 있을까?”라는 질문에서 시작된 실험. 그리고 비용, 성능, 탄력성을 모두 고려해 gp3로 갈아탄 이야기.
실험 배경: EBS 볼륨 너무 크게 쓰고 있진 않을까?
Stable Diffusion 기반 API를 운영하면서, 모델 구성 요소는 이미 EFS에 분리 저장한 상태였다.
그렇다면 애플리케이션 서버가 직접 사용하는 EBS는 꼭 125GiB까지 필요할까?
현재 서버는 g4dn.xlarge 타입인데, 여기에 다음 두 가지 스토리지가 기본으로 붙는다:
- 루트 디스크 (EBS) — 기본 125GiB (수정 가능)
- ephemeral0 (임시 스토리지) — 디폴트로 제공
하지만 실제로 EBS를 얼마나 쓰는지, 그리고 어디까지 줄여도 안정적으로 운영할 수 있는지는 확인이 필요했다.
그래서 시작한 게 최소 EBS 볼륨 실험이었다.
실험: 최소 디스크 용량은 몇 GB?
1. 8GB EBS로 인스턴스 생성
- OS: Ubuntu 22.04
- 기본 세팅: Docker + EFS 마운트 + FastAPI 서버
2. 초기 디스크 사용량 체크 (du 기준)
# 초기 디스크 사용량 체크 (/dev/root 기준)
기본 환경 세팅 후 루트 볼륨 전체 사용량: 약 5.4GB
EFS 마운트(/mnt/efs): 별도 스토리지로 로컬 디스크 사용량에 미포함
남은 여유 공간: 약 2.6GB (총 8GiB 볼륨 기준)
EFS에 있는 모델 파일은 실제 디스크를 차지하지 않지만, 문제는 Stable Diffusion 컨테이너 실행 시 발생하는 temp 파일이었다.
3. 실행 중 디스크 부족 발생
- 컨테이너가 실행되며 모델 관련 파일들을 압축 해제하고 캐싱하는데, 약 12.5GB 이상의 임시 공간이 필요했다.
- 하지만 사용 가능한 공간이 약 2.6GB밖에 없었고, 결국 no space left on device 오류가 발생하며 실행 실패.
결론: 최소 운영 가능한 볼륨 사이즈
Docker 이미지 설치, OS, 임시 파일 등을 감안하면 25~30GB 이상의 여유 공간이 필요할 것으로 추정
따라서 실질적으로 안정적인 운영을 위해선 최소 40GB 이상의 EBS 볼륨을 확보하는 게 적절하다고 판단
서브주제: gp2 → gp3 전환한 이유
실험하면서 자연스럽게 “그럼 지금 쓰고 있는 EBS 타입은 최적인가?”라는 의문도 생겼다.
기존 인스턴스는 gp2 볼륨을 사용하고 있었고, AWS에서는 이제 gp3를 기본 권장하고 있다.
gp2 vs gp3 비교 요약표
| 항목 | gp2 | gp3 |
| 💰 요금 | $0.12/GB/월 | $0.08/GB/월 (더 저렴함) |
| ⚙️ IOPS | 3 IOPS/GB (최대 16,000) | 기본 3,000 IOPS (최대 16,000 설정 가능) |
| 🚀 처리량 | 용량 비례 (최대 250MB/s) | 기본 125MB/s (최대 1,000MB/s 설정 가능) |
| 🎛️ 성능 조절 | 불가 (용량에 종속) | 가능 (IOPS/Throughput 수동 설정 가능) |
| ⏱️ 지연 시간 | 동일 | 동일 |
왜 gp3가 더 나은가?
- 용량과 성능이 분리되어 있음 → 작은 볼륨에도 높은 성능 확보 가능
- IOPS, Throughput 수동 설정 가능 → 안정적 컨테이너 구동에 유리
- 가격도 더 저렴함 → $0.12 → $0.08/GB/월
결과적으로:
더 싸고, 성능 기본값도 좋고, 필요 시 조정도 가능
→ 컨테이너 기반 MLOps 환경에는 gp3가 압도적으로 유리함.
전환도 간단함
- 기존 볼륨 그대로 gp2 → gp3로 변환 가능 (데이터 손실 없음)
- 콘솔에서 1~2분이면 완료됨
마무리 요약
- Stable Diffusion API 서버 운영에 있어 EBS는 20GB 이상으로 설정하는 것이 안정적
- 운영 성능과 비용을 고려하면 gp3로 전환하는 게 매우 합리적인 선택
- 인프라의 병목은 코드가 아니라 디스크에서 생기기도 한다는 걸 실감한 실험이었다
이제 환경은 모두 정리되었고, 다음에는 이 구조를 자동화 파이프라인(n8n) 및 로그 관리, 모니터링과 연계하는 작업을 정리해보려고 한다.
인프라-모델-API가 모두 안정화된 후의 운영 자동화, 기대해도 좋다!!
참고: EBS 사이징 기준표
Stable Diffusion 기반 API 서버 혹은 유사한 딥러닝 모델 인퍼런스 환경을 기준으로, 용도별 최소 권장 용량을 정리해봤어:
| 운영체제 + 기본 패키지 | 8~10GB | Ubuntu 기준 |
| Docker, Python 가상환경 | 2~4GB | docker image, venv 포함 |
| 컨테이너 실행 중 temp 파일 | 6~8GB | 이미지 압축 해제 등 |
| 로그, 캐시 등 여유 공간 | 4~6GB | 예기치 않은 확장 대비 |
| 총 최소 권장 용량 | 20GB+ | 안정적 운영을 위한 기준 |
💡 캐시를 정리하거나 미리 이미지 빌드를 해두는 방식으로 최적화가 가능하지만, 운영 환경에서는 20GB 이하로 잡는 것은 리스크가 있다는 판단이야.
🛠️ 실무에서 유용한 gp3 설정 팁
1. 기본 설정으로도 충분히 빠르다
- gp3는 기본으로 3,000 IOPS와 125MB/s 처리량을 제공함
- 대부분의 ML API 서버에선 별도 설정 없이도 충분한 속도 보장
2. 성능 수동 설정이 필요할 땐?
예: 로그 처리량이 많거나 디스크 I/O가 병목일 때
aws ec2 modify-volume \
--volume-id vol-xxxxxx \
--iops 6000 \
--throughput 250 \
--size 20
📌 단, 성능 설정은 요금에 영향을 미칠 수 있으니 필요한 경우에만 조절
3. gp2 → gp3 전환은 무중단으로 가능
- AWS 콘솔 또는 CLI로 간단하게 변환 가능
- 데이터 손실 없이 즉시 적용됨
- 스냅샷 불필요