로컬에서 ChatGPT 돌리기 - vLLM + GPT-OSS:20B 설치부터 실행까지

로컬에서 ChatGPT 돌리기 - vLLM + GPT-OSS:20B 설치부터 실행까지

조회수 0

vLLM으로 GPT-OSS:20B 실행하기 - 완벽 가이드

들어가며

2025년 8월 5일, OpenAI가 GPT-2 이후 첫 번째 오픈소스 모델인 GPT-OSS 시리즈를 공개했습니다. 이 중 GPT-OSS:20B는 16GB 메모리만으로도 실행할 수 있는 강력한 추론 모델로, 로컬 환경에서 ChatGPT 수준의 AI를 경험할 수 있게 해줍니다.

하지만 모델을 다운로드했다고 해서 바로 사용할 수 있는 것은 아닙니다. 효율적인 추론을 위해서는 vLLM과 같은 최적화된 추론 엔진이 필요합니다. 이 글에서는 vLLM이 무엇인지 알아보고, GPT-OSS:20B를 실제로 실행해보는 과정을 단계별로 살펴보겠습니다.

vLLM이란 무엇인가?

vLLM의 정의

vLLM(Very Large Language Model)은 대규모 언어 모델의 빠르고 효율적인 추론을 위한 오픈소스 라이브러리입니다. UC Berkeley에서 개발된 이 프로젝트는 기존 방식 대비 최대 24배 빠른 성능을 제공하면서도 GPU 메모리 사용량을 절반으로 줄이는 혁신적인 기술입니다.

vLLM의 핵심 기술: PagedAttention

vLLM의 가장 큰 혁신은 PagedAttention 기술입니다. 기존 LLM들이 연속적인 메모리 할당을 사용하는 반면, vLLM은 운영체제의 가상 메모리 설계에서 영감을 얻어 비연속적인 메모리 저장 방식을 채택했습니다.

기존 방식의 문제점:

  • KV 캐시를 위한 정적 메모리 할당
  • 최대 시퀀스 길이를 위해 과도한 메모리 예약
  • 내부/외부 단편화로 인한 메모리 낭비

PagedAttention의 해결책:

  • 동적 메모리 할당
  • 필요한 만큼만 메모리 사용
  • 메모리 단편화 최소화

vLLM vs 기타 도구 비교

도구용도속도메모리 효율성사용 난이도
[object Object]
프로덕션 서빙
⭐⭐⭐⭐⭐
⭐⭐⭐⭐⭐
중간
Transformers
연구/개발
⭐⭐
⭐⭐
쉬움
Ollama
개인 사용
⭐⭐⭐
⭐⭐⭐
매우 쉬움

시스템 요구사항

최소 요구사항 (GPT-OSS:20B 기준)

GPU:

  • 16GB VRAM (RTX 4090, RTX 3090, A100 등)
  • CUDA 호환 GPU 필수

시스템 메모리:

  • 32GB 이상 권장 (vLLM은 상당한 시스템 RAM 사용)

저장공간:

  • 최소 50GB 여유 공간 (모델 다운로드 및 캐시용)

소프트웨어:

  • Python 3.8 이상
  • CUDA 11.8 이상

GPU 메모리 부족 시 대안

12GB 이하 GPU:

  • CPU 오프로딩 활용
  • 모델 양자화 적용
  • 텐서 병렬화 사용

vLLM 설치하기

1. Python 환경 설정

vLLM은 uv를 사용한 Python 환경 관리를 권장합니다:

# uv 설치 (macOS/Linux) curl -LsSf https://astral.sh/uv/install.sh | sh # 가상환경 생성 uv venv --python 3.12 --seed source .venv/bin/activate

2. vLLM 설치

GPT-OSS 모델을 위한 특별 버전의 vLLM을 설치합니다:

uv pip install --pre vllm==0.10.1+gptoss \ --extra-index-url https://wheels.vllm.ai/gpt-oss/ \ --extra-index-url https://download.pytorch.org/whl/nightly/cu128 \ --index-strategy unsafe-best-match

3. 설치 확인

python -c "import vllm; print('vLLM 설치 완료!')"

GPT-OSS:20B 실행하기

1. 서버 모드로 실행

가장 간단한 방법은 vLLM의 서버 모드를 사용하는 것입니다:

vllm serve openai/gpt-oss-20b

이 명령어는:

  • Hugging Face에서 자동으로 모델 다운로드
  • localhost:8000에서 OpenAI 호환 API 서버 실행
  • 첫 실행 시 모델 다운로드로 시간이 소요됨 (약 20분)

2. 실행 확인

서버가 정상적으로 시작되면 다음과 같은 로그를 볼 수 있습니다:

INFO:     Started server process [12345]
INFO:     Waiting for application startup.
INFO:     Application startup complete.
INFO:     Uvicorn running on http://0.0.0.0:8000

3. 테스트 스크립트

별도 터미널에서 테스트 스크립트를 실행해보세요:

import openai # vLLM 서버에 연결 client = openai.OpenAI( api_key="dummy-key", # vLLM 로컬 서버는 키 불필요 base_url="http://localhost:8000/v1" ) # 간단한 테스트 response = client.chat.completions.create( model="gpt-oss-20b", messages=[ {"role": "user", "content": "Python으로 피보나치 수열을 구현해줘"} ], max_tokens=500 ) print(response.choices[0].message.content)

실제 성능 테스트

1. 추론 속도 측정

import time import openai client = openai.OpenAI( api_key="dummy-key", base_url="http://localhost:8000/v1" ) def measure_inference_speed(): start_time = time.time() response = client.chat.completions.create( model="gpt-oss-20b", messages=[ {"role": "user", "content": "인공지능의 미래에 대해 500자로 설명해줘"} ], max_tokens=500 ) end_time = time.time() content = response.choices[0].message.content tokens = len(content.split()) # 대략적인 토큰 수 print(f"응답 시간: {end_time - start_time:.2f}초") print(f"생성된 토큰 수: {tokens}") print(f"토큰/초: {tokens / (end_time - start_time):.2f}") print(f"\n응답 내용:\n{content}") measure_inference_speed()

2. 추론 능력 테스트

def test_reasoning(): test_cases = [ "25 * 47 + 123을 계산하고 단계별로 설명해줘", "다음 문제를 해결해줘: 한 농부가 닭과 토끼를 기르는데, 머리는 총 30개, 다리는 총 84개입니다. 닭과 토끼는 각각 몇 마리인가요?", "Python으로 이진 검색 알고리즘을 구현하고 시간복잡도를 설명해줘" ] for i, question in enumerate(test_cases, 1): print(f"\n=== 테스트 {i} ===") print(f"질문: {question}") response = client.chat.completions.create( model="gpt-oss-20b", messages=[{"role": "user", "content": question}], max_tokens=800 ) print(f"답변: {response.choices[0].message.content}") print("-" * 50) test_reasoning()

고급 설정 및 최적화

1. 메모리 사용량 조절

# GPU 메모리 사용률 조절 (기본 90%) vllm serve openai/gpt-oss-20b --gpu-memory-utilization 0.8 # 텐서 병렬화 (다중 GPU 사용) vllm serve openai/gpt-oss-20b --tensor-parallel-size 2

2. 배치 처리 최적화

# 동시 요청 처리 테스트 import asyncio import aiohttp async def concurrent_requests(): async with aiohttp.ClientSession() as session: tasks = [] for i in range(5): # 5개 동시 요청 task = asyncio.create_task( send_request(session, f"질문 {i+1}: 1부터 10까지의 합은?") ) tasks.append(task) responses = await asyncio.gather(*tasks) for i, response in enumerate(responses): print(f"응답 {i+1}: {response}") async def send_request(session, content): payload = { "model": "gpt-oss-20b", "messages": [{"role": "user", "content": content}], "max_tokens": 100 } async with session.post( "http://localhost:8000/v1/chat/completions", json=payload, headers={"Authorization": "Bearer dummy-key"} ) as response: result = await response.json() return result['choices'][0]['message']['content'] # 실행 # asyncio.run(concurrent_requests())

3. 추론 레벨 조정

GPT-OSS 모델은 추론 레벨을 조정할 수 있습니다:

# 빠른 응답 (Low reasoning) response = client.chat.completions.create( model="gpt-oss-20b", messages=[ {"role": "system", "content": "Reasoning: low"}, {"role": "user", "content": "안녕하세요!"} ] ) # 깊은 분석 (High reasoning) response = client.chat.completions.create( model="gpt-oss-20b", messages=[ {"role": "system", "content": "Reasoning: high"}, {"role": "user", "content": "기후 변화의 경제적 영향을 분석해줘"} ] )

문제 해결

자주 발생하는 오류와 해결방법

1. CUDA Out of Memory 오류

# 해결방법: GPU 메모리 사용률 줄이기 vllm serve openai/gpt-oss-20b --gpu-memory-utilization 0.7

2. 모델 다운로드 실패

# Hugging Face 토큰 설정 export HF_TOKEN="your_hugging_face_token"

3. 느린 추론 속도

  • GPU 드라이버 업데이트 확인
  • CUDA 버전 호환성 확인
  • 시스템 리소스 모니터링

성능 벤치마크

테스트 환경

  • GPU: RTX 4090 (24GB)
  • CPU: AMD Ryzen 9 7950X
  • RAM: 64GB DDR5
  • Storage: NVMe SSD

측정 결과

  • 평균 추론 속도: 15-25 토큰/초
  • 첫 토큰까지 시간: 0.5-1.5초
  • 메모리 사용량: GPU 14GB, RAM 8GB
  • 동시 요청 처리: 최대 4개 요청

마무리

vLLM과 GPT-OSS:20B의 조합은 로컬 환경에서 강력한 AI 모델을 실행할 수 있는 훌륭한 방법입니다. 특히 다음과 같은 장점이 있습니다:

장점:

  • OpenAI API와 완벽 호환
  • 높은 추론 성능
  • 메모리 효율성
  • 오픈소스의 투명성

활용 분야:

  • 개인 AI 어시스턴트 구축
  • 기업 내부 AI 서비스
  • AI 연구 및 개발
  • 프라이버시가 중요한 애플리케이션

다음 단계:

  • 파인튜닝을 통한 도메인 특화 모델 개발
  • 다양한 추론 엔진 비교 실험
  • 프로덕션 환경 배포 검토

AI 기술의 민주화가 가속화되는 지금, 누구나 강력한 AI 모델을 직접 실행하고 커스터마이징할 수 있는 시대가 열렸습니다. vLLM과 GPT-OSS로 여러분만의 AI 여정을 시작해보세요!


이 글이 도움이 되셨나요? 댓글로 경험을 공유해주시거나 궁금한 점을 남겨주세요!

#vLLM#GPT-OSS#OpenAI 오픈소스#GPU 메모리 최적화#로컬 AI 실행#PagedAttention#대규모 언어모델 추론#CUDA GPU 요구사항#Python 가상환경 설정#OpenAI API 호환#모델 서빙 최적화#텐서 병렬화#KV 캐시 관리#Mixture of Experts (MoE)#MXFP4 양자화#Apache 2.0 라이선스#Transformers 라이브러리#CUDA 메모리 관리#동시 배치 처리#추론 레이턴시 최적화

Write by :

개발하는남자

개발하는남자

Developer

💬댓글 0

💬댓글 (0)

댓글을 작성하려면 로그인이 필요합니다.

댓글을 불러오는 중...