Docker로 로컬 AI 서버 구축 — RTX 3090 삽질기
RTX 3090 GPU로 Docker 기반 로컬 AI 서버를 구축하면서 겪은 삽질과 해결 과정을 공유합니다. NVIDIA Container Toolkit 설정부터 LLM 서빙까지 실전 경험담.
로컬 AI 서버, 왜 필요했나

2025년, OpenAI API 비용이 점점 부담이 됐습니다. 간단한 텍스트 분류 작업에도 월 $50 넘게 나가는 걸 보면서 "내가 직접 돌리면 안 되나?" 생각이 들었습니다.
마침 중고로 RTX 3090 24GB를 65만 원에 구했습니다. VRAM 24GB면 7B~13B 파라미터 모델을 돌리기에 충분하고, 양자화(quantization)를 쓰면 30B급도 가능합니다. 이걸 Docker 컨테이너로 감싸서 API 서버로 만들면, 클라우드 API 없이도 AI 서비스를 운영할 수 있겠다 싶었습니다.
결론부터 말하면: 됩니다. 하지만 삽질이 상당합니다.
하드웨어 구성
CPU: AMD Ryzen 7 5800X (8코어 16스레드)
RAM: 64GB DDR4-3200
GPU: NVIDIA RTX 3090 24GB
SSD: 2TB NVMe (모델 파일이 크므로 필수)
PSU: 850W (3090은 전력 먹는 하마)
여기서 PSU 850W는 최소 사양입니다. RTX 3090은 피크 전력이 350W를 넘기 때문에, 나머지 시스템과 합치면 750W는 써야 합니다. 처음에 650W PSU로 시도했다가 추론 도중 시스템이 꺼지는 참사를 겪었습니다.
삽질 #1: NVIDIA Container Toolkit 설치
Docker에서 GPU를 쓰려면 NVIDIA Container Toolkit이 필요합니다. 공식 문서대로 하면 될 것 같지만, Ubuntu 22.04에서 몇 가지 함정이 있었습니다.
# 기본 설치 (여기까지는 순조로움)
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | \
sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker
함정 1: 드라이버 버전 불일치
호스트의 NVIDIA 드라이버와 컨테이너 내부 CUDA 버전이 맞아야 합니다. 저는 호스트에 드라이버 535를 설치했는데, Docker 이미지가 CUDA 12.3을 요구해서 호환이 안 됐습니다.
# 호스트 드라이버 확인
nvidia-smi
# Driver Version: 535.183.01 CUDA Version: 12.2
# 해결: 드라이버 업그레이드
sudo apt install nvidia-driver-545
sudo reboot
함정 2: Docker Compose에서 GPU 설정
docker-compose.yml에서 GPU를 할당하는 문법이 버전마다 다릅니다:
# docker-compose.yml
services:
llm-server:
image: ghcr.io/ggerganov/llama.cpp:server-cuda
ports:
- "8080:8080"
volumes:
- ./models:/models
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 1
capabilities: [gpu]
environment:
- NVIDIA_VISIBLE_DEVICES=all
runtime: nvidia 대신 deploy.resources 문법을 써야 합니다. 이것 때문에 2시간 날렸습니다.
삽질 #2: 모델 선택과 양자화
24GB VRAM으로 돌릴 수 있는 모델 조합:
| 모델 | 파라미터 | 양자화 | VRAM 사용 | 속도 (tok/s) |
|---|---|---|---|---|
| Llama 3 8B | 8B | Q4_K_M | 6GB | 45 |
| Llama 3 8B | 8B | FP16 | 16GB | 35 |
| Mistral 7B | 7B | Q4_K_M | 5GB | 50 |
| Llama 3 70B | 70B | Q4_K_M | 40GB | ❌ OOM |
| Qwen 2.5 32B | 32B | Q4_K_M | 20GB | 12 |
Hugging Face에서 GGUF 포맷 모델을 다운받아 사용합니다. Q4_K_M 양자화가 품질 대비 속도의 스위트 스팟이었습니다.
# 모델 다운로드
wget https://huggingface.co/TheBloke/Llama-3-8B-GGUF/resolve/main/llama-3-8b.Q4_K_M.gguf \
-O models/llama-3-8b-q4.gguf
삽질 #3: 메모리 관리
RTX 3090의 24GB VRAM은 넉넉해 보이지만, 실제로 모델 로딩 + KV 캐시 + 배치 처리를 하면 빠듯합니다.
# VRAM 모니터링 (필수!)
watch -n 1 nvidia-smi
# 또는 Docker 내부에서
nvidia-smi --query-gpu=memory.used,memory.total,temperature.gpu \
--format=csv -l 5
꿀팁: llama.cpp의 --n-gpu-layers 옵션으로 GPU에 올릴 레이어 수를 조절할 수 있습니다. 모든 레이어를 GPU에 올리지 않고 일부만 올리면 큰 모델도 돌릴 수 있습니다 (대신 느려짐).
# 전체 레이어 GPU 오프로드
llama-server -m models/llama-3-8b-q4.gguf --n-gpu-layers 99 --port 8080
# 부분 오프로드 (VRAM 부족 시)
llama-server -m models/qwen-32b-q4.gguf --n-gpu-layers 40 --port 8080
API 서버 구성
최종적으로 OpenAI 호환 API를 제공하는 서버를 구성했습니다:
# docker-compose.yml로 원클릭 실행
docker compose up -d
# API 테스트
curl http://localhost:8080/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "llama-3-8b",
"messages": [{"role": "user", "content": "안녕하세요"}],
"temperature": 0.7
}'
기존 OpenAI SDK를 쓰던 코드에서 base_url만 바꾸면 됩니다:
from openai import OpenAI
client = OpenAI(
base_url="http://localhost:8080/v1",
api_key="not-needed"
)
전기세 현실
RTX 3090을 24시간 돌리면 전기세가 걱정됩니다. 실측 결과:
- 유휴 시: 시스템 전체 약 80W
- 추론 시: 시스템 전체 약 400W
- 평균 (하루 4시간 추론 기준): 약 200W
월 전기세 계산: 200W × 24h × 30일 = 144kWh × 120원/kWh ≈ **월 17,280원**
OpenAI API 월 $50 (약 65,000원) 대비 75% 절약입니다. 초기 GPU 투자비(65만 원)를 감안해도 10개월이면 본전입니다.
마무리
로컬 AI 서버 구축은 클라우드 API 의존도를 줄이고, 데이터 프라이버시를 확보하는 확실한 방법입니다. RTX 3090이면 실사용 가능한 수준의 LLM을 돌릴 수 있고, Docker로 감싸면 배포와 관리가 깔끔해집니다.
삽질은 불가피하지만, 한번 세팅해두면 그 이후로는 정말 편합니다. 특히 반복적인 텍스트 처리 작업이 많다면 강력 추천합니다.
관련 프로젝트들:
- SysoftI — AI 인프라 및 시스템 통합
- SBM Lab — 바이오 AI 분석 플랫폼
- GenoBalance — 유전체 데이터 분석
- KBrain Map — 뇌과학 AI 연구
참고 링크: