[LLM] 윈도우에서 vLLM 서빙하기

Sngmng·2026년 2월 13일
post-thumbnail

개요.

  • vLLM은 LLM의 응답성과 메모리 활용성을 높여 빠른 추론이 가능하게 해주는 LLM 서빙 엔진임.
  • vLLM은 리눅스 환경에서 실행가능함.
  • 따라서, 이 가이드는 Windows 환경에서 WSL(Windows Subsystem for Linux)를 활용해 vLLM을 실행하는 방법을 안내하는 것을 목적으로함.

WSL 이란?

  • WSL은 Windows와 Linux 커널 간의 가상화를 사용한 실행 환경을 제공합니다.
  • WSL(Windows Subsystem for Linux)은 Windows 환경에서 Linux환경을 네이티브하게 실행 가능하도록 해줍니다. (Virtual Machine보다 빠름)

0. BIOS 및 Windows 기능 설정

0-1. BIOS 진입
0-2. 메뉴에서 Virtualization 항목을 Enable로 설정
0-3. Windows 기능 켜기/끄기 진입

0-4. 아래 항목 체크 및 활성화

  • Hyper-V
  • Windows 하이퍼바이저 플랫폼
  • 가상화 머신 플랫폼

1.WSL 환경 설치.

WSL 설치

1-1. Powershell을 통해 설치 가능한 리눅스 기반 운영체제 확인

wsl --list --online

1-2. WSL 내 운영체제 설치

wsl --install 

2.VScode 환경에서 WSL 연결

WSL에서 VS Code 사용시작

2-1. VSCode 내 확장 프로그램 중 WSL 설치

2-2. WSL 연결
Ctrl + Shift + P 단축키 -> WSL:Connect to WSL 실행

3.vLLM 및 FastAPI 스크립트 작성 및 실행

3-1. vLLM 실행

  • Port 8000번을 통해 송수신 합니다 .

3-2 Uvicorn을 통해 FastAPI 서버 실행

  • Port 5001번을 통해 송수신 합니다.

4.Port Forwarding

  • WSL 환경에서 구축된 서비스와 외부간의 FastAPI 통신을 위해 포트포워딩을 진행해야합니다.
  • 포트포워딩(Port Forwarding) 이란?
    외부에서 접속 요청된 접속을 내부 서비스(이 경우에는 WSL 내 FastAPI를 의미)로 중계해주는 것을 말합니다.

4-1. WSL 내부 ip 확인

# 설치
sudo apt-get install net-tools
# 실행
ifconfig

4-2. Openssh-server 재설치 (권장)
wsl 설치 시 openssh-server도 함께 설치되나, 문제가 있다는 이야기가 있어 재설치를 권장합니다

sudo apt remove openssh-server # 기존 설치 삭제 
sudo apt update # 패키지 업데이트
sudo apt install openssh-server # 재설치

4-3. openssh-server 설정 변경

# sshd_config
sudo vim /etc/ssh/sshd_config

# Port 22를 주석해제
Port 22

# PasswordAuthentication no 또는 주석을 변경
PasswordAuthentication yes

# 서버 재시작
sudo service ssh --full-restart

4-4. 포트 포워딩을 위한 스크립트(.ps1) 작성

  • WSL이 설치된 윈도우 운영체제에서 작성 후 powershell을 통해 실행합니다.
  • 다음 코드를 .ps1 확장자로 작성합니다.
$remoteport = bash.exe -c "ifconfig eth0 | grep 'inet '"
$found = $remoteport -match '\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}';

if( $found ){
    $remoteip = $matches[0];
} else {
    Write-Host "WSL IP를 찾을 수 없어 종료합니다."
    exit;
}

# 1. 방화벽 규칙 설정 (Windows 외부에서 접속할 포트들)
$external_ports = @(8080, 22); 
$addr = '0.0.0.0';

iex "Remove-NetFireWallRule -DisplayName 'WSL 2 Firewall Unlock' -ErrorAction SilentlyContinue"
iex "New-NetFireWallRule -DisplayName 'WSL 2 Firewall Unlock' -Direction Inbound -LocalPort ($external_ports -join ',') -Action Allow -Protocol TCP"

# 2. 포트 매핑 실행
# SSH (22 -> 22)
netsh interface portproxy delete v4tov4 listenport=22 listenaddress=$addr
netsh interface portproxy add v4tov4 listenport=22 listenaddress=$addr connectport=22 connectaddress=$remoteip

# FastAPI (Windows: 8080 -> WSL: 5001)
netsh interface portproxy delete v4tov4 listenport=8080 listenaddress=$addr
netsh interface portproxy add v4tov4 listenport=8080 listenaddress=$addr connectport=5001 connectaddress=$remoteip

netsh interface portproxy show v4tov4

위 스크립트에 대한 설명은 다음과 같습니다.

  • $remoteport 및 IP 주소 확인 : wsl의 ifconfig 명령어를 bash 로 수행하여 네트워
    크 정보 획득 후 ip가 있는 경우 $remoteport 에 저장

  • 포트 설정 : $ports 에 배열 형태로 포워딩을 희망하는 포트 들을 저장

  • 방화벽 규칙 설정 : New-NetFireWaalRule 명령을 이용해 외부 포트 연결 허용

  • 포트 포워딩 설정 : netsh interface portproxy 명령을 사용해 windows pc 포트 포워딩 설정

  • 포워딩은 $ports 배열에 나열된 포트를 $remoteport의 wsl ip 주소로 연결하는 방식으로 설정

4-5 스크립트 실행

  • Powershell을 관리자 권한으로 실행 후 아래 명령어를 통해 스크립트 실행 (이 경우, 파일명 = ports_wsl.ps1)
# ports_wsl.ps1 파일과 동일한 디렉토리에서
.\ports_wsl.ps1

위 스크립트 실행 시, Windows의 8080번 Port로 요청하면 WSL IP의 5001번 Port를 통해 정상적으로 중계됩니다.

4-6 인바운드 규칙 설정

  • Windows 머신의 포트 액세스를 허용합니다.
  • Windows Defender 방화벽 → 고급 설정 → 인바운드 규칙 → 새규칙

  • 포트 선택 -> TCP 선택 -> 특정 포컬 포트 선택 -> 포트 입력

  • 연결 허용 -> 다음 -> 프로필 -> 다음 -> 이름 부여

4-7 WSL 포트포워딩 설정

netsh interface portproxy add v4tov4 listenport=8001 listenaddress=0.0.0.0 connectport=5001 connectaddress=[WSL_IP_주소]

중계를 희망하는 포트가 여러개일 경우 모든 포트를 마찬가지로 설정해주면 됩니다.

HTTP 통신 확인

  • Postman을 통해 응답 송수신 확인가능.
  • 실험 결과 windows 머신의 8080번 Port를 통해 FastAPI-vLLM과 송수신되는 것을 학인할 수 있습니다.
profile
"Engineering Notes" → Here "Research Notes" → https://lifes-ng.tistory.com/ "Code" → github.com/sngmng6506

0개의 댓글