[vLLM]코드 실습 vLLM 이란 뭘까?
안녕하세요. 머킹입니다.
vLLM을 사용하고자 vLLM에 대해서 조금 알아보았습니다.
아래 examples 예제도 많으니 꼭 시도해보세요!
vLLM: 대형 언어 모델 서빙의 새로운 기준
대형 언어 모델(LLM)은 오늘날 다양한 응용 프로그램에서 핵심적인 역할을 하고 있습니다.
이러한 모델을 효과적으로 배포하고 실시간으로 서비스하는 것은 점점 더 중요한 과제가 되고 있습니다.
여기서 등장하는 것이 바로 vLLM입니다. vLLM은 대형 언어 모델을 고성능, 저지연으로 서빙하기 위해 설계된 라이브러리입니다.
vLLM의 주요 기능
1. 고성능 서빙:
vLLM의 가장 큰 강점 중 하나는 PagedAttention이라는 기술을 사용하여 메모리 관리와 처리 성능을 극대화한다는 점입니다. 이 기술을 통해 대기 중인 요청을 연속적으로 처리할 수 있으며, 이를 통해 고처리량을 유지하면서도 낮은 지연 시간을 실현할 수 있습니다. 이로 인해 vLLM은 실시간 응용 프로그램에서 특히 강력한 성능을 발휘합니다.
2. 유연한 배포 및 확장성:
vLLM은 Hugging Face와 같은 다양한 모델 허브에서 모델을 가져올 수 있으며, Tensor Parallelism과 Pipeline Parallelism을 지원하여 여러 GPU에 걸쳐 모델을 분산 배포할 수 있습니다. 이를 통해 대규모 데이터 처리와 추론 작업에서 탁월한 성능을 제공합니다. 또한, vLLM은 GPU뿐만 아니라 NVIDIA 및 AMD 환경에서도 최적화되어 있습니다.
3. API 호환성:
vLLM은 OpenAI API와 호환되는 서버를 설정할 수 있습니다. 이를 통해 기존에 OpenAI API를 사용하던 애플리케이션을 vLLM으로 대체하거나 보완할 수 있습니다. 예를 들어, OpenAI의 completions 및 chat 엔드포인트를 완벽하게 지원하여, OpenAI API 기반의 서비스를 쉽게 자가 호스팅할 수 있습니다.
4. 양자화 지원:
vLLM은 GPTQ, AWQ, FP8 KV Cache와 같은 다양한 양자화 기법을 지원합니다. 이를 통해 모델의 메모리 사용량을 줄이고, 특히 GPU에서 실행 시 성능을 최적화할 수 있습니다. 양자화된 모델은 대규모 인퍼런스를 실행할 때에도 높은 성능을 유지할 수 있습니다.
5. 스트리밍 출력 및 프리픽스 캐싱:
vLLM은 실시간 스트리밍 출력을 지원하여 실시간 응답이 필요한 애플리케이션에서 유용하게 사용할 수 있습니다. 또한, 실험적인 기능인 프리픽스 캐싱(prefix caching)을 통해 특정 시나리오에서 성능을 더욱 향상시킬 수 있습니다.
vLLM Examples
여기 examples 에 들어가보면 정말 엄청 많은 케이스가 있습니다~!
그중에 하나인 LLM Engine Example입니다.
import argparse
from typing import List, Tuple
from vllm import EngineArgs, LLMEngine, RequestOutput, SamplingParams
from vllm.utils import FlexibleArgumentParser
def create_test_prompts() -> List[Tuple[str, SamplingParams]]:
"""Create a list of test prompts with their sampling parameters."""
return [
("A robot may not injure a human being",
SamplingParams(temperature=0.0, logprobs=1, prompt_logprobs=1)),
("To be or not to be,",
SamplingParams(temperature=0.8, top_k=5, presence_penalty=0.2)),
("What is the meaning of life?",
SamplingParams(n=2,
best_of=5,
temperature=0.8,
top_p=0.95,
frequency_penalty=0.1)),
("It is only with the heart that one can see rightly",
SamplingParams(n=3, best_of=3, use_beam_search=True,
temperature=0.0)),
]
def process_requests(engine: LLMEngine,
test_prompts: List[Tuple[str, SamplingParams]]):
"""Continuously process a list of prompts and handle the outputs."""
request_id = 0
while test_prompts or engine.has_unfinished_requests():
if test_prompts:
prompt, sampling_params = test_prompts.pop(0)
engine.add_request(str(request_id), prompt, sampling_params)
request_id += 1
request_outputs: List[RequestOutput] = engine.step()
for request_output in request_outputs:
if request_output.finished:
print(request_output)
def initialize_engine(args: argparse.Namespace) -> LLMEngine:
"""Initialize the LLMEngine from the command line arguments."""
engine_args = EngineArgs.from_cli_args(args)
return LLMEngine.from_engine_args(engine_args)
def main(args: argparse.Namespace):
"""Main function that sets up and runs the prompt processing."""
engine = initialize_engine(args)
test_prompts = create_test_prompts()
process_requests(engine, test_prompts)
if __name__ == '__main__':
parser = FlexibleArgumentParser(
description='Demo on using the LLMEngine class directly')
parser = EngineArgs.add_cli_args(parser)
args = parser.parse_args()
main(args)
이 예제를 보면서 제 코드에도 적용하려고 했는데..
잘 안되더라구요. 어떻게 하면 좋을지 계속 시도해보고자 합니다!
https://docs.vllm.ai/en/latest/index.html
> vLLM 공식 docs 사이트
'AI > 코드 실습하기' 카테고리의 다른 글
DDP 모델 학습에서 발생한 주요 에러 (0) | 2024.09.10 |
---|---|
파인튜닝된 모델을 활용한 RAG (Retrieval-Augmented Generation) 예제 (0) | 2024.08.26 |
Transformer 모델 학습 중 발생하는 --load_best_model_at_end 에러: 원인과 해결 방법 (0) | 2024.08.20 |
KULLM3 학습 코드 예제 (0) | 2024.08.19 |
[RAG 실습] GPT-4 + RAG 와 Fine-tuning 모델 + RAG 비교 (0) | 2024.08.16 |