VLLM을 사용하여 DIY AI 모델 호스팅 플랫폼을 구축하십시오
개발자와 연구원이 직면 한 가장 큰 과제 중 하나는 AI 추론을위한 모델을 규모로 배치하는 것입니다. 전통적으로 여기에는 비용이 많이 들고 리소스 집약적 일 수있는 클라우드 서비스 또는 복잡한 서버 설정에 의존하는 것이 포함됩니다. 그러나 VLLM AI 추론 엔진과 같은 혁신을 통해 DIY (Do-it-Yourself) 모델 호스팅이 더욱 접근 가능하고 효율적으로 변하고 있습니다. 기계 학습 요구에 대한 비용 효율적인 모델-서빙 솔루션을 구축 할 수 있습니다.
vllm
VLLM은 규모가 큰 대형 언어 모델 (LLM)을 효율적으로 제공하도록 설계된 AI 추론 엔진입니다. AI 모델을 제공하기위한 간소화 된 접근 방식을 제공하는 강력한 고성능 엔진입니다. 대규모 모델에서도 리소스를 최적화하고 낮은 대기 시간과 높은 처리량을 유지하는 능력이 두드러집니다. VLLM 엔진은 더 빠른 추론 시간, 개선 된 메모리 관리 및 최적화 된 실행을 허용하며,이 실행은 모두 DIY 설정에서 효과적으로 모델을 호스팅하는 데 중요합니다.
DIY 모델 호스팅
DIY 모델 호스팅은 주로 몇 가지 장점을 제공합니다.
- 비용 절감. 자체 인프라를 설정함으로써 클라우드 서비스 구독의 반복 비용을 제거 할 수 있습니다. 필요에 따라 시스템을 확장하고 사용중인 하드웨어 만 지불 할 수있는 유연성을 제공합니다.
- 데이터 개인 정보 및 보안. 민감한 애플리케이션의 경우, 사내에서 호스팅 모델을 사용하면 개인 데이터가 구내를 떠나지 않아도됩니다. 이는 개인 또는 독점 정보를 처리하는 조직의 주요 판매 지점이 될 수 있습니다.
- 제어 및 사용자 정의. 자체 호스팅 모델은 모델이 실행되는 환경을 완전히 제어 할 수 있습니다. 여기에는 최적의 성능 및 기존 시스템과의 통합을위한 사용자 정의 구성이 포함됩니다.
VLLM을 사용한 DIY 모델 호스팅의 이점
- 낮은 대기 시간 및 높은 처리량. VLLM을 선택하는 가장 설득력있는 이유 중 하나는 대형 모델의 경우에도 낮은 대기 시간과 높은 처리량을 제공하는 능력 때문입니다. AI 및 기계 학습의 맥락에서, 대기 시간은 AI 모델이 입력을 처리하고 결과를 반환하는 데 걸리는 시간을 나타냅니다. 높은 처리량은 주어진 시간 내에 처리 할 수있는 쿼리 또는 작업 수를 나타냅니다.
- 확장 성. AI 호스팅의 주요 측면은 인프라가 수요에 따라 확장 될 수 있도록하는 것입니다. VLLM은 트래픽을 기준으로 스케일 업 또는 다운을 허용하는 확장 성을 제공합니다. 단일 소형 모델을 실행하든 여러 대형 언어 모델을 실행하든 VLLM은 여러 기계에 부하를 효율적으로 분배하여 일관된 성능을 보장 할 수 있습니다.
Vllm을 시작합니다
Vllm은 오픈 소스이며 설치는 비교적 간단합니다. 아래 섹션은 GPU없이 Ubuntu에 설치 및 실행을 포함합니다. 다른 자세한 설치 안내서는 VLLM의 GitHub 저장소에서 제공됩니다. 모델이 가동되고 실행되면 수요에 따라 성능과 스케일을 최적화하기 위해 설정을 조정할 수 있습니다. VLLM을 사용하면 필요에 따라 성능 추적, 리소스 조정 및 모델 업데이트를 허용합니다.
전제 조건
- 우분투 (GPU 필요 없음)와 도커
- 콘다를 설정하십시오
단계
1. 콘다 가상 환경을 설정하십시오.
conda create -n vllm python=3.12 -y
conda activate vllm
2. Vllm 저장소를 복제하십시오.
git clone
cd vllm
3. CPU 용 VLLM 서버를 빌드하고 실행하십시오.
docker build -f Dockerfile.cpu -t vllm-cpu-env --shm-size=4g .
docker run --rm -it --network=host vllm-cpu-env --model Qwen/Qwen2.5-1.5B-Instruct
...
INFO 02-17 06:10:39 api_server.py:937] Starting vLLM API server on
...
INFO: Started server process [1]
INFO: Waiting for application startup.
INFO: Application startup complete.
4. VLLM 서버에 대해 간단한 컬 요청을 실행하고 응답을 확인하십시오.
입력: “이름이 뭐에요?”
산출: “저는 컴퓨터 프로그램이므로 물리적 이름이 없습니다. 알고 있거나 토론하고 싶은 구체적인 것이 있습니까? 질문을 도와 드리겠습니다! 오늘 어떻게 도와 드릴 수 있습니까?”
curl \
-H "Content-Type: application/json" \
-d '{
"model": "Qwen/Qwen2.5-1.5B-Instruct",
"prompt": "What is your name ?",
"max_tokens": 50,
"temperature":0
}'
{
"id": "cmpl-d04ccc0a035c4e27a263b42217524299",
"object": "text_completion",
"created": 1739774404,
"model": "Qwen/Qwen2.5-1.5B-Instruct",
"choices": [
{
"index": 0,
"text": " I am a computer program, so I don't have a physical name. Is there anything specific you would like to know or discuss? I'm here to help with any questions you might have! How can I assist you today?",
"logprobs": null,
"finish_reason": "stop",
"stop_reason": 151643,
"prompt_logprobs": null
}
],
"usage": {
"prompt_tokens": 5,
"total_tokens": 52,
"completion_tokens": 47,
"prompt_tokens_details": null
}
}
5.이 요청에 대한 서버 측 로그는 처리량, 캐시 사용법 등에 대한 많은 정보를 제공합니다.
INFO 02-17 06:40:04 logger.py:39] Received request cmpl-d04ccc0a035c4e27a263b42217524299-0: prompt: 'What is your name ?', params: SamplingParams(n=1, presence_penalty=0.0, frequency_penalty=0.0, repetition_penalty=1.0, temperature=0.0, top_p=1.0, top_k=-1, min_p=0.0, seed=None, stop=[], stop_token_ids=[], bad_words=[], include_stop_str_in_output=False, ignore_eos=False, max_tokens=50, min_tokens=0, logprobs=None, prompt_logprobs=None, skip_special_tokens=True, spaces_between_special_tokens=True, truncate_prompt_tokens=None, guided_decoding=None), prompt_token_ids: [3838, 374, 697, 829, 937], lora_request: None, prompt_adapter_request: None.
INFO 02-17 06:40:04 engine.py:275] Added request cmpl-d04ccc0a035c4e27a263b42217524299-0.
INFO 02-17 06:40:04 metrics.py:455] Avg prompt throughput: 0.7 tokens/s, Avg generation throughput: 0.1 tokens/s, Running: 1 reqs, Swapped: 0 reqs, Pending: 0 reqs, GPU KV cache usage: 0.0%, CPU KV cache usage: 0.0%.
6. 조사를 통해 더 중요한 메트릭을 사용할 수 있습니다 http://localhost:8000/metrics
. 서버는 성능 최적화에 사용할 수있는 아래 메트릭을 생성합니다. 이전 기사에서는 추론 시간 컴퓨팅에 대한 자세한 정보도 설명합니다.
메트릭 |
설명 |
---|---|
time_to_first_token_seconds |
첫 번째 출력 토큰을 생산하는 데 걸리는 시간 |
time_per_output_token_seconds |
각 출력 토큰을 생산하는 데 걸리는 시간 |
e2e_request_latency_seconds |
요청에 걸리는 전체 시간 |
request_queue_time_seconds |
요청이 큐에서 기다립니다 |
request_inference_time_seconds |
추론에 걸리는 시간 |
CACHE_CONFIG_INFO |
캐시 구성 정보 |
num_requests_running |
실행중인 총 요청 수 |
num_requests_waiting |
대기중인 총 요청 수 |
gpu_cache_usage_perc |
GPU 캐시 메모리 소비 |
cpu_cache_usage_perc |
CPU 캐시 메모리 소비 |
CPU_PREFIX_CACHE_HIT_RATE |
CPU 접두사 캐시의 적중률 |
gpu_prefix_cache_hit_rate |
GPU 접두사 캐시의 적중률 |
request_success_total |
성공적인 요청의 총 수 |
# HELP vllm:time_to_first_token_seconds Histogram of time to first token in seconds.
# TYPE vllm:time_to_first_token_seconds histogram
vllm:time_to_first_token_seconds_sum{model_name="Qwen/Qwen2.5-1.5B-Instruct"} 0.5297608375549316
vllm:time_to_first_token_seconds_count{model_name="Qwen/Qwen2.5-1.5B-Instruct"} 5.0
# HELP vllm:time_per_output_token_seconds Histogram of time per output token in seconds.
# TYPE vllm:time_per_output_token_seconds histogram
vllm:time_per_output_token_seconds_sum{model_name="Qwen/Qwen2.5-1.5B-Instruct"} 8.178969383239746
vllm:time_per_output_token_seconds_count{model_name="Qwen/Qwen2.5-1.5B-Instruct"} 196.0
# HELP vllm:e2e_request_latency_seconds Histogram of end to end request latency in seconds.
# TYPE vllm:e2e_request_latency_seconds histogram
vllm:e2e_request_latency_seconds_sum{model_name="Qwen/Qwen2.5-1.5B-Instruct"} 8.710693597793579
vllm:e2e_request_latency_seconds_count{model_name="Qwen/Qwen2.5-1.5B-Instruct"} 5.0
# HELP vllm:request_queue_time_seconds Histogram of time spent in WAITING phase for request.
# TYPE vllm:request_queue_time_seconds histogram
vllm:request_queue_time_seconds_sum{model_name="Qwen/Qwen2.5-1.5B-Instruct"} 0.005610227584838867
vllm:request_queue_time_seconds_count{model_name="Qwen/Qwen2.5-1.5B-Instruct"} 5.0
# HELP vllm:request_inference_time_seconds Histogram of time spent in RUNNING phase for request.
# TYPE vllm:request_inference_time_seconds histogram
vllm:request_inference_time_seconds_sum{model_name="Qwen/Qwen2.5-1.5B-Instruct"} 8.70508337020874
vllm:request_inference_time_seconds_count{model_name="Qwen/Qwen2.5-1.5B-Instruct"} 5.0
# HELP vllm:cache_config_info Information of the LLMEngine CacheConfig
# TYPE vllm:cache_config_info gauge
vllm:cache_config_info{block_size="16",cache_dtype="auto",calculate_kv_scales="False",cpu_kvcache_space_bytes="4294967296",cpu_offload_gb="0",enable_prefix_caching="False",gpu_memory_utilization="0.9",is_attention_free="False",num_cpu_blocks="0",num_gpu_blocks="9362",num_gpu_blocks_override="None",sliding_window="None",swap_space_bytes="4294967296"} 1.0
# HELP vllm:num_requests_running Number of requests currently running on GPU.
# TYPE vllm:num_requests_running gauge
vllm:num_requests_running{model_name="Qwen/Qwen2.5-1.5B-Instruct"} 0.0
# HELP vllm:num_requests_waiting Number of requests waiting to be processed.
# TYPE vllm:num_requests_waiting gauge
vllm:num_requests_waiting{model_name="Qwen/Qwen2.5-1.5B-Instruct"} 0.0
# HELP vllm:gpu_cache_usage_perc GPU KV-cache usage. 1 means 100 percent usage.
# TYPE vllm:gpu_cache_usage_perc gauge
vllm:gpu_cache_usage_perc{model_name="Qwen/Qwen2.5-1.5B-Instruct"} 0.0
# HELP vllm:cpu_cache_usage_perc CPU KV-cache usage. 1 means 100 percent usage.
# TYPE vllm:cpu_cache_usage_perc gauge
vllm:cpu_cache_usage_perc{model_name="Qwen/Qwen2.5-1.5B-Instruct"} 0.0
# HELP vllm:cpu_prefix_cache_hit_rate CPU prefix cache block hit rate.
# TYPE vllm:cpu_prefix_cache_hit_rate gauge
vllm:cpu_prefix_cache_hit_rate{model_name="Qwen/Qwen2.5-1.5B-Instruct"} -1.0
# HELP vllm:gpu_prefix_cache_hit_rate GPU prefix cache block hit rate.
# TYPE vllm:gpu_prefix_cache_hit_rate gauge
vllm:gpu_prefix_cache_hit_rate{model_name="Qwen/Qwen2.5-1.5B-Instruct"} -1.0
# HELP vllm:request_success_total Count of successfully processed requests.
# TYPE vllm:request_success_total counter
vllm:request_success_total{finished_reason="length",model_name="Qwen/Qwen2.5-1.5B-Instruct"} 2.0
vllm:request_success_total{finished_reason="stop",model_name="Qwen/Qwen2.5-1.5B-Instruct"} 3.0
7. Grafana 대시 보드는 또한 탐색하여 위의 메트릭을 소비하도록 구성 할 수도 있습니다. http://localhost:3000
. 아래 그림은 그러한 대시 보드 표시를 보여줍니다 vllm:e2e_request_latency_seconds_sum
.
결론
VLLM이 제공하는 전력, 유연성 및 확장 성은 값 비싼 클라우드 서비스에 의존하는 재정적 긴장없이 AI 프로젝트를 다음 단계로 끌어 올리는 사람에게 귀중한 도구입니다. VLLM은 여러 유형의 하드웨어 가속기를 지원하며 배포 및 통합을 단순화하는 OpenAi 호환 API 서버도 있습니다. 빠르고 효율적이며 단순함으로써 모든 종류의 애플리케이션에서 LLM을 사용할 수있는 새로운 가능성을 열어줍니다. 누구나 큰 AI 모델의 힘을 더 쉽게 사용할 수 있습니다.
참조
- Vllm에 오신 것을 환영합니다
- 추론 시간 계산 이해
Post Comment