AI Infrastructure

معايرة تكوينات خوادم GPU للاستدلال عالي الإنتاجية لنماذج اللغات الكبيرة

إن نشر نماذج اللغات الكبيرة (LLMs) على نطاق واسع يتعلق أكثر بالبنية التحتية الداعمة لها من معمارية النموذج نفسه. مع انتقال المؤسسات من مرحلة إثبات المفهوم إلى الإنتاج، ينتقل عنق الزجاجة من حجم النموذج إلى الإنتاجية وزمن الاستجابة. نادرًا ما تكون الخوادم المهيأة للتدريب مثالية للاستدلال. في هذا المنشور، نستعرض معايير القياس والتكوينات الحاسمة اللازمة لتعظيم استخدام وحدات معالجة الرسومات (GPU) للاستدلال عالي الإنتاجية لنماذج اللغات الكبيرة.

تحديد مقاييسك: الإنتاجية مقابل زمن الاستجابة

قبل اختيار الأجهزة، يجب عليك تعريف ما تعنيه "الإنتاجية العالية" في حالة الاستخدام الخاصة بك. هل تقوم ببناء روبوت محادثة يتطلب زمن استجابة أقل من ثانية واحدة للوصول إلى الرمز الأول (TTFT)، أم أنك تبني خط إنتاج محتوى آلي يعطي الأولوية للرموز في الثانية (TPS)؟

بالنسبة للإنتاجية البحتة، تحتاج إلى تعظيم استخدام الحوسبة. غالبًا ما يتضمن ذلك تجميع الطلبات معًا بشكل ديناميكي. ومع ذلك، فإن التجميع العدواني يزيد من زمن الاستجابة للطلبات الفردية. الهدف هو العثور على "النقطة المثالية" حيث يتم استغلال ذاكرة وحدة معالجة الرسومات بالكامل بواسطة الدفعات النشطة دون التسبب في تأخيرات طابور مفرطة.

مجموعة البرمجيات: اختيار محرك الاستدلال المناسب

مكتبة `transformers` الافتراضية من Hugging Face ممتازة للنماذج الأولية ولكنها غير فعالة للإنتاج بسبب عدم وجود إدارة ذاكرة مجزأة وتجميع مستمر. من أجل الإنتاجية العالية، فكر في محركات متخصصة مثل vLLM أو TensorRT-LLM.

يأتي أحد أهم المكاسب من استخدام PagedAttention، والذي يحل مشكلة تجزئة الذاكرة الكامنة في آليات الانتباه التقليدية. يتيح لك ذلك حزم عدد أكبر من التسلسلات في ذاكرة وحدة معالجة الرسومات في وقت واحد، مما يزيد الإنتاجية مباشرة.

اختيار الأجهزة وطوبولوجيا NVLink

ليست جميع وحدات معالجة الرسومات متساوية في مجموعة الخوادم. بالنسبة لاستدلال نماذج اللغات الكبيرة، غالبًا ما تكون عرضة نطاق الذاكرة هو العامل المحدد، وليس فقط عمليات الفلوتر العائمة الخام (FLOPs). عند تشغيل نماذج تتجاوز ذاكرة وحدة معالجة الرسومات الواحدة (على سبيل المثال، 70 مليار معلمة)، يجب تقسيم النموذج عبر وحدات معالجة رسومات متعددة.

الاتصال بين المكونات مهم. سيواجه الخادم المزود بأربع وحدات معالجة رسومات A100 متصلة عبر PCIe 4.0 عبئًا إضافيًا في الاتصال أثناء توازي الموترات. على العكس من ذلك، تسمح الخوادم المجهزة بـ NVLink أو NVSwitch (مثل منصة HGX) بنقل البيانات بين وحدات معالجة الرسومات بسرعة قريبة من سرعة الذاكرة. يجب أن تقارن المعايرة دائمًا التكوينات المتصلة عبر PCIe بتلك المتصلة عبر NVLink لقياس عقوبة زمن الاستجابة.

المعايرة العملية باستخدام vLLM

للمعايرة تكوين خادمك، استخدم أدوات تحاكي حركة المرور الواقعية. يوضح برنامج Python التالي كيفية معايرة نموذج باستخدام مكتبة `vLLM`، مع قياس كل من زمن الاستجابة والإنتاجية.

import vllm
from vllm import LLM, SamplingParams

# Define the model and tokenizer
model_name = "meta-llama/Llama-2-7b-chat-hf"

# Configure the LLM with speculative decoding and tensor parallelism
llm = LLM(
    model=model_name,
    tensor_parallel_size=4,  # Adjust based on your GPU count
    dtype="float16",
    max_num_batched_tokens=8192,
    max_num_seqs=256
)

# Generate sample prompts
prompts = ["Hello, my name is", "The capital of France is"]

# Define sampling parameters
sampling_params = SamplingParams(temperature=0.8, top_p=0.95, max_tokens=100)

# Run the benchmark
outputs = llm.generate(prompts, sampling_params)

# Print results
for output in outputs:
    prompt = output.prompt
    generated_text = output.outputs[0].text
    print(f"Prompt: {prompt!r}, Generated: {generated_text!r}")

عند تشغيل هذه المعايرة، راقب استخدام وحدة معالجة الرسومات باستخدام `nvidia-smi` أو `nvtop`. تريد أن ترى استخدامًا مستدامًا يتجاوز 90٪. إذا كان الاستخدام منخفضًا، فمن المرجح أن يكون عنق الزجاجة هو الإدخال/الإخراج (تحميل المطالبات من القرص) أو تجزئة الرموز المقيدة بالمعالج المركزي (CPU)، وليس وحدة معالجة الرسومات نفسها.

الخاتمة

تعتبر معايرة تكوينات خوادم GPU للاستدلال لنماذج اللغات الكبيرة عملية تكرارية. ابدأ باختيار محرك استدلال محسن مثل vLLM، ثم اختبر أجهزتك تحت الضغط لتحديد نقاط الضعف في عرض نطاق الذاكرة أو زمن استجابة الاتصال. من خلال مواءمة طوبولوجيا أجهزتك مع متطلبات الإنتاجية، يمكنك تقليل تكاليف الاستدلال بشكل كبير مع الحفاظ على أداء عالٍ.

Share: