8845HS를 활용한 분산 AI RAG 서버 구축 및 자동화 가이드
0. 서론: 왜 분산 인프라인가?
대규모 언어 모델(LLM)과 벡터 데이터베이스(Vector DB)를 한 장비에서 돌리는 것은 VRAM과 시스템 자원 간의 전쟁을 야기합니다. 저는 **5950X(추론 노드)**와 **8845HS(지식 노드)**를 분리하여, 추론 성능을 극대화하면서도 언제든 확장 가능한 RAG(Retrieval-Augmented Generation) 시스템을 구축했습니다.
1. 인프라 설계 (Architecture)
- Inference Node (5950X): vLLM 기반 LLM 서빙 (RTX 50xx Multi-GPU).
- Knowledge Node (8845HS): Qdrant 기반 벡터 데이터베이스 및 지식 인덱싱.
- Bridge: REST API 및 전용 Python Orchestrator (agent.py).
2. 환경 구축: WSL2 & Docker 최적화
2.1 WSL2 인스턴스 스토리지 이전
8845HS의 시스템 드라이브 부하를 줄이기 위해 WSL2(Ubuntu)를 D 드라이브로 이전했습니다.
# WSL 인스턴스 내보내기 및 가져오기 (예시)
wsl --export Ubuntu D:\AI\backup\ubuntu.tar
wsl --unregister Ubuntu
wsl --import Ubuntu D:\AI\WSL\Ubuntu D:\AI\backup\ubuntu.tar
2.2 Docker Desktop Integration 트러블슈팅
인스턴스 이전 후 docker.sock 연결 오류나 docker command not found 문제가 발생할 수 있습니다.
- 해결: Docker Desktop 설정 내 Resources > WSL Integration에서 해당 배포판 스위치를 Toggle(Off -> On) 하여 심볼릭 링크를 재생성합니다.
3. 지식 저장소 가동: Qdrant Deployment
Qdrant는 가볍고 빠르며 분산 환경에 적합합니다. Docker를 통해 영구 저장소(Persistent Storage)를 매핑하여 가동합니다.
# 8845HS Ubuntu Terminal
docker run -d --name qdrant \
-p 6333:6333 -p 6334:6334 \
-v ~/qdrant_storage:/qdrant/storage:z \
qdrant/qdrant
4. 시니어의 자동화: Batch Scripting
매번 터미널을 열어 명령어를 치는 것은 비효율적입니다. 부팅 시나 작업 시작 시 원클릭으로 가동하는 배치 파일을 작성했습니다.
✅ Qdrant 가동 스크립트 (Qdrant_Start.bat)
핵심 포인트:
- ANSI 인코딩: 윈도우 CMD의 한글 깨짐 및 BOM 에러 방지.
- 절대 경로 호출: 비로그인 셸 환경에서 도커 경로 유실 방지.
@echo off
title 8845HS Qdrant Starter
echo ======================================================
echo [NODE_NAME] Knowledge Server Starter
echo ======================================================
echo [1/2] Qdrant 컨테이너 가동 확인 중...
:: WSL 내부의 도커 절대 경로를 직접 호출
wsl -d Ubuntu -u [USER_ID] /usr/bin/docker start qdrant
:: 가동 상태 확인
wsl -d Ubuntu -u [USER_ID] /usr/bin/docker ps | findstr qdrant > nul
if %errorlevel% neq 0 (
echo [!] 오류: Qdrant 가동 실패. Docker 상태를 확인하세요.
pause & exit
)
echo [✓] 서버가 정상 가동 중입니다. (Port: 6333)
echo.
echo [2/2] 로그 실시간 출력 (종료: Ctrl+C)
wsl -d Ubuntu -u [USER_ID] /usr/bin/docker logs -f qdrant
✅ 자원 회수 및 클린 종료 스크립트 (Stop_Services.bat)
8845HS는 저전력 프로세서이지만, WSL2와 Docker가 점유하는 RAM은 무시할 수 없습니다. 작업 종료 시 VRAM(사용 시)과 시스템 메모리를 완전히 윈도우로 반환하는 것이 포인트입니다.
[스크립트 내용]
주의: 메모장에서 작성 후 반드시 **인코딩을 'ANSI'**로 설정하여 저장하세요.
@echo off
:: 보안을 위해 [USER_ID] 부분을 본인의 환경에 맞게 수정하세요.
title 8845HS AI Resource Reclaiming
echo ======================================================
echo 8845HS AI Services - Graceful Shutdown
echo ======================================================
echo [1/2] Qdrant 컨테이너 중지 중...
:: 데이터 유실 방지를 위해 강제 종료가 아닌 'stop' 명령을 사용합니다.
wsl -d Ubuntu -u [USER_ID] /usr/bin/docker stop qdrant
if %errorlevel% equ 0 (
echo [✓] Qdrant 컨테이너가 정상적으로 종료되었습니다.
) else (
echo [!] 알림: 실행 중인 Qdrant 컨테이너가 없거나 종료 중 오류가 발생했습니다.
)
echo.
echo [2/2] WSL2 인스턴스 완전 종료 및 메모리 반환...
:: 단순히 컨테이너를 끄는 것만으로는 부족한 vmmem(RAM) 점유를 완전히 해제합니다.
wsl --shutdown
echo.
echo [✓] 모든 AI 자원이 시스템으로 반환되었습니다.
echo ======================================================
pause
📝 블로그를 위한 기술적 해설 (Post Commentary)
이 스크립트를 블로그에 올리실 때 아래와 같은 해설을 덧붙이면 시니어 개발자의 통찰력이 돋보이는 포스팅이 됩니다.
1. 왜 docker stop인가?
도커 컨테이너를 단순히 죽이는 것이 아니라 stop 명령어를 사용하는 이유는 데이터 무결성 때문입니다. Qdrant와 같은 데이터베이스는 종료 신호(SIGTERM)를 받았을 때 메모리의 데이터를 디스크로 안전하게 플러시(Flush)하는 과정이 필요합니다.
2. wsl --shutdown의 마법
WSL2는 리눅스 커널을 가상화하여 돌리기 때문에, 내부 프로세스가 끝나도 윈도우 작업 관리자에서 vmmem이라는 프로세스가 여전히 수 GB의 RAM을 잡고 있는 경우가 많습니다. wsl --shutdown은 이 가상 머신 자체를 완전히 내려버림으로써 8845HS의 소중한 시스템 자원을 즉시 100% 회수합니다.
3. 절대 경로 및 인코딩 이슈 해결
앞선 포스팅에서 언급했듯, 배치 파일에서 wsl 명령어를 호출할 때는 환경 변수 미로드로 인한 경로 오류가 잦습니다. 따라서 /usr/bin/docker와 같은 절대 경로를 사용하고, ANSI 인코딩으로 저장하여 CMD 환경에서의 예외 상황을 원천 차단했습니다.
5. 마치며: 인프라 구축 후기
분산 환경 구축의 핵심은 **'가시성'**과 **'자동화'**입니다. 8845HS는 저전력임에도 강력한 CPU 성능을 갖춰 RAG 노드로써 최적의 퍼포먼스를 보여주었습니다. 이제 이 기억 저장소에 데이터를 채워 넣어, 나만의 AI 에이전트를 완성할 차례입니다.
'Study > AI Orchestration' 카테고리의 다른 글
| AI Orchestration 구축 시작2 - 추론서버 구축 (1) | 2026.01.25 |
|---|---|
| AI Orchestration 구축 시작1 - 하드웨어 준비 (0) | 2026.01.25 |
| AI Orchestration 를 시작해보기로 했습니다. (0) | 2026.01.25 |