폐쇄망 서버에 AI 모델 서빙 환경(vLLM 등)을 구축하려면 설치 전 환경 점검이 필수입니다.
현재 Podman으로 Ollama를 운용 중인 환경에서 vLLM으로 전환하는 과정, 그 첫 번째 단계.
이 글에서는 반드시 확인해야 할 6가지 항목과 확인 명령어, 결과별 대응 방법을 정리합니다.
📑 목차
1. 왜 사전 점검이 필요한가?
2. 점검 항목 한눈에 보기
3. 기존 Ollama 컨테이너 상태 확인
4. SELinux 상태 확인
5. 방화벽 / 포트 개방 확인
6. 외부 PC 환경 확인
7. 파일 반입 경로 확인
8. GPU 리소스 경합 대비
9. 한방에 돌리는 점검 스크립트


🔹 왜 사전 점검이 필요한가?
폐쇄망 환경은 인터넷 환경과 다릅니다. 에러가 나도 바로 pip install이나 podman pull을 할 수 없죠.
컨테이너 이미지를 USB로 반입하고, 모델 파일 60GB를 망간자료전송으로 넘겼는데, 서버에서 SELinux가 볼륨 마운트를 차단하면?
그 순간부터 "하루 날림 + 재반입" 루프에 빠지게 됩니다.
⚠️ 폐쇄망 삽질 공식
반입 1회 = 반나절 이상. 사전 점검 10분으로 반입 횟수를 최소화하세요.
🔹 점검 항목 한눈에 보기
| # | 점검 항목 | 핵심 명령어 | 실패 시 영향 |
|---|---|---|---|
| 1 | Ollama 컨테이너 상태 | podman ps |
GPU 메모리 경합, 포트 충돌 |
| 2 | SELinux | getenforce |
볼륨 마운트 차단 |
| 3 | 방화벽 / 포트 | firewall-cmd --list-ports |
외부에서 API 접근 불가 |
| 4 | 외부 PC 환경 | podman --version |
이미지 pull/save 불가 |
| 5 | 파일 반입 경로 | df -h + 반입 수단 확인 |
용량 부족, 반입 실패 |
| 6 | GPU 리소스 경합 | nvidia-smi |
OOM, 서비스 시작 실패 |
🔹 점검 1: 기존 Ollama 컨테이너 상태 확인
현재 Podman으로 Ollama가 돌고 있으므로, 어떤 GPU를 점유하고 있는지와 포트 번호를 먼저 파악해야 합니다.
"분명 GPU 3장인데 왜 VRAM이 모자라지?" — 이런 상황의 99%는 기존 컨테이너가 GPU를 잡고 있는 겁니다.
# 1-1. 실행 중인 Ollama 컨테이너 확인
podman ps -a | grep -iE "ollama"
# 1-2. 컨테이너 상세 정보 (GPU 할당, 포트 매핑 등)
podman inspect [컨테이너명] | grep -iE "gpu|device|port"
# 1-3. 현재 Ollama가 어떤 모델을 로드하고 있는지
curl -s http://localhost:11434/api/tags | python3 -m json.tool
# 1-4. GPU 메모리 사용량 및 프로세스 확인
nvidia-smi
# 1-5. 포트 사용 현황 (Ollama 11434, vLLM용 8000)
ss -tlnp | grep -E ":8000|:11434"
💡 결과별 대응
▸ Ollama가 GPU 3장 모두 점유 중 → vLLM 실행 전 podman stop 필수
▸ GPU 1장만 사용 중 → 나머지 2장에서 vLLM 테스트 가능 (단, 30B Dense는 3장 필요)
▸ 포트 8000이 이미 사용 중 → vLLM 실행 시 --port 8001 등으로 변경
▸ 어떤 모델 변형(Dense/MoE/양자화)을 쓰는지 → vLLM 모델 선택에 참고
🔹 점검 2: SELinux 상태 확인
RHEL 계열(CentOS, Rocky, AlmaLinux)에서 가장 많이 발생하는 "왜 안 되지?" 원인 1위.
SELinux가 Enforcing이면 Podman 볼륨 마운트(-v) 시 컨테이너 내부에서 호스트 파일에 접근하지 못합니다.
Ollama는 이미 돌아가고 있으니 큰 문제 없을 수 있지만, vLLM은 모델 경로를 새로 마운트하므로 별도 확인이 필요합니다.
# 2-1. SELinux 현재 상태
getenforce
# 출력: Enforcing / Permissive / Disabled
# 2-2. 설정 파일 확인 (재부팅 후에도 유지되는 설정)
cat /etc/selinux/config | grep ^SELINUX=
# 2-3. 기존 Ollama 컨테이너가 :z 옵션을 쓰고 있는지 확인
podman inspect [ollama컨테이너] | grep -A5 "Mounts"
결과별 대응
Enforcing (가장 흔한 경우) — 3가지 옵션 중 택 1:
# 옵션 A: 볼륨에 :z 레이블 추가 (권장, 보안 유지)
podman run -v /rep/aimon/models:/models:z ...
# 옵션 B: 해당 컨테이너만 SELinux 레이블링 비활성화
podman run --security-opt label=disable -v /rep/aimon/models:/models ...
# 옵션 C: SELinux를 Permissive로 전환 (비권장, 보안 약화)
sudo setenforce 0 # 임시, 재부팅하면 원복
Permissive / Disabled — 별도 조치 불필요.
💡 실전 팁: :z와 :Z는 다릅니다. 소문자 :z는 여러 컨테이너가 공유 가능, 대문자 :Z는 해당 컨테이너 전용. 일반적으로 :z를 쓰세요.
🔹 점검 3: 방화벽 / 포트 개방 확인
서버 자체에서는 잘 되는데, 다른 PC나 서버에서 API에 접근할 수 없다면?firewalld나 iptables가 포트를 막고 있을 가능성이 높습니다.
# 3-1. firewalld 상태 확인
systemctl status firewalld
# 3-2. 열린 포트 목록
sudo firewall-cmd --list-ports
sudo firewall-cmd --list-services
# 3-3. 8000번 포트 개방 (firewalld 사용 시)
sudo firewall-cmd --add-port=8000/tcp --permanent
sudo firewall-cmd --reload
# 3-4. iptables 직접 사용하는 환경이라면
sudo iptables -L -n | grep 8000
💡 확인 포인트: 같은 서버에서만 쓸 거면 (localhost) 방화벽 설정 불필요. 다른 서버에서 호출해야 한다면 반드시 확인하세요. 폐쇄망이라도 내부 네트워크 방화벽은 있을 수 있습니다.
🔹 점검 4: 외부 PC 환경 확인
폐쇄망에 넣을 파일은 인터넷이 되는 외부 PC에서 먼저 다운로드해야 합니다.
이 PC에 Docker나 Podman이 없으면 컨테이너 이미지를 pull → save 할 수가 없습니다.
# 외부 PC에서 확인
# 4-1. Docker 또는 Podman 설치 여부
docker --version 2>/dev/null || podman --version 2>/dev/null
# 4-2. Python + huggingface-cli 설치 여부 (모델 다운로드용)
python3 --version
pip3 show huggingface_hub
# 4-3. 디스크 여유 (이미지 ~8GB + 모델 ~60GB 필요)
df -h
# 4-4. 없으면 설치
# Docker: https://docs.docker.com/get-docker/
# huggingface-cli:
pip3 install huggingface_hub
🔥 자주 놓치는 부분: 외부 PC에서 podman save한 이미지와 서버의 아키텍처가 같은지 확인하세요. 외부 PC가 ARM Mac이면 --platform linux/amd64를 반드시 지정해야 합니다.
🔹 점검 5: 파일 반입 경로 확인
컨테이너 이미지(~8GB)와 모델 파일(~17~60GB)을 어떻게 폐쇄망 안으로 넣을지.
수단에 따라 파일 크기 제한이 있을 수 있어서 사전에 확인이 필요합니다.
| 반입 수단 | 용량 제한 | 비고 |
|---|---|---|
| USB (FAT32) | 파일당 4GB | split 필요 |
| USB (exFAT/NTFS) | 사실상 무제한 | RHEL에서 마운트 가능 여부 확인 |
| 망간자료전송 | 기관별 상이 | 건당 제한 확인 필수 |
| 내부 SCP/SFTP | 네트워크 대역폭 | 내부망 경유 가능 시 |
# 5-1. 서버 디스크 여유 확인
df -h /var/lib/containers /rep/aimon /sw/aimon
# 5-2. USB 마운트 테스트 (exFAT 지원 여부)
sudo mount /dev/sdb1 /mnt/usb
mount | grep usb
# 5-3. exFAT 미지원 시 패키지 확인
rpm -qa | grep -i exfat
# 5-4. 대용량 파일 분할 (FAT32 USB 사용 시)
# 외부 PC에서:
split -b 3900m vllm-openai-latest.tar vllm-part-
# 서버에서:
cat vllm-part-* > vllm-openai-latest.tar
💡 실전 팁: 반입 후 반드시 sha256sum으로 체크섬을 비교하세요. 대용량 파일은 전송 중 깨질 수 있습니다.
# 외부 PC에서 체크섬 생성
sha256sum vllm-openai-latest.tar > checksum.txt
# 서버에서 검증
sha256sum -c checksum.txt
🔹 점검 6: GPU 리소스 경합 대비
vLLM과 Ollama를 동시에 실행하면 GPU 메모리가 부족해집니다.
특히 V100 32GB × 3장으로 30B Dense 모델을 텐서 병렬로 돌리면 거의 100% 점유합니다.
현재 Ollama가 Podman으로 돌아가고 있으므로, 전환 시나리오를 미리 설계해두는 게 좋습니다.
# 6-1. 현재 GPU 메모리 사용량 확인
nvidia-smi --query-gpu=index,name,memory.used,memory.total,memory.free --format=csv,noheader
# 6-2. GPU를 사용 중인 프로세스 상세
nvidia-smi --query-compute-apps=pid,process_name,used_memory --format=csv,noheader
# 6-3. Ollama 컨테이너의 GPU 할당 확인
podman inspect [ollama컨테이너] | grep -i "device"
📋 전환 시나리오: Ollama → vLLM
# Step 1: Ollama 컨테이너 중지
podman stop [ollama컨테이너명]
# Step 2: GPU 메모리 해제 확인 (5~10초 대기)
sleep 5
nvidia-smi # Processes 항목이 비어있는지 확인
# Step 3: vLLM 컨테이너 시작
podman start vllm-server
# 롤백이 필요하면
podman stop vllm-server
podman start [ollama컨테이너명]
🔹 한방에 돌리는 점검 스크립트
위 항목들을 한 번에 확인하는 스크립트입니다. 서버에 접속해서 그대로 복사-붙여넣기 하세요.
#!/bin/bash
# ── 폐쇄망 서버 사전점검 스크립트 ──
# 실행: bash pre-check.sh
echo "========================================"
echo " 폐쇄망 AI 서빙 환경 사전점검"
echo " $(date '+%Y-%m-%d %H:%M:%S')"
echo "========================================"
echo ""
echo "── [1] Ollama 컨테이너 상태 ──"
echo "▸ Podman 컨테이너:"
podman ps -a --format "{{.Names}} {{.Status}} {{.Ports}}" 2>/dev/null | grep -iE "ollama|vllm|tgi" || echo " (AI 관련 컨테이너 없음)"
echo "▸ GPU 프로세스:"
nvidia-smi --query-compute-apps=pid,process_name,used_memory --format=csv,noheader 2>/dev/null || echo " nvidia-smi 실행 불가"
echo "▸ 포트 8000 (vLLM용):"
ss -tlnp 2>/dev/null | grep :8000 || echo " (사용 안 함 ✅)"
echo "▸ 포트 11434 (Ollama):"
ss -tlnp 2>/dev/null | grep :11434 || echo " (사용 안 함)"
echo ""
echo "── [2] SELinux ──"
echo "▸ 현재 상태: $(getenforce 2>/dev/null || echo '확인 불가')"
echo "▸ 설정 파일: $(grep ^SELINUX= /etc/selinux/config 2>/dev/null || echo '파일 없음')"
echo ""
echo "── [3] 방화벽 ──"
echo "▸ firewalld 상태: $(systemctl is-active firewalld 2>/dev/null)"
echo "▸ 열린 포트:"
sudo firewall-cmd --list-ports 2>/dev/null || echo " firewalld 비활성 또는 권한 없음"
echo ""
echo "── [4] GPU 상태 ──"
nvidia-smi --query-gpu=index,name,memory.used,memory.total,memory.free --format=csv 2>/dev/null || echo "nvidia-smi 실행 불가"
echo ""
echo "── [5] 디스크 여유 ──"
df -h /var/lib/containers /rep/aimon /sw/aimon /tmp 2>/dev/null || df -h
echo ""
echo "── [6] Podman 버전 ──"
podman --version 2>/dev/null || echo "Podman 미설치"
echo ""
echo "========================================"
echo " 점검 완료"
echo "========================================"
💡 점검 결과 기록하기
스크립트 출력을 파일로 저장해두면 나중에 트러블슈팅할 때 참고하기 좋습니다.
bash pre-check.sh 2>&1 | tee pre-check-result-$(date +%Y%m%d).txt
⚠️ 점검은 했는데 막히는 게 있다면?
▸ SELinux나 방화벽 설정 변경은 서버 관리자 권한이 필요할 수 있습니다. 인프라 팀에 미리 요청하세요.
▸ USB exFAT 마운트가 안 되면 tar로 3.9GB씩 분할 후 FAT32 USB로 반입하세요.
▸ GPU 프로세스가 누구 건지 모르겠으면 ps -p [PID] -o user,cmd로 확인하세요.
폐쇄망에서 AI 서빙 환경을 구축하는 건 인터넷 환경과는 차원이 다른 인내심이 필요합니다.
하지만 이 6가지 사전 점검만 해두면 "설치 후 삽질"을 대폭 줄일 수 있어요.
다음 글에서는 실제로 vLLM 컨테이너 이미지와 모델 파일을 폐쇄망으로 반입하는 과정을 다룹니다.
← 이전 글
첫 번째 글입니다
다음 글 →
EP.2 컨테이너 이미지 & 모델 반입 (준비중)
🔧 폐쇄망 Ollama→vLLM 전환기
✔ EP.1 서버 환경 사전 점검 ← 현재 글
EP.2 컨테이너 이미지 & 모델 반입
EP.3 vLLM 실행 및 트러블슈팅
EP.4+ 성능 튜닝 & 운영 (계속 업데이트)
'DEV & DevOps > Backend' 카테고리의 다른 글
| 폐쇄망 Ollama→vLLM 전환기 EP.2 — 컨테이너 이미지 & 모델 반입 (0) | 2026.03.24 |
|---|---|
| macOS 서버 초기 세팅 — 헤드리스 최적화 완벽 가이드 [Mac Mini 홈서버 완전 정복 2/10] (0) | 2026.03.24 |
| 왜 Mac Mini인가? — 홈서버 하드웨어 선택 가이드 [Mac Mini 홈서버 완전 정복 1/10] (0) | 2026.03.22 |
| RAG 임베딩 파이프라인에 최적화된 문서 작성법 | 검색 정확도를 높이는 문서 구조 가이드 (1) | 2026.03.20 |
| Docker Compose 설정 옵션 완벽 가이드 — 실무에서 자주 쓰는 옵션 총정리 (1) | 2026.03.20 |