블로그 이미지
LanSaid

calendar

1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

Recent Post

Recent Comment

Recent Trackback

Archive

2026. 1. 25. 22:10 Study/AI Orchestration

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 드라이브로 이전했습니다.

PowerShell
 
# 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)를 매핑하여 가동합니다.

Bash
 
# 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)

핵심 포인트:

  1. ANSI 인코딩: 윈도우 CMD의 한글 깨짐 및 BOM 에러 방지.
  2. 절대 경로 호출: 비로그인 셸 환경에서 도커 경로 유실 방지.
코드 스니펫
 
@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 에이전트를 완성할 차례입니다.

posted by LanSaid