چیتشیت
سرویسدهی LLM با SGLang
LLM Serving with SGLang
راهاندازی، تعیین اندازه، سنجش و رفع اشکال سرور SGLang. نگارش SGLang 0.5.22.
فهرست مطالب
راهاندازی سرور
کدbash
export HF_HUB_OFFLINE=1 # عدم ارتباط با Hub پس از کش شدن مدلها
sglang serve --model-path <model> --host 127.0.0.1 --port 30000 --enable-cache-report --enable-metrics --mem-fraction-static 0.85 # فلگهای L4
curl http://127.0.0.1:30000/ready # کد 200 هنگام پذیرش درخواستها توسط سرور
سه فرایند
معماریدرخواستها و بررسیها
کار و کد| وظیفه | کد |
|---|---|
| ارسال یک درخواست بومی | POST /generate |
| پرسش در قالب چت OpenAI | POST /v1/chat/completions |
| خواندن اصابتهای کش یک درخواست | `meta_info` field `cached_tokens` |
| آزمون ارزیابی آمادگی | /ready |
| تثبیت پراکندگی طول در بنچمارک | --random-range-ratio 1.0 |
| پیمایش یک سقف همزمانی | --max-concurrency 8 |
| ارسال با نرخ ورود ثابت | --request-rate <rate> |
| آزمون پایداری خروجی | python3 -m sglang.test.test_deterministic --n-trials 50 --test-mode single |
بنچمارک سرور شما
دستورها| دستور | عملکرد |
|---|---|
python -m sglang.benchmark.serving --backend sglang --port 30000 --dataset-name random --num-prompts 32 --max-concurrency 8 --seed 7 | ارسال 32 پرامپت تصادفی با حداکثر 8 درخواست همزمان، سپس چاپ گزارش |
--random-input-len 512 --random-output-len 128 | تنظیم طول پرامپت و پاسخ |
--random-range-ratio 1.0 | ثابت نگهداشتن طول تمام پرامپتها بر اساس مقدار درخواستی. پیشفرض 0.0 میانگین را تقریباً نصف میکند |
--request-rate <rate> | ارسال زمانبندیشدهی درخواستها، تا سرور مانند ترافیک واقعی بتواند عقب بیفتد |
پیشفرضهای مهم
پیشفرضها| تنظیم | پیشفرض | نکته |
|---|---|---|
--schedule-policy | fcfs | lpm ترتیب مقاله است، نه پیشفرض |
--schedule-conservativeness | 1.0 | وقتی لاگ عقبنشینیها را نشان داد، آن را افزایش دهید |
--radix-eviction-policy | lru | تنها پس از اندازهگیری نرخ اصابت تغییر دهید |
--kv-cache-dtype | auto | نوع دادهی مدل را حفظ میکند |
--stream-interval | 1 | استریم پس از هر گام |
--tp-size | 1 | یک GPU، مگر اینکه وزنها به مقدار بیشتری نیاز داشته باشند |
--cache-threshold | 0.3 | نرخ تطابق Gateway برای پیوستگی پیشوند |
رفع این خطاها
عیبیابیRuntimeError: [METAL] Command buffer execution failedدر 32 درخواست- علت
- اندازهی استخر روی 87 درصد حافظهی آزاد تنظیم شده
- راهحل
- فلگ
--mem-fraction-static 0.4را ارسال و ریاستارت کنید
میانه TTFT نزدیک به 28 ثانیه با وجود حافظهی آزاد GPU
- علت
- پذیرش درخواستها را به دلیل پر بودن استخر به صف میکند
- راهحل
--schedule-conservativenessرا افزایش یا--max-running-requestsرا کاهش دهید
حلقهی خطای
KV cache pool is full. Retract requests.- علت
- پیشبینی بیش از حد جسورانه است
- راهحل
--schedule-conservativenessرا افزایش داده و مقدار واقعبینانهیmax_new_tokensبفرستید
RuntimeError: The memory capacity is unbalanced- علت
- یک کارت TP حافظه را با پادهای دیگر به اشتراک میگذارد
- راهحل
- کارت دیگر را آزاد کرده و ریاستارت کنید. هیچ فلگی این بررسی را غیرفعال نمیکند
cuda graph: Falseدر سطرهای رمزگشایی زیر بار- علت
- دستهی رمزگشایی بالاتر از حد مجاز گراف است
- راهحل
--cuda-graph-max-bs-decodeرا روی اوج همزمانی تنظیم کنید
ambiguous option: --cuda-graph-max-bs- علت
- این فلگ در v0.5.22 تفکیک شد
- راهحل
- از
--cuda-graph-max-bs-decodeیا--cuda-graph-max-bs-prefillاستفاده کنید
#cached-token: 0در هر تکرار- علت
- شناسهی تصادفی در ابتدای پرامپت سیستم
- راهحل
- شناسه را به انتها منتقل کرده یا حذفش کنید
ترتیب بهینهسازی
گامبهگام- سنجشاجرای
sglang.benchmark.servingدر سه سقف با فلگ--random-range-ratio 1.0. - حافظهتنظیم
--mem-fraction-staticروی هر ماشین اشتراکی. - پرامپتهاقرار دادن متن مشترک در ابتدا و دور نگه داشتن شناسههای درخواست از بخش آغازین.
- سقفتنظیم
--max-running-requestsدر نقطهی زانویی اندازهگیریشده. - کرنلهاتغییر تنظیمات گراف و اتنشن به صورت تکبهتک.
- موازیسازیافزودن
--tp-sizeیا--dp-sizeتنها زمانی که یک رپلیکا اشباع شد.
اعداد مهم برای پایش
مفهومها- sglang:token_usage
- نزدیک به 1.0 یعنی استخر KV پر است.
- sglang:num_queue_reqs
- بالاتر از 0 برای چند دقیقه یعنی سرور از نقطهی زانویی خود عبور کرده است.
- sglang:cache_hit_rate
- یک سنجهی بازهای. نرخ را از
sglang:prefill_effective_tokens_totalمحاسبه کنید. - cached_tokens
- تعداد توکنهای پرامپت بازاستفادهشده از کش.
- نرخ پردازش موثر
- درخواستها در ثانیهای که به طور همزمان به اهداف TTFT و TPOT میرسند.
رخدادهای ثبتشده
مفهومها- مورد #36889
- یک سقف Mamba محدودیت درخواست را روی 2 گذاشت و تنها یک خط info آن را اعلام کرد.
- مورد #17411
- ارتقای FlashInfer سرعت رمزگشایی Hopper را هفت برابر کندتر کرد.
- مورد #5274
- معماری EAGLE-3 سرعت دسته-1 را دو برابر کرد و همزمانی 20 را یکچهارم کاهش داد.
- مورد #35129
- حذف هش اختصاصی هر نشست نرخ اصابت را از 66.8 به 94.4 درصد رساند.
واژهنامه
اصطلاحها- ITL
- تاخیر بین توکنها (inter-token latency)، فاصلهی زمانی میان توکنها.
- MLA
- اتنشن چندسر نهفته (multi-head latent attention)، ساختار فشردهی KV استفادهشده توسط DeepSeek.
- MoE
- ترکیب متخصصان (mixture of experts)، که در آن هر توکن از چند متخصص استفاده میکند.
- EPLB
- توازن بار جایگذاری متخصصان در میان GPUها.
- PD
- جداسازی پیشپرکنی و رمزگشایی، با اجرای پیشپرکنی و رمزگشایی روی سرورهای مجزا.
پرسشها
پرسش و پاسخ- وقتی زمان تا اولین توکن بالاست و GPU بیکار است، به کجا نگاه کنم؟
- پیش از کرنلها، فرایند توکنایزر را بررسی کنید.
- چرا استخر بزرگتر هیچ نرخ پردازشی اضافه نمیکند؟
- در اجراهای ما استخر هرگز در 64 کاربر پر نشد.
- آیا باید
latestرا مستقر کنم؟ - خیر. یک برچسب مثل
v0.5.22را تثبیت کنید.
نکات
نکتهها- سرورها را با
--enable-cache-reportو--enable-metricsراهاندازی کنید. - اندازهی استخر را پیش از تعیین ظرفیت کلاینتها، در لاگ راهاندازی بخوانید.
- سیگنال SIGTERM را فقط به فرایند اصلی ارسال کنید.
- برای آزمونهای ارزیابی زندهبودن،
SGLANG_ENABLE_HEALTH_ENDPOINT_GENERATION=falseرا تنظیم کنید.