원도우에서 로컬 AI Llama 서버 백그라운드 실행 및 자동 종료 파이썬으로 완벽 구현하기

원도우에서 로컬 AI Llama 서버 백그라운드 실행 및 자동 종료 파이썬으로 완벽 구현하기

내 컴퓨터에서 직접 돌리는 인공지능, AI Llama 서버 백그라운드에서 실행하는 방법을 알아보려고 합니다. Ollama나 llama.cpp 같은 도구로 나만의 AI를 구축하는 할때 요긴하게 사용할수 있습니다.

AI 프로그램을 만들다 보면 한 가지 불편한 점이 생깁니다.

바로 “검은색 터미널 창이 계속 떠 있는 것”과 “내가 만든 프로그램을 껐는데 AI 서버는 뒤에서 계속 돌아가고 있는 상황”이죠. 이 문제를 해결하기 위해 파이썬(Python)의 subprocesspsutil 라이브러리를 활용해서, 서버를 숨겨서 실행하고 프로그램 종료와 동시에 깔끔하게 자원까지 회수하는 방법을 알아볼께요

보통 Llama 서버(llama-server.exe)를 실행하면 윈도우 프롬프트 창이 하나 크게 뜹니다. 개발 중에는 로그를 볼 수 있어 좋지만, 실제로 서비스를 운영하거나 AI 프로그램을 만들 때는 이 창이 여간 거슬리는 게 아닙니다.

터미널 창을 숨겨서 자동 실행하게 하면

  • 시각적 깔끔함: 바탕화면에 불필요한 창이 뜨지 않습니다.
  • 리소스 관리: 내가 메인 프로그램을 끄면 AI 서버도 같이 꺼져야 소중한 그래픽카드(GPU)의 VRAM을 낭비하지 않습니다.
  • 자동화: 일일이 서버를 켜고 끌 필요 없이, 코드 한 줄로 모든 과정을 제어할 수 있습니다.

이제 본격적으로 바로 복사해서 사용할 수 있는 최적화된 코드를 살펴보겠습니다.

Llama 서버 백그라운드 제어 코드

아래 코드는 윈도우 환경을 기준으로 작성했어요

import os
import subprocess
import time
import psutil

# [설정 변수] 사용자 환경에 맞춰 경로를 수정하세요
# 예: G드라이브의 naver_ai 폴더 안에 있는 파일들
SERVER_PATH = r"G:\naver_ai\llama-server.exe"
MODEL_PATH = r"G:\naver_ai\HyperCLOVA-X-v3-q4_k_m.gguf"

# 전역 프로세스 변수 (서버 상태를 추적합니다)
llama_process = None

def start_llama_server(gpu_layers=24, port=8080):
    """
    Llama 서버를 백그라운드에서 실행하는 함수입니다.
    gpu_layers: GPU로 보낼 모델 레이어 수 (그래픽카드 성능에 따라 조절)
    port: 서버가 사용할 포트 번호
    """
    global llama_process
    
    # 실행 명령어 구성
    command = [
        SERVER_PATH,
        "-m", MODEL_PATH,
        "-ngl", str(gpu_layers),
        "--port", str(port),
        "-c", "4096"  # 컨텍스트 사이즈(기억력 범위) 설정
    ]

    try:
        # 윈도우에서 검은 창을 띄우지 않는 핵심 설정 (CREATE_NO_WINDOW)
        llama_process = subprocess.Popen(
            command,
            stdout=subprocess.PIPE,
            stderr=subprocess.STDOUT,
            text=True,
            encoding="utf-8",
            errors="replace",
            creationflags=subprocess.CREATE_NO_WINDOW if os.name == "nt" else 0
        )
        
        print(f"Llama 서버를 백그라운드에서 시작합니다... (포트: {port})")
        
        # 모델 로드 대기 (모델 크기에 따라 10~20초 정도 여유를 줍니다)
        time.sleep(10)
        print("AI 서버가 준비되었습니다. 이제 요청을 보낼 수 있습니다.")
        
    except Exception as e:
        print(f"서버 실행 중 오류가 발생했습니다: {e}")

def stop_llama_server():
    """
    실행 중인 Llama 서버와 그에 딸린 모든 자식 프로세스를 완전히 종료합니다.
    """
    global llama_process
    
    if llama_process and llama_process.poll() is None:
        try:
            # psutil을 사용하여 메인 프로세스 정보 가져오기
            parent = psutil.Process(llama_process.pid)
            
            # 모든 자식 프로세스까지 추적하여 종료 (좀비 프로세스 방지)
            for child in parent.children(recursive=True):
                child.kill()
                
            parent.kill()
            print("Llama 서버와 관련 리소스를 모두 안전하게 정리했습니다.")
            
        except psutil.NoSuchProcess:
            print("이미 종료되었거나 찾을 수 없는 프로세스입니다.")
        except Exception as e:
            print(f"종료 처리 중 문제가 발생했습니다: {e}")
    else:
        print("현재 실행 중인 Llama 서버가 없습니다.")

# --- 실제 사용 예시 ---
if __name__ == "__main__":
    try:
        # 1. 서버 켜기
        start_llama_server()
        
        # 2. 여기서 AI를 이용한 작업을 수행합니다.
        print("AI 작업 수행 중...")
        time.sleep(5) 
        
    finally:
        # 3. 프로그램이 끝나면(에러가 나더라도) 반드시 서버를 끕니다.
        stop_llama_server()

AI Llama 서버 백그라운드 코드 내용

1. CREATE_NO_WINDOW의 마법

subprocess.Popen을 사용할 때 creationflags 옵션에 이 값을 주면, 윈도우 시스템에게 “이 프로그램은 창 없이 몰래 실행해줘”라고 부탁하는 것과 같습니다. 덕분에 작업 표시줄에도 나타나지 않고 오직 ‘작업 관리자’의 세부 정보 탭에서만 보이게 됩니다.

2. 왜 psutil을 써야 하나요?

파이썬 기본 함수인 terminate()만 쓰면 가끔 서버가 죽지 않고 ‘유령’처럼 살아남아 메모리(VRAM)를 계속 점유하는 일이 생깁니다. psutil 라이브러리는 해당 프로세스가 낳은 ‘자식 프로세스’까지 일일이 찾아내서 확실하게 종료시키기 때문에 시스템 자원을 관리하는 데 훨씬 강력합니다.

3. time.sleep(10)은 기다림

Llama 모델 파일(.gguf)은 보통 몇 GB씩 합니다. 이 큰 파일을 그래픽카드로 올리는 데 시간이 걸리는데, 서버를 켜자마자 질문을 던지면 “아직 준비 안 됐어!”라는 에러가 납니다. 넉넉하게 10초 정도 기다려 주는 것이 정신 건강에 좋습니다.

4. stdout=subprocess.PIPE 설정

서버가 동작하면서 뱉어내는 수많은 텍스트 로그들을 파이썬 내부 통로(Pipe)로 가둬버립니다. 이렇게 하면 내 메인 프로그램의 화면이 서버 로그로 지저분하지 않아 훨씬 깔끔한 사용자 환경을 만들 수 있습니다.

이 방법은 단순히 서버를 켜는 데 그치지 않고 다양한 분야에 적용할 수 있습니다.

  • 로컬 LLM 자동화: 파이썬 스크립트 하나로 모델 로드부터 답변 생성, 종료까지 한 번에 처리
  • GPU VRAM 최적화: AI를 쓰지 않을 때는 서버를 즉시 종료하여 게임이나 다른 작업에 그래픽카드를 양보할 수 있습니다.
  • 윈도우 서비스 구현: 내 프로그램을 항상 켜두지 않아도 필요할 때만 AI 서버를 백그라운드에서 소환하세요.
  • 개인용 AI 비서: 자동 프로그램 툴을 만들 때 이 코드는 핵심 엔진이 됩니다.

오늘은 윈도우 환경에서 Llama 서버를 백그라운드에서 제어하는 방법을 알아봤습니다. subprocesspsutil이라는 강력한 도구만 있으면 AI 프로그램은 좀 더 쉽게 실행할 수 있답니다.”

댓글 남기기