ویرگول
ورودثبت نام
محمد حیدری
محمد حیدریعلاقه مند به مهندسی داده ها و هوش مصنوعی
محمد حیدری
محمد حیدری
خواندن ۶ دقیقه·۱ روز پیش

با vLLM: پمپاژ خونی تازه در LLMها برای افزایش سرعت پاسخ‌دهی و توان پردازشی

vLLM چیه اصلاً؟

vLLM یه کتابخونه‌ی اوپن‌سورسه که برای اجرای سریع و بهینه‌ی مدل‌های زبانی بزرگ (LLMها) ساخته شده. خلاصه بگم، خیلی خوبه برای وقتی که می‌خوای مدل رو توی محیط پروداکشن و نه صرفا تستی اجرا کنی و تعداد درخواست‌ها هم زیاده.


مشکل چی بود که vLLM اومد حلش کنه؟

مدل‌های زبانی معمولاً خیلی سنگینن، هم از نظر پردازش، هم مصرف حافظه. وقتی چندتا کاربر همزمان درخواست بدن، اوضاع بدتر هم میشه
روش‌های قدیمی معمولاً کند بودن و حتی از سخت‌افزار هم خوب استفاده نمی‌کردن.


جادوی اصلی vLLM چیه؟ Paged Attention

اینجا بخش جذاب ماجراست

Paged Attention ایده‌شو از حافظه مجازی سیستم‌عامل‌ها گرفته. به این صورت که میاد مدیریت حافظه‌ی اَتِنشِن رو خیلی بهینه‌تر می‌کنه.

به جای اینکه کل KV cache (همون key/valueها) رو تو یه فضای بزرگ و یک‌تکه نگه داره، میاد اونو تیکه‌تیکه (page) می‌کنه.

ساده‌تر بگم:

  • حافظه رو به بلوک‌های کوچیک تقسیم می‌کنه (مثلاً چند تا توکن در هر بلاک)

  • یه جدول سبک نگه می‌داره که بگه هر داده کجا ذخیره شده

  • موقع اجرا، دقیق میره همون تیکه‌هایی که لازم داره رو برمی‌داره

مثل این می‌مونه که به جای اینکه کل کتابخونه رو بگردی، دقیق بدونی هر کتاب کدوم قفسه‌ست.


نتیجه چی میشه؟

چون این تیکه‌ها لازم نیست کنار هم باشن:

  • می‌تونه هزاران درخواست رو همزمان هندل کنه

  • حتی اگه سرعت تولید جواب‌ها فرق داشته باشه

  • استفاده از GPU هم خیلی بهینه‌تر میشه

گیت هاب vLLM با بیش از 81k استار ...
گیت هاب vLLM با بیش از 81k استار ...

نصب vLLM (مثال روی مک M1)

اول یه فولدر و محیط مجازی بساز:

mkdir vllm_trials cd vllm_trials python3 -m venv venv source venv/bin/activate

بعد نصب:

pip install vllm

اجرا کردن یه مدل

مثلاً مدل Phi-1.5:

vllm serve microsoft/phi-1_5 --trust-remote-code

این دستور:


  • یه API لوکال مثل OpenAI بالا میاره


  • روی آدرس لوکال هاسن: پورت 8000

اون فلگ

--trust-remote-code

هم لازمه چون بعضی مدل‌ها کد اختصاصی دارن.

نکته:

(برای GPUهای NVIDIA بهینه شده و روی Mac محدودیت داره)


استفاده با Python (مثل OpenAI API)

from openai import OpenAI client = OpenAI( api_key="EMPTY", base_url="localhost:8000/v1", ) completion = client.completions.create( model="microsoft/phi-1_5", prompt="San Francisco is a" ) print(completion)

استفاده مستقیم از خود vLLM

from vllm import LLM, SamplingParams llm = LLM(model="microsoft/phi-1_5") prompts = [ "Hello, my name is", "The capital of France is", ] params = SamplingParams(temperature=0.8, top_p=0.95) outputs = llm.generate(prompts, params) for out in outputs: print(out.outputs[0].text)

اتصال به LangChain

from langchain_community.llms import VLLM llm = VLLM( model="microsoft/phi-1_5", trust_remote_code=True, temperature=0.8, ) print(llm.invoke("What is the capital of France?"))

تصویر از وی ال ال ام دات اِی آی
تصویر از وی ال ال ام دات اِی آی

یه کم ریز تر بشیم رفقا:

مشکل اصلی LLMها کجاست؟ (یه نگاه دقیق‌تر)

قبلش گفتیم مدل‌ها سنگینن، ولی اینجا دقیق‌تر می‌گه کجا گلوگاهه:

1. هدر رفتن حافظه (Memory Fragmentation)

مدل‌ها برای هر توکن یه KV cache نگه می‌دارن، که خیلی زود حافظه GPU رو می‌ترکونه

مشکل اینجاست:

  • یه عالمه فضا رزرو میشه ولی کامل استفاده نمی‌شه

  • یه جاهایی هم فضای خالی ریز ریز ایجاد میشه که به درد هیچ درخواست جدیدی نمی‌خوره

نتیجه:

  • هزینه سخت‌افزار بالا

  • تعداد درخواست همزمان کم


2. batching ضعیف (Static Batching)

روش‌های قدیمی اینطوری بودن:

  • یه batch درست می‌کنن

  • صبر می‌کنن همه تموم بشن

ولی مشکل:

  • خروجی‌ها طول‌های مختلف دارن

  • یکی زود تموم میشه، یکی دیر

پس GPU می‌شینه بیکار تا اون آخری تموم بشه

نتیجه:

  • تاخیر بالا

  • تعداد پردازش پایین


نوآوری دوم vLLM چیه؟ Continuous Batching

مکانیزم کارش اینه، به جای اینکه صبر کنه کل batch تموم شه:

چی کار می‌کنه؟

  • هر لحظه وضعیت درخواست‌ها رو چک می‌کنه

  • هر جا جا خالی شد، سریع با درخواست جدید پرش می‌کنه

خیلی ساده:

مثل صف بانک نیست که همه با هم بیان جلو
بیشتر شبیه باجه‌های آزاد سوپرمارکته


نتیجه‌ش چیه؟

  • GPU همیشه در حال کاره (بیکار نمی‌مونه)

  • سرعت پاسخ خیلی بهتر میشه

  • تعداد درخواست در ثانیه چند برابر میشه (حتی تا 24 برابر تو بعضی تست‌ها)


امکانات محشر vLLM

این کتابخونه فقط دو تا ایده نیست، کلی ابزار هم داره:

ساپورت چند GPU و حتی چند سرور

اگه پروژه‌ات بزرگه:

  • می‌تونی مدل رو بین چند GPU پخش کنی

  • حتی بین چند ماشین (کلاسترینگ)


Quantization (سبک کردن مدل)

با روش‌هایی مثل:

  • INT8

  • FP8

  • GPTQ

در نتیجه

  • حافظه کمتر مصرف میشه

  • سرعت بالاتر میره


توکن استریمینگ

خروجی رو دونه‌دونه میده (مثل ChatGPT)

  • تجربه کاربری خیلی بهتر

  • حس realtime بودن


پریفیکس کشینگ

اگه چندتا درخواست اولشون شبیه باشه:

مثلاً:

برام از هوش مصنوعی بگو
برام از یادگیری ماشین بگو

قسمت مشترک فقط یه بار محاسبه میشه


LoRA داینامیک

برای مدل‌های فاین‌تیون شده:

  • راحت می‌تونی چندتا LoRA رو مدیریت کنی

  • بدون اینکه کل مدل رو دوباره لود کنی


کرنل‌های بهینه CUDA

از تکنیک‌هایی مثل:

  • Flash Attention

  • Flash Infer

استفاده می‌کنه برای سرعت بیشتر روی GPU


معماری vLLM خیلی خلاصه

چندتا بخش مهم داره:

  • Scheduler : تصمیم می‌گیره کی چی اجرا شه

  • EngineCore : مغز اصلی اجرا

  • Model Runner : اجرای مدل روی GPU

  • KV Cache Manager : مدیریت حافظه

نکته مهم:
کارهای CPU و GPU جدا شدن: سرعت بالاتر


حالت API با استریم

می‌تونی جواب رو تیکه‌تیکه بگیری:

stream=True

همون حس تایپ شدن جواب مثل چت‌بات‌ها


کی اصلاً سراغ vLLM بریم؟

این خیلی مهمه 👇

وقتی:

  • کاربر زیاد داری (high concurrency)

  • سرعت جواب مهمه (low latency)

  • می‌خوای هزینه GPU کمتر شه

  • می‌خوای مدل رو خودت host کنی (نه API خارجی)

اجرای vLLM در محیط‌های آفلاین و سازمانی

یکی از ویژگی‌های خیلی کاربردی vLLM اینه که می‌تونه توی محیط‌های کاملاً آفلاین (Air-Gapped) اجرا بشه؛ یعنی هیچ نیازی به اینترنت نداره. این موضوع برای سازمان‌هایی مثل بانک‌ها، مخابرات، صنایع دفاعی یا نهادهای دولتی خیلی مهمه، چون داده‌ها نباید از شبکه داخلی خارج بشن.

برای راه‌اندازی vLLM تو این شرایط، معمولاً روی یه سیستم که اینترنت داره، همه پکیج‌ها و وابستگی‌ها دانلود می‌شن و بعد منتقل می‌شن به سیستم مقصد. بعدش می‌تونی بدون هیچ اتصال اینترنتی، vLLM رو کامل نصب و اجرا کنی.

تو این مدل از استقرار، خود مدل‌ها هم به‌صورت لوکال (روی دیسک) اجرا می‌شن و هیچ وابستگی‌ای به سرویس‌های بیرونی ندارن. برای همین، این روش یکی از بهترین گزینه‌ها برای محیط‌های امن و سازمانیه.

یه نکته مهم هم اینه که برای جلوگیری از هر درخواست ناخواسته به اینترنت (مثلاً به Hugging Face)، می‌تونی حالت آفلاین رو فعال کنی تا همه‌چیز فقط از روی فایل‌های محلی لود بشه.


تست و بررسی درست کار کردن سیستم

بعد از اینکه vLLM رو راه انداختی، می‌تونی با یه درخواست ساده API (مثلاً با curl) چک کنی که همه‌چیز درست کار می‌کنه یا نه. این تست کمک می‌کنه مطمئن بشی:

  • API در دسترسه

  • مدل درست لود شده

  • inference بدون مشکل اجرا میشه

  • کل pipeline (حتی برای ورودی‌های چندرسانه‌ای) سالمه


پشتیبانی از ورودی‌های چندرسانه‌ای

vLLM فقط محدود به متن نیست و از مدل‌های چندرسانه‌ای (Multimodal) هم پشتیبانی می‌کنه. یعنی می‌تونی همزمان متن و تصویر بهش بدی و خروجی متنی بگیری. این قابلیت توی کارهایی مثل تحلیل تصویر، تولید کپشن یا ساخت سیستم‌های هوشمند ترکیبی خیلی به درد می‌خوره.


نکته مهم درباره GPU و CUDA

برای اینکه بهترین performance رو بگیری، vLLM عملاً برای اجرا روی GPUهای NVIDIA ساخته شده. پس خیلی مهمه که نسخه CUDA با درایور کارت گرافیکت سازگار باشه

مثلاً سری 12.x.

این موضوع مستقیم روی سرعت و پایداری سیستم تاثیر می‌ذاره.

در vLLM خیلی از پیچیدگی‌ها پشت صحنه مدیریت می‌شن

یکی از مزیت‌های مهم vLLM اینه که خیلی از کارهای پیچیده مثل batching، زمان‌بندی درخواست‌ها و مدیریت GPU رو خودش انجام می‌ده.در نتیجه، لازم نیست درگیر جزئیات سطح پایین بشی و می‌تونی بیشتر روی طراحی پرامپت و منطق خروجی تمرکز کنی.


کنترل نحوه تولید خروجی با SamplingParams

در vLLM می‌تونی رفتار تولید متن رو با پارامترهایی مثل temperature و top-p کنترل کنی.

  • temperature مشخص می‌کنه خروجی چقدر خلاقانه یا تصادفی باشه
    (عدد پایین: خروجی دقیق‌تر، عدد بالا : متنوع‌تر)

  • top-p مشخص می‌کنه مدل از بین چه محدوده‌ای از کلمات انتخاب کنه
    (مثلاً 0.9 یعنی فقط محتمل‌ترین گزینه‌ها در نظر گرفته می‌شن)

این تنظیمات بهت کمک می‌کنن بسته به کاربرد، خروجی رو دقیق‌تر یا خلاقانه‌تر کنی.


vLLM فقط مدل نیست، یه runtime کامل هم هست

وقتی با vLLM کار می‌کنی، در واقع فقط مدل رو لود نمی‌کنی؛
بلکه یه runtime کامل inference هم داری که شامل:

  • مدیریت درخواست‌ها

  • batching خودکار

  • اجرای بهینه روی GPU

می‌شه.

برای همین، استفاده ازش خیلی ساده‌تر از اینه که خودت بخوای این سیستم‌ها رو از صفر پیاده‌سازی کنی.

جمع‌بندی

vLLM خیلی به درد می‌خوره وقتی:

  • مدل بزرگ داری

  • درخواست‌ها زیاده

  • می‌خوای سریع و بهینه سرویس بدی

الانم تبدیل شده به یکی از ابزارهای محبوب برای deploy کردن LLMها در مقیاس بزرگ.

هوش مصنوعییادگیری ماشین
۳
۳
محمد حیدری
محمد حیدری
علاقه مند به مهندسی داده ها و هوش مصنوعی
شاید از این پست‌ها خوشتان بیاید