vLLM을 활용한 로컬 SLM(소형 언어 모델) 고성능 서빙 완벽 가이드

📌 Executive Summary 초고속 LLM/SLM 서빙 엔진: vLLM은 PagedAttention 알고리즘을 도입하여 KV 캐시의 메모리 낭비를 가상 메모리 페이징 기법으로 96% 이상 줄이고, 기존 Hugging Face 대비 최대 24배 이상의 동시 처리량(Throughput)을 제공합니다. 로컬 SLM(소형 언어 모델)과의 최적 궁합: Qwen2.5-7B, Llama-3.2, Gemma-3 등 1B7B 급 SLM을 vLLM으로 구동하면 단일 GPU(VRAM 816GB) 환경에서도 극도로 낮은 지연 시간(Low Latency)과 실시간 스트리밍 처리가 가능합니다. OpenAI 표준 API 기본 내장: 추가 코드 없이 서버 구동 즉시 /v1/chat/completions 엔드포인트를 제공하여 기존 상용 LLM 클라이언트 코드를 그대로 재사용할 수 있습니다. 📊 리포트 개요 및 프레임워크 비교 항목 세부 내용 보고서 주제 vLLM 기반 로컬 소형 언어 모델(SLM) 고성능 추론 및 서빙 최적화 가이드 핵심 기술 PagedAttention, Continuous Batching, AWQ/GPTQ 양자화, OpenAI API Server 사전 요구사항 NVIDIA GPU (최소 8GB+ VRAM 권장), Python 3.8+ / CUDA 12.x 또는 Docker 추천 대상 모델 Qwen2.5-7B-Instruct, Llama-3.2-3B, Gemma-2-9B 등 🥊 vLLM vs Ollama 핵심 비교 분석 비교 항목 vLLM (프로덕션/서빙 특화) Ollama (로컬 개발/개인 챗봇 특화) 주요 목적 고처리량 프로덕션 서빙, 멀티 유저 API 백엔드 초간편 로컬 테스트, 개인용 CLI 대화 추론 백엔드 엔진 PagedAttention + CUDA 커스텀 커널 llama.cpp (GGUF 기반 CPU/GPU 하이브리드) 동시 다중 요청 처리 연속 배치(Continuous Batching) 로 동시 요청 극대화 제한적 동시성 (단일 요청 순차 처리에 최적화) 모델 형식 지원 Hugging Face SafeTensors, AWQ, GPTQ, FP8 GGUF 단일 바이너리 파일 API 호환성 OpenAI REST API 네이티브 100% 호환 독자 API + OpenAI 에뮬레이션 레이어 설치 및 운영 난이도 Python 가상환경 / CUDA / Docker 필요 (중급) 원클릭 인스톨러 / CLI 기반 (초급) 권장 사용처 사내 서비스 API 백엔드, RAG 에이전트 다중 접속 로컬 PC 개인 테스트, 데스크톱 UI 연동 🔍 핵심 분석 1. vLLM 아키텍처 및 SLM 서빙의 이점 대규모 언어 모델 서빙에서 가장 큰 병목은 생성 토큰마다 누적되는 KV(Key-Value) 캐시 메모리 낭비와 **요청 대기 지연(Latency)**입니다. ...

August 7, 2026 · 6 min

GitHub Actions Docker 빌드 최적화 및 GHCR 배포 가이드

GitHub Actions를 사용하여 컨테이너 이미지를 빌드하고 **GHCR(GitHub Container Registry)**에 자동 배포할 때, Buildx와 **GitHub Actions 전용 빌드 캐시(type=gha)**를 적용하여 CI/CD 시간을 크게 단축하는 워크플로우 가이드입니다. 1. 주요 특징 및 이점 GHCR 활용: 별도의 Docker Hub 계정이나 외부 레지스트리 비번 설정 없이 GITHUB_TOKEN 인증만으로 안전하게 컨테이너 레지스트리에 푸시. type=gha 캐시: 빌드 레이어 캐시를 GitHub Actions 백엔드에 저장하여 동일한 의존성 재빌드 시간을 극적으로 줄임 (최대 80%+ 속도 향상). Multi-platform 지원: QEMU를 연동하여 linux/amd64와 linux/arm64 이미지를 단일 작업에서 동시 생성. 2. GitHub Actions 워크플로우 작성 .github/workflows/docker-build.yml 경로에 아래 내용을 작성합니다. ...

August 6, 2026 · 3 min

Ollama + Open-WebUI로 로컬 프라이빗 AI 챗봇 구축 가이드

최근 로컬 환경에서 오픈소스 대형 언어 모델(LLM)을 실행할 수 있는 Ollama와 ChatGPT 스타일의 웹 인터페이스를 제공하는 Open-WebUI를 조합하여 기업 내부나 로컬PC에 프라이빗 AI 챗봇 환경을 구축하는 사례가 늘고 있습니다. 이 가이드에서는 Docker Compose를 활용하여 GPU 가속이 지원되는 프라이빗 AI 챗봇 시스템을 손쉽게 구축하는 방법을 설명합니다. 1. 아키텍처 개요 Ollama: Llama 3.1, Gemma 2, Mistral, Qwen 2.5 등 오픈소스 LLM 모델을 로컬에서 효율적으로 실행하고 REST API를 제공하는 백엔드 엔진. Open-WebUI: Ollama REST API와 연동하여 웹 브라우저에서 대화, 모델 변경, 문서 기반 RAG(Retrieval-Augmented Generation), 사용자 관리 등을 지원하는 웹 프론트엔드. [ 웹 브 라 우 저 ( 사 용 자 ) ] ─ ─ ( H T T P 3 0 0 0 ) ─ ─ > [ O p e n - W e b U I ] ─ ─ ( R E S T 1 1 4 3 4 ) ─ ─ > [ O l l a m a 엔 진 ( N V I D I A G P U ) ] 2. 사전 준비사항 Docker & Docker Compose 설치 완료 NVIDIA GPU 드라이버 및 NVIDIA Container Toolkit 설치 완료 (GPU 사용 시) GPU가 없더라도 CPU 모드로 실행 가능합니다. 3. Docker Compose 구성 docker-compose.yml 파일을 작성하여 Ollama와 Open-WebUI 서비스를 구성합니다. ...

August 6, 2026 · 3 min

자주 쓰는 Docker 명령어 정리

Docker 환경에서 컨테이너 생성 및 실행, 이미지 관리, 네트워크/볼륨 처리, 시스템 자원 정리 및 Docker Compose 사용 시 자주 사용하는 핵심 명령어 모음입니다. 1. 컨테이너 생성 및 실행 (Container Lifecycle) 컨테이너 생성 및 실행 (docker run) # 기본 실행 (데몬 방식 백그라운드 -d) docker run -d --name my-nginx -p 80:80 nginx # 대화형 인터랙티브 터미널 접속 실행 (-it) docker run -it --name ubuntu-test ubuntu:22.04 /bin/bash # 컨테이너 종료 시 자동 삭제 (--rm) docker run --rm -it python:3.10 python -c "print('Hello Docker')" # 환경 변수 전달 (-e) 및 볼륨 마운트 (-v) docker run -d --name my-db \ -e MYSQL_ROOT_PASSWORD=secret \ -v /host/data:/var/lib/mysql \ -p 3306:3306 mysql:8.0 컨테이너 상태 조회 (docker ps) docker ps # 현재 실행 중인 컨테이너 목록 docker ps -a # 종료된 컨테이너를 포함한 모든 컨테이너 목록 docker ps -q # 컨테이너 ID만 출력 컨테이너 제어 (시작 / 중지 / 재시작 / 삭제) docker start my-nginx # 정지된 컨테이너 시작 docker stop my-nginx # 실행 중인 컨테이너 안전 종료 (SIGTERM) docker kill my-nginx # 강제 종료 (SIGKILL) docker restart my-nginx # 컨테이너 재시작 docker rm my-nginx # 중지된 컨테이너 삭제 docker rm -f my-nginx # 실행 중인 컨테이너 강제 삭제 docker rm $(docker ps -aq) # 모든 중지된 컨테이너 일괄 삭제 2. 컨테이너 접속 및 내부 상태 확인 실행 중인 컨테이너 명령 실행 및 접속 # 실행 중인 컨테이너의 bash/sh 터미널 접속 docker exec -it my-nginx /bin/bash # 접속하지 않고 컨테이너 내부 명령 단발성 실행 docker exec my-nginx ls -la /usr/share/nginx/html 로그 확인 (docker logs) docker logs my-nginx # 전체 로그 출력 docker logs -f my-nginx # 실시간 로그 스트리밍 (Tail -f 개념) docker logs --tail 100 -f my-nginx # 최근 100줄 출력 후 실시간 스트리밍 docker logs --timestamps my-nginx # 타임스탬프와 함께 로그 출력 상태 모니터링 & 세부 정보 조회 docker stats # 모든 실행 중인 컨테이너 CPU/RAM/네트워크 실시간 모니터링 docker stats my-nginx # 특정 컨테이너 리소스 모니터링 docker top my-nginx # 컨테이너 내부 실행 중인 프로세스 목록 docker inspect my-nginx # 컨테이너의 상세 메타데이터(IP, 바인드 마운트, 환경변수 등) JSON 출력 3. 도커 이미지 관리 (Image Management) 이미지 조회 및 검색 docker images # 다운로드된 이미지 목록 출력 docker search nginx # Docker Hub에서 이미지 검색 이미지 빌드 / 다운로드 / 삭제 # Docker Hub에서 이미지 다운로드 docker pull ubuntu:22.04 # Dockerfile 기반 이미지 빌드 docker build -t my-app:v1.0 . docker build --no-cache -t my-app:v1.0 . # 캐시 없이 깨끗하게 빌드 # 이미지 태그 지정 및 푸시 docker tag my-app:v1.0 myregistry.com/my-app:v1.0 docker push myregistry.com/my-app:v1.0 # 이미지 삭제 docker rmi ubuntu:22.04 docker rmi -f my-app:v1.0 # 강제 삭제 docker rmi $(docker images -f "dangling=true" -q) # 태그 없는 댄글링(Dangling) 이미지 삭제 4. 볼륨 & 네트워크 관리 볼륨 (Volume) 관리 docker volume ls # 볼륨 목록 조회 docker volume create my-vol # 새 볼륨 생성 docker volume inspect my-vol# 볼륨 저장 경로 및 정보 확인 docker volume rm my-vol # 볼륨 삭제 docker volume prune # 사용하지 않는 모든 볼륨 정리 네트워크 (Network) 관리 docker network ls # 네트워크 목록 조회 docker network create my-net# 사용자 정의 브릿지 네트워크 생성 docker network inspect my-net# 네트워크 연결 정보 및 IP 확인 docker network connect my-net my-container # 컨테이너를 특정 네트워크에 연결 docker network disconnect my-net my-container # 네트워크 연결 해제 docker network rm my-net # 네트워크 삭제 5. 시스템 청소 및 디스크 자원 정리 (Cleanup) # 도커 디스크 사용량 확인 docker system df # 미사용 자원(중지된 컨테이너, 미사용 네트워크, 댄글링 이미지 등) 일괄 정리 docker system prune # 미사용 볼륨 및 사용되지 않는 모든 이미지까지 포함하여 완전 정리 (주의!) docker system prune -a --volumes 6. 파일 복사 및 백업 / 아카이브 컨테이너 ↔ 호스트 간 파일 복사 (docker cp) # 호스트 파일 -> 컨테이너 내부로 복사 docker cp ./index.html my-nginx:/usr/share/nginx/html/index.html # 컨테이너 파일 -> 호스트로 복사 docker cp my-nginx:/etc/nginx/nginx.conf ./nginx.conf 이미지 파일 백업 / 로드 (save & load) # 이미지를 tar 압축 파일로 저장 (폐쇄망 전송용) docker save -o my-app.tar my-app:v1.0 # tar 아카이브 파일에서 이미지 복원 docker load -i my-app.tar 7. Docker Compose 주요 명령어 docker-compose v2 표준인 docker compose 명령어 사용 기준입니다. ...

August 6, 2026 · 4 min

Docker 컨테이너 환경에서 호스트 GUI Display 연동하기

Docker 컨테이너 환경에서 호스트에 GUI Display 연결 방법 Ubuntu Bash 환경에서 Docker 실행 시 아래와 같은 옵션 추가 필요 # 현재 Display 확인 echo $DISPLAY :1 # xhost 명령은 X서버에 대한 접근 제어(access control)를 설정하기 위해 사용 # xhost + 는 모든 호스트의 접근을 허용하는 명령이므로 로컬 개발 환경에서만 사용 권장 # 컨테이너에만 접근을 허용하려면 xhost +local:docker 사용을 권장 xhost +local:docker # Docker 실행 시 Display 연결 docker run -it \ -v /tmp/.X11-unix:/tmp/.X11-unix \ -e DISPLAY=unix$DISPLAY \ --name <your-container-name> \ <your-docker-image-name> 참고: bash에서 줄 끝 \ 뒤에는 공백이나 다른 문자가 없어야 줄 연속(line continuation)으로 인식됨. 뒤에 공백이 있으면 명령이 그 줄에서 끝난 것으로 처리되어 오류가 발생할 수 있음 Docker 실행 후 GUI 연결 확인 # 테스트를 위한 GUI 앱 실행 (예: xeyes) xeyes

February 1, 2024 · 1 min