استقرار مدلهای زبانی بزرگ (LLMs) در مقیاس، بیشتر به زیرساخت مربوط است تا معماری مدل. با حرکت سازمانها از مرحله اثبات مفهوم به تولید، گلوگاه از اندازه مدل به بازده و تأخیر تغییر میکند. سروری که برای آموزش پیکربندی شده است، به ندرت برای استنتاج بهینهسازی شده است. در این پست، معیارهای حیاتی و پیکربندیهای مورد نیاز برای حداکثر کردن استفاده از GPU برای ارائه LLM با بازده بالا را بررسی میکنیم.
تعریف معیارهای شما: بازده در برابر تأخیر
قبل از انتخاب سختافزار، باید تعریف کنید که «بازده بالا» برای مورد استفاده خاص شما به چه معناست. آیا یک چتبات با تأخیر زمان تا اولین توکن (TTFT) زیر ثانیه میسازید، یا یک پایپلاین تولید محتوای خودکار که توکن در ثانیه (TPS) را در اولویت قرار میدهد؟
برای بازده خالص، باید استفاده از محاسبات را حداکثر کنید. این اغلب شامل گروهبندی پویای درخواستها است. با این حال، گروهبندی تهاجمی، تأخیر را برای درخواستهای فردی افزایش میدهد. هدف یافتن «نقطه شیرین» است که در آن حافظه GPU به طور کامل توسط دستههای فعال استفاده شود بدون اینکه باعث تأخیرهای صف بیش از حد شود.
لایه نرمافزاری: انتخاب موتور استنتاج مناسب
کتابخانه پیشفرض `transformers` هگینگفیس برای نمونهسازی عالی است اما به دلیل نداشتن مدیریت حافظه صفحهبندی شده و گروهبندی پیوسته، برای تولید ناکارآمد است. برای بازده بالا، موتورهای تخصصی مانند vLLM یا TensorRT-LLM را در نظر بگیرید.
یکی از بزرگترین بهبودها از استفاده از PagedAttention ناشی میشود که مشکل تکهتکه شدن حافظه ذاتی در مکانیسمهای توجه سنتی را حل میکند. این به شما امکان میدهد دنبالههای بیشتری را همزمان در حافظه GPU فشرده کنید که مستقیماً بازده را افزایش میدهد.
انتخاب سختافزار و توپولوژیهای NVLink
همه GPUها در یک خوشه برابر نیستند. برای استنتاج LLM، پهنای باند حافظه اغلب عامل محدودکننده است، نه فقط FLOPs خام. هنگام اجرای مدلهایی که از حافظه GPU تکی فراتر میروند (مثلاً 70 میلیارد پارامتر)، باید مدل را بین چندین GPU تقسیم کنید.
اتصال مهم است. سروری با چهار GPU A100 که از طریق PCIe 4.0 متصل شدهاند، در طول موازیسازی تانسور از هزینه ارتباطی رنج خواهد برد. در مقابل، سرورهایی که مجهز به NVLink یا NVSwitch هستند (مانند پلتفرم HGX) امکان انتقال داده با سرعت نزدیک به حافظه بین GPUها را فراهم میکنند. ارزیابی باید همیشه پیکربندیهای متصل به PCIe را با پیکربندیهای متصل به NVLink مقایسه کند تا جریمه تأخیر را کمیسازی کند.
ارزیابی عملی با vLLM
برای ارزیابی پیکربندی سرور خود، از ابزارهایی استفاده کنید که ترافیک دنیای واقعی را شبیهسازی میکنند. اسکریپت پایتون زیر نحوه ارزیابی یک مدل با استفاده از کتابخانه `vLLM` را نشان میدهد که هم تأخیر و هم بازده را اندازهگیری میکند.
import vllm
from vllm import LLM, SamplingParams
# تعریف مدل و توکنایزر
model_name = "meta-llama/Llama-2-7b-chat-hf"
# پیکربندی LLM با کشف طمعکارانه و موازیسازی تانسور
llm = LLM(
model=model_name,
tensor_parallel_size=4, # بر اساس تعداد GPUهای خود تنظیم کنید
dtype="float16",
max_num_batched_tokens=8192,
max_num_seqs=256
)
# تولید نمونههای درخواست
prompts = ["Hello, my name is", "The capital of France is"]
# تعریف پارامترهای نمونهبرداری
sampling_params = SamplingParams(temperature=0.8, top_p=0.95, max_tokens=100)
# اجرای ارزیابی
outputs = llm.generate(prompts, sampling_params)
# چاپ نتایج
for output in outputs:
prompt = output.prompt
generated_text = output.outputs[0].text
print(f"Prompt: {prompt!r}, Generated: {generated_text!r}")
هنگام اجرای این ارزیابی، استفاده از GPU را با استفاده از `nvidia-smi` یا `nvtop` نظارت کنید. میخواهید استفاده پایدار بالای 90٪ را مشاهده کنید. اگر استفاده پایین است، گلوگاه شما احتمالاً I/O (بارگذاری درخواستها از دیسک) یا توکنسازی وابسته به CPU است، نه خود GPU.
نتیجهگیری
ارزیابی پیکربندیهای سرور GPU برای استنتاج LLM یک فرآیند تکراری است. با انتخاب یک موتور استنتاج بهینه مانند vLLM شروع کنید، سپس سختافزار خود را برای شناسایی گلوگاهها در پهنای باند حافظه یا تأخیر اتصال تحت فشار قرار دهید. با همراستا کردن توپولوژی سختافزاری خود با نیازهای بازده، میتوانید هزینههای استنتاج را به طور قابل توجهی کاهش دهید و در عین حال عملکرد بالا را حفظ کنید.