Tăng tốc Inference gấp 24 lần: Hướng dẫn dùng vLLM (Python) để triển khai Llama 3 cho môi trường Production

AI Hunter

Member
Tăng tốc Inference gấp 24 lần: Hướng dẫn dùng vLLM (Python) để triển khai Llama 3 cho môi trường Production

Bạn vừa Fine-tune xong một model Llama 3 cực xịn.
Bạn dùng `huggingface pipeline` để chạy demo. Nó hoạt động tốt với 1 người dùng.
Nhưng khi có 10 người cùng chat một lúc? Hệ thống bắt đầu lag, bộ nhớ GPU tràn (OOM), tốc độ rớt thê thảm xuống còn 5 token/s.

Đó là lúc bạn cần rời xa các thư viện dành cho "nghiên cứu" và chuyển sang công cụ cấp độ "công nghiệp" (Production Grade): **vLLM**.

Tăng tốc Inference gấp 24 lần Hướng dẫn dùng vLLM (Python) để triển khai Llama 3 cho môi trườn...jpg

1. Bí mật của vLLM: PagedAttention​

Tại sao các thư viện cũ lại chậm? Vì chúng cấp phát bộ nhớ GPU một cách lãng phí (giống như bạn thuê cả toà nhà chỉ để ở 1 phòng).

vLLM sử dụng thuật toán **PagedAttention**, lấy cảm hứng từ cách hệ điều hành quản lý RAM ảo. Nó chia nhỏ bộ nhớ KV Cache thành các block và chỉ cấp phát khi cần thiết.
=> Kết quả: Nhét được nhiều request hơn vào cùng một GPU -> **Tăng throughput lên 24 lần**.

2. Cài đặt​

*Yêu cầu: Linux hoặc WSL2 (Windows Subsystem for Linux), Python 3.9+, GPU NVIDIA (Compute Capability 7.0+).*

Bash:
# Cài đặt vLLM
pip install vllm

3. Cách 1: Chạy Offline (Batch Inference)​

Dùng khi bạn có một danh sách lớn dữ liệu cần xử lý (ví dụ: tóm tắt 10,000 bài báo).

Tạo file offline_inference.py:

Python:
from vllm import LLM, SamplingParams

# 1. Định nghĩa danh sách câu hỏi (Prompts)
prompts = [
    "Hello, my name is",
    "The president of the United States is",
    "The capital of France is",
    "Python is a great language because",
]

# 2. Cấu hình tham số sinh (giống ChatGPT settings)
sampling_params = SamplingParams(temperature=0.8, top_p=0.95, max_tokens=100)

# 3. Load Model (Tự động tải Llama 3 từ HuggingFace)
# gpu_memory_utilization=0.9: Dùng 90% VRAM
print("🚀 Đang khởi động vLLM Engine...")
llm = LLM(model="meta-llama/Meta-Llama-3-8B-Instruct", gpu_memory_utilization=0.9)

# 4. Chạy Inference
outputs = llm.generate(prompts, sampling_params)

# 5. In kết quả
for output in outputs:
    prompt = output.prompt
    generated_text = output.outputs[0].text
    print(f"Prompt: {prompt!r}, Generated text: {generated_text!r}")

4. Cách 2: Chạy API Server (OpenAI Compatible)​

Đây là cách dùng phổ biến nhất (Production). Bạn dựng vLLM thành một Server, và Frontend của bạn sẽ gọi vào nó giống hệt như gọi API của OpenAI.

Chạy lệnh sau trên terminal:

Bash:
python -m vllm.entrypoints.openai.api_server \
    --model meta-llama/Meta-Llama-3-8B-Instruct \
    --host 0.0.0.0 \
    --port 8000 \
    --dtype auto \
    --api-key "sk-my-secret-key"

Sau khi server chạy, bạn có thể thay thế `gpt-3.5-turbo` trong code ứng dụng của bạn bằng Llama 3 local mà không cần sửa logic code.

Ví dụ Client Code (Python):
Python:
from openai import OpenAI

# Trỏ về server vLLM local của bạn
client = OpenAI(
    base_url="http://localhost:8000/v1",
    api_key="sk-my-secret-key",
)

response = client.chat.completions.create(
    model="meta-llama/Meta-Llama-3-8B-Instruct",
    messages=[
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "Tell me a joke about programmers."},
    ]
)

print(response.choices[0].message.content)

5. Benchmark Hiệu Năng​

Trên một card NVIDIA A10G (24GB VRAM):
  • HuggingFace Transformers: ~80 tokens/giây.
  • vLLM: ~2500 tokens/giây (Khi xử lý nhiều request song song).
Sự khác biệt là "một trời một vực".

Kết luận​

Nếu bạn định nghiêm túc với việc tự host model AI (Self-hosted LLM), vLLM là thư viện bắt buộc phải dùng. Nó biến chiếc GPU đơn lẻ của bạn thành một cỗ máy phục vụ hàng ngàn người dùng mạnh mẽ.
 
Back
Top