VLLM을 사용하여 DIY AI 모델 호스팅 플랫폼을 구축하십시오

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을 사용하여 DIY AI 모델 호스팅 플랫폼을 구축하십시오

결론

VLLM이 제공하는 전력, 유연성 및 확장 성은 값 비싼 클라우드 서비스에 의존하는 재정적 긴장없이 AI 프로젝트를 다음 단계로 끌어 올리는 사람에게 귀중한 도구입니다. VLLM은 여러 유형의 하드웨어 가속기를 지원하며 배포 및 통합을 단순화하는 OpenAi 호환 API 서버도 있습니다. 빠르고 효율적이며 단순함으로써 모든 종류의 애플리케이션에서 LLM을 사용할 수있는 새로운 가능성을 열어줍니다. 누구나 큰 AI 모델의 힘을 더 쉽게 사용할 수 있습니다.

참조

  1. Vllm에 오신 것을 환영합니다
  2. 추론 시간 계산 이해

출처 참조

Post Comment

당신은 놓쳤을 수도 있습니다