Education*
Devops
Architecture
F/B End
B.Chain
Basic
Others
CLOSE
Search For:
Search
BY TAGS
linux
HTTP
golang
flutter
java
fintech
개발환경
kubernetes
network
Docker
devops
database
tutorial
cli
분산시스템
www
블록체인
AWS
system admin
bigdata
보안
금융
msa
mysql
redis
Linux command
dns
javascript
CICD
VPC
FILESYSTEM
S3
NGINX
TCP/IP
ZOOKEEPER
NOSQL
IAC
CLOUD
TERRAFORM
logging
IT용어
Kafka
docker-compose
Dart
vLLM을 이용해서 오픈소스 LLM 서비스 구축하기
Recommanded
Free
YOUTUBE Lecture:
<% selectedImage[1] %>
yundream
2025-04-05
2025-04-05
446
 ## 소개 최근 몇 년 사이, 인공지능 분야의 화두는 단연 거대언어모델(LLM)이다. GPT-4, Gemini와 같은 모델들은 인간의 언어를 이해하고 이에 대한 응답을 생성한다. 하지만 이러한 모델들은 막대한 컴퓨팅 자원을 요구하여, 이를 응용하려는 스타트업/중견기업 과 일반 유저들이 사용하기에는 높은 장벽이 존재하고 있다. 하지만 메타의 LLama, 구글의 Gemma 같은 비교적 작은 크기의 모델들과 **vLLM**을 이용하면 로컬 PC에서도 LLM을 직접 구동하고 활용 할 수 있게 되었다. 이번 포스트에서는 vLLM과 오픈소스 LLM을 활용하여 로컬 PC에서 **sLLM**을 서비스하는 방법을 살펴볼 것이다. ## 준비물 * 우분투 리눅스 24.04: 자고로 AI/LLM 은 리눅스 * GPU: NVIDIA GeForce RTX 4060 Ti 16G ## vLLM vLLM(Versatile Large Language Model)은 LLM 추론 및 서비스를 효과적으로 제공할 수 있도록 개발된 **오픈소스 추론 엔진**이다. LLM 서비스는 고성능 GPU와 큰 크기의 VRAM을 다루다 보니, 자원을 효과적으로 다루면서 높은 처리량을 제공하는게 중요하다. vLLM이 제공하는 주요 특징은 아래와 같다. **높은 처리량** vLLM은 **paged Attention** 기술을 사용해서 메모리 관리를 최적화고, 연속 배치(Continuous Batching)를 통해 요청을 효율적으로 수행 할 수 있다. **낮은 지연 시간** 빠른 사전 채우기(prefill) 및 디코딩(decoding) 엔진을 통해 지연시연을 최소화하여 사용자 경험을 향상 시킨다. **오픈소스** vLLM은 오픈소스 프로젝트로 자유롭게 사용 할 수 있으며, 오픈소스 커뮤니티의 지원을 받을 수 있다. ## 추론엔진이란 **추론엔진(Inference Engine)** 는 "저장된 지식이나 데이터에서 주어진 규칙을 바탕으로 새로운 정보가 결론을 도출해 내는 역할을 하는 소프트웨어 혹은 시스템"을 의미한다. 여기에서는 "저장된 지식이나 데이터"가 Llama 3, Gemma 3와 같은 오픈소스 모델을 의미한다. LLM에서 추론엔진이란 "LLM의 내부 지식을 활용하여 주어진 프롬프트에 대한 답변을 생성하는 과정을 제어하는 시스템"이다. vLLM을 추론 엔진으로 널리 사용하는 이유는 답변을 생성하는 과정이 효율적이기 때문이다. ## 아키텍처 vLLM을 이용한 추론 서비스 아키텍처는 아래와 같다.  Product 환경에 배포해야 하는 경우 Kubernetes 등으로 GPU 클러스터를 구성하여 서비스 할 것이다. 로컬 테스트의 경우에는 OpenWebUI 등을 이용해서 구성하게 될 것이다. 여기에서는 **Local 테스트** 환경으로 구성 할 것이다. ## HuggingFace & 오픈소스 모델 허깅페이스(HuggingFace)는 머신러닝과 자연어처리(NLP), 대규모언어모델(LLM)을 위한 플랫폼이자 커뮤니티다. 개발자들은 허깅페이스에서 인공지능 모델과 데이터셋을 공유하며, 이를 통해서 자유롭게 그리고 효과적으로 인공지능 관련 애플리케이션을 개발 할 수 있다. **오픈소스 커뮤니티** 허깅페이스는 머신러닝 모델, 특히 트랜스포머 기반 모델을 공유하는데 중점을 두고 있는 오픈소스 커뮤니티다. 개발자들이 모델, 데이터셋, 코드를 자유롭게 공유할 수 있는 환경을 제공하고 있다. **모델 데이터 저장소** 다양한 사전 학습된 모델(pre-trained models)와 데이터셋을 제공하는 저장소 역할을 한다. 개발자는 Git 과 Git LFS(Large File Storage)를 기반으로 모델과 데이터셋에 접근 할 수 있다. 여기에서는 허깅페이스로 부터 모델을 다운로드 받아서 vLLM 으로 추론 환경을 구축할 것이다. ## NVIDIA 드라이버 설치 vLLM을 사용하려면 NVIDIA 드라이버 CUDA 툴킷 다운로드를 해야 한다. ubuntu-drivers를 이용하면, 필요한 드라이버를 쉽게 설치 할 수 있다. ubuntu-drivers로 설치 가능한 모델 목록을 확인해서 설치 한다. ``` ubuntu-drivers devices sudo apt install nvidia-[드라이버 버전] ``` 설치를 끝내고 나면 리부팅 한다. ## CUDA 툴킷 다운로드 및 설치 아래 링크에서 CUDA 툴킷을 다운로드 / 설치한다. [NVIDIA CUDA 툴킷 다운로드](https://developer.nvidia.com/cuda-downloads) ``` export PATH=/usr/local/cuda/bin:$PATH export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH ``` ``` $ nvcc --version nvcc: NVIDIA (R) Cuda compiler driver Copyright (c) 2005-2025 NVIDIA Corporation Built on Fri_Feb_21_20:23:50_PST_2025 Cuda compilation tools, release 12.8, V12.8.93 Build cuda_12.8.r12.8/compiler.35583870_0 ``` ## Gemma 3 1B 모델 Gemma 3는 Google에서 개발한 경량 AI 모델로 아래와 같은 특징들을 가지고 있다. * 다양한 모델 크기: 1B, 4B, 12B, 27B의 다양한 크기의 모델이 준비되어 있어서 사용 목적과 환경에 맞게 사용 할 수 있다. 여기에서는 테스트하기에 좋은 1B 모델을 사용할 것이다. 그리고 추가적으로 4B 모델로도 확장할 계획이다. * 멀티모달 지원: 4B, 12B, 27B 모델은 텍스트 뿐만 아니라 이미지도 동시에 처리 할 수 있는 멀티모달 기능을 가지고 있다. * 다국어지원: 4B 이상의 모델에서 140개 이상의 언어를 지원한다. 특히 한국어를 잘 지원한다. 1B 정도의 모델에서도 한글 입출력에 문제가 없다. [최신 경량 LLM Gemma 3 테스트](https://www.joinc.co.kr/w/gemma3_test) 문서에서 자세한 내용을 확인 할 수 있다. 여기에서 테스트할 모델은 허깅페이스에서 제공하는 [google/gemma-3-1b-it](google/gemma-3-1b-it) 이다. 모델 이름으로 부터 모델의 특징을 확인 할 수 있다. * gemma 3: 구글에서 개발한 오픈소스 언어모델인 gemma의 3번째 버전이다. * 1b: 1b는 모델의 파라미터 수를 나타낸다. b는 billion을 의미하므로 이 모델은 약 40억 개의 매우 적은 파라미터를 가지고 있다. 파라메터 수로 부터 sLLM 모델임을 알 수 있다. * it: 이 모델이 Instruction Tuned(명령어 튜닝) 과정을 거쳤음을 나타낸다. 명령어 튜닝은 사용자의 명시적인 지시나 질문에 적절하게 응답하도록 학습하는 기술이다. 따라서 이 모델은 **질의응답, 텍스트 생성, 번역, 요약 등 명령어 기반**으로 수행하는 자연어 처리 작업에 특화되어 있음을 알 수 있다. ## vLLM 실행 및 테스트 Python 가상환경을 만들고 vllm을 설치한다. ``` mkdir vllm-test cd vllm-test virtualenv venv source venv/bin/activate pip install vllm ``` Gemma 3 1B 모델을 실행한다. 처음에는 모델을 다운로드하기 때문에 많은 시간이 들어간다. ``` vllm serve google/gemma-3-1b-it ``` curl 로 테스트해보자. ``` curl http://localhost:8000/v1/completions \ -H "Content-Type: application/json" \ -d '{ "model": "google/gemma-3-1b-it", "prompt": "서울에 대해서 알려주세요", "max_tokens": 1024, "temperature": 0 }' ``` 이제 OpenWebUI를 이용해서 테스트를 해보자. 먼저 open-webui 패키지를 다운로드 한다. ``` mkdir openwebui cd openwebui virtualenv venv source venv/bin/activate pip install open-webui ``` openwebui를 실행한다. ``` open-webui serve ``` localhost:8080으로 접근한다.  **ID > 설정 > 연결** 에서 모델연결을 설정한다.  * URL: http://localhost:8000/v1 * Key: 아무 값이나 입력한다. * Model IDs: google/gemma-3-1b-it 를 입력한다. 이제 gemma-3 모델을 테스트 할 수 있다.  ## Gemma 3 4B 모델 사용해보기 이제 **google/gemma-3-4b-it** 모델을 테스트해보자. 실행은 간단하다. ``` vllm serve google/gemma-3-4b-it ``` 하지만 모델이 커지면서 요구하는 자원량 때문에 아래와 같은 에러가 발생하면서 실패했다. ``` RuntimeError: CUDA out of memory occurred when warming up sampler with 1024 dummy requests. Please try lowering `max_num_seqs` or `gpu_memory_utilization` when initializing the engine ``` 이 문제는 "max_num_seqs" 옵션과 "max_model_len" 옵션을 조절하는 것으로 해결 했다. * max_num_seqs: 엔진이 동시에 처리할 수 있는 최대 요청(sequence)수를 정의한다. vLLM은 여러 개의 추론 요청을 일괄처리(batching)하여 GPU 활용률을 높이고 전체 처리량을 향상 시킨다. 이 값이 클수록 vLLM은 더 많은 KV 캐시 메모리를 확보하려 하기 때문에 적당한 값을 할당해야 한다. * max_model_len: 모델이 처리할 수 있는 최대 시퀀스 길이다. 여기에서 시퀀스 길이는 **입력토큰과 생성 토큰의 총합**을 의미한다. 크기가 클수록 더 많은 GPU 메모리를 사용한다. 아래와 같이 파라미터를 주고 다시 실행했다. ``` vllm serve google/gemma-3-4b-it --max-num-seqs=8 --max-model-len=4096 ```  ## 멀티모달 테스트 Gemma 3 4B 이상 모델은 멀티모달을 지원한다. 여기까지 했으니 멀티모달 능력도 테스트해보기로 했다. **Input**  당신은 의류 마케터 입니다. 사진의 의류를 위한 마케팅 문구, 제품의 특징 등을 알려주세요. **Output** ## "레트로 감성, 톡톡 튀는 플레그셔츠" 💥 **타겟 고객:** 20대 후반 ~ 30대 초반 남성, 개성 있는 스타일을 추구하는 분 **제품:** 플레그셔츠 (플라이드 체크 셔츠) **마케팅 문구:** - **"나만의 컬러를 입어봐! 톡톡 튀는 플레그셔츠로 스타일 UP!"** - 플레그셔츠의 개성 강한 체크 패턴을 강조하며, 자신감 있는 스타일을 연출할 수 있음을 어필합니다. - **"레트로 감성, 지금 다시!"** - 플레그셔츠가 가진 vintage한 매력을 강조하여, 현대적인 감각에 어울리는 스타일을 제안합니다. - **"단조로운 룩에 포인트를! 베이직 티셔츠와 함께 매치하면 스타일 완성!"** - 플레그셔츠의 활용도를 높여, 다양한 스타일링 팁을 제공합니다. - **"부드러운 터치, 편안한 착용감! 일상부터 데이트까지, 언제 어디서든!"** - 플레그셔츠의 소재와 착용감을 강조하여, 실용적인 면모를 부각합니다. **제품 특징:** - **디자인:** - **플레그 체크 패턴:** 톡톡 튀는 색상 조합과 세련된 체크 패턴이 특징입니다. - **클래식한 셔츠 핏:** 현대적인 감각으로 재해석된 셔츠 핏으로, 어떤 체형에도 잘 어울립니다. - **보온성:** 꼼꼼한 터착단 작업으로 보온성이 뛰어나 가을, 겨울에 특히 유용합니다. - **소재:** - **면 100%:** 부드러운 면 소재로 피부 자극 없이 편안하게 착용할 수 있습니다. - **통기성:** 면 소재 특유의 통기성으로 쾌적함을 유지합니다. - **디테일:** - **라운드 칼라:** 부드러운 라운드 칼라가 세련된 분위기를 연출합니다. - **버튼다운:** 버튼다운 디자인으로 단정하고 깔끔한 느낌을 더합니다. - **오버사이즈 핏:** 트렌디한 오버사이즈 핏으로, 편안하면서도 스타일리쉬한 룩을 완성합니다. **추가적인 마케팅 전략:** - **SNS 캠페인:** 플레그셔츠를 활용한 다양한 스타일링 팁을 공유하고, 고객 참여를 유도하는 이벤트 진행 - **인플루언서 마케팅:** 패션 인플루언서와 협업하여 제품 홍보 및 스타일링 제안 - **타겟 광고:** 20대 후반 ~ 30대 초반 남성을 타겟으로 한 온라인 광고 진행 **참고:** - 사진 속 모델은 플레그셔츠의 핏과 스타일을 잘 보여주고 있습니다. - 플레그셔츠는 다양한 컬러와 패턴으로 출시되어, 고객의 취향에 맞는 제품을 선택할 수 있도록 합니다. ---- **Input**  이미지의 내용을 분석해주세요. **Output** 이미지는 뉴욕 타임스퀘어의 새해맞이 카운트다운 장면을 담고 있습니다. 주요 특징은 다음과 같습니다. - **새해맞이 불꽃놀이:** 화면 중앙에는 활활 타오르는 불꽃놀이가 펼쳐져 있으며, 이는 새해를 기념하는 주요 이벤트입니다. - **타임스퀘어의 화려한 빌보드:** 타임스퀘어의 건물 외벽에는 다양한 광고 빌보드가 설치되어 있습니다. 각 빌보드는 새해맞이 광고, 브랜드 광고, 이벤트 정보 등으로 가득합니다. - **많은 사람들:** 타임스퀘어 광장에는 수많은 사람들이 모여 새해맞이 행사를 즐기고 있습니다. 사람들의 활기찬 모습과 즐거움이 느껴집니다. - **건물과 도시 풍경:** 배경에는 고층 건물들이 즐비하게 늘어서 있으며, 도시의 활기찬 모습이 나타납니다. - **글자:** "TIMES SQUARE", "NEW YEAR'S EVE", "Prepare to be kissed" 등의 글자가 여러 곳에 보입니다. 전체적으로 이 이미지는 뉴욕 타임스퀘어에서 열리는 화려하고 역동적인 새해맞이 행사의 분위기를 잘 보여주고 있습니다. ## 정리 이렇게 vLLM을 이용해서 오픈소스 모델을 서비스하는 방법을 알아봤다. 이번 포스트는 vllm cli를 이용해서 테스트를 했는데, 다음 포스트에서는 python 애플리케이션을 만들어볼 생각이다. ##### 참고: LLM, sLLM, sLM vLLM으로 로컬 PC에서 추론 서비스를 테스트한 이유는 sLLM, sLM을 하기 위함이다. * LLM: 데규모 데이터셋으로 학습된 거대 모델로 일반적인 자연어 처리에서 높은 성능을 보인다. 매개변수가 매우 많고, 복잡한 작업을 수행 할 수 있으며 상식이 풍부하다. * sLLM(Small Large Language Model): 경량화된 LLM 모델로, LLM의 성능을 가능한 유지하면서 모델의 크기와 복잡 계산도를 줄인 모델이다. 양자화, 지식 증류 등의 기술을 사용하고 있다. LLM 보다 자원 소모가 적고 특정 작업에 최적화 할 수 있다. Gemma 3 12B, Llama 3 7B, Phi-2, Solar-10B 등의 모델이 있다. * sLM(Small Language Model): sLLM 보다 작고 가벼운 모델로,특정 작업이나 제한된 환경에서 효율적으로 작동하도록 설계되어 있다. | 특징 | LLM | sLLM | sLM | | -------- | --------------------------------- | ---------------------------- | -------------------------- | | 모델크기 | 수십억 ~ 수조개의 파리미터 | 수억 ~ 수십억 파라미터 | 수백만 ~ 수천만 파라미터 | | 학습 데이터 | 방대한 양의 일반 텍스트 데이터 | LLM 보다 작으며, 특정 데이터셋 이용 | 비교적 작은 데이터 | | 성능 | 다양한 자연어처리에서 높은 성능, 복잡한 이해 및 생성 가능 | LLM에 준하는 성능 유지, 특정 작업에 높은 성능 | 제한적인 자연어 처리 능력, 특정 작업에 최적화 | | 자원요구량 | 고성능의 TPU, GPU 필요 | LLM 보다 작지만 TPU, GPU 필요 | CPU나 저사양 GPU 필요 | | 속도 | 상대적으로 느림 | LLM 보다 빠름 | 매우 빠름 | | 범용성 | 매우 높은 범용성 | 높음 | 낮음 | | 주요 활용 분야 | 일반적인 자연어 이해, 생성, 번역, 요약, 질의 응답 | 클라우드/온프레미스 환경에서 특정 산업 분야 적용 | 모바일, 임베디드 기기 | | 특징 | 넓은 지식 기반으로 높은 범용성 | 성능과 효율성의 균형 | 특정 작업에서의 효율성 추구 |
Recent Posts
vLLM을 이용해서 오픈소스 LLM 서비스 구축하기
Vertex Gemini 기반 AI 에이전트 개발 06. LLM Native Application 개발
최신 경량 LLM Gemma 3 테스트
MLOps with Joinc - Kubeflow 설치
Vertex Gemini 기반 AI 에이전트 개발 05. 첫 번째 LLM 애플리케이션 개발
LLama-3.2-Vision 테스트
Vertex Gemini 기반 AI 에이전트 개발 04. 프롬프트 엔지니어링
Vertex Gemini 기반 AI 에이전트 개발 03. Vertex AI Gemini 둘러보기
Vertex Gemini 기반 AI 에이전트 개발 02. 생성 AI에 대해서
Vertex Gemini 기반 AI 에이전트 개발 01. 소개
Archive Posts
Tags
AI
LLM
Copyrights © -
Joinc
, All Rights Reserved.
Inherited From -
Yundream
Rebranded By -
Joonphil
Recent Posts
Archive Posts
Tags