llm-d 1.0 رسید؛ هزار عامل را پشت یک Endpoint جمع کرد

|نویسنده: تیم تحریریه QUASA|6 دقیقه مطالعه| 1
llm-d 1.0 رسید؛ هزار عامل را پشت یک Endpoint جمع کرد

بنا بر گزارش Google Cloud، llm-d 1.0 در ۲۰ اکتبر ۲۰۲۶ در PyTorch Conference عرضه شد و در نمایش آن، هزار عامل محصورشده از یک Endpoint مشترک درخواست‌های خود را فرستادند. این عامل‌ها روی Agent Substrate در GKE اجرا می‌شدند و پشت مسیر مشترک، سرویس‌دهنده‌های vLLM و SGLang روی ترکیبی از TPU و GPU قرار داشتند. نمایش نشان می‌دهد این پیکربندی می‌تواند درخواست عامل‌های متعدد را از یک نقطهٔ ورود میان منابع متفاوت هدایت کند؛ عدد عامل‌ها به‌تنهایی معیاری برای سرعت پاسخ یا ظرفیت کلاسترهای دیگر نیست.

llm-d 1.0 پشته‌ای متن‌باز برای استنتاج توزیع‌شده روی Kubernetes است که چند سرویس‌دهندهٔ مدل را به یک مجموعهٔ هماهنگ تبدیل می‌کند. نسخهٔ تازه بر ادارهٔ این مجموعه پس از استقرار تمرکز دارد: نگه‌داشتن زمینهٔ گفت‌وگوی عامل، تنظیم اولویت درخواست‌های مستأجران مختلف و ادامهٔ سرویس هنگام ارتقا. کارلوس کوستا، از بنیان‌گذاران و نگه‌داران اصلی پروژه، در گزارش IBM Research گفت: «llm-d is ready for day 2 operations.» منظور او مرحله‌ای است که سرویس باید زیر بار متغیر، با درخواست‌های رقیب و هنگام تغییر نسخه نیز کار کند.

نمایش هزار عامل چه چیزی را ثابت می‌کند؟

در نمایش Google Cloud، هر عامل به جای شناختن نشانی جداگانهٔ هر موتور یا استخر شتاب‌دهنده، از همان Endpoint مشترک درخواست می‌فرستاد. مسیریاب در پشت آن نقطهٔ ورود برای هر درخواست یک نمونهٔ سرویس‌دهنده انتخاب می‌کرد. این جداسازی برای برنامهٔ عامل مهم است: ترکیب منابع پشت سرویس می‌تواند تغییر کند، در حالی که مسیر فراخوانی برنامه ثابت می‌ماند.

نمایش همچنین دو نیاز متفاوت را در یک مسیر جمع کرد. نوبت تعاملی عامل به پاسخ سریع نیاز دارد، اما یک حلقهٔ عامل می‌تواند پس از کار با ابزار، ناگهان چند درخواست دیگر تولید کند. در چیدمان نمایش‌داده‌شده، مسیریابی آگاه از کش تلاش می‌کرد نوبت‌های بعدی را به نمونه‌ای برساند که زمینهٔ همان عامل را نگه داشته است؛ کنترل جریان نیز درخواست‌های جهشی را پیش از انباشته‌شدن در صف نمونه‌های مشغول نگه می‌داشت. این‌ها رفتار معماری در محیط GKE نمایش‌داده‌شده‌اند، نه نتیجهٔ یک آزمون ظرفیت با مدل و سخت‌افزار دلخواه.

درخواست عامل از کدام لایه‌ها می‌گذرد؟

پس از رسیدن درخواست به مسیر مشترک، مسیریاب هم بار نمونه‌ها و هم جای پیشوندهای ذخیره‌شده در کش KV را در انتخاب مقصد در نظر می‌گیرد. عامل ممکن است پس از فراخوانی یک ابزار به همان دستورها، کد یا تاریخچهٔ گفت‌وگو برگردد. اگر نمونهٔ قبلی هنوز زمینه را در کش داشته باشد، فرستادن نوبت تازه به همان نمونه می‌تواند پردازش دوبارهٔ ورودی را کاهش دهد. وابستگی به آن نمونه مطلق نیست: با پرشدن ظرفیتش، درخواست می‌تواند به مقصد دیگری منتقل شود.

مسیریابی آگاه از نشست در نسخهٔ تازه این رابطه را در طول گفت‌وگوی چندنوبتی دنبال می‌کند و زمان‌بندی آگاه از نوبت، جای درخواست را در جریان کار عامل لحاظ می‌کند. پشتیبانی از وضعیت در Responses API، از جمله previous_response_id، امکان حمل زمینه میان نوبت‌ها را فراهم می‌کند تا برنامه مجبور نباشد هر بار کل تاریخچه را دوباره بفرستد. این دو سازوکار به بخش‌های متفاوتی از مسئله پاسخ می‌دهند: یکی انتخاب نمونه‌ای است که زمینه را نگه داشته و دیگری نحوهٔ حفظ وضعیت گفت‌وگو میان درخواست‌هاست.

وقتی حافظهٔ شتاب‌دهنده برای نگهداری کش کافی نباشد، انتقال کش KV به حافظهٔ میزبان یا لایهٔ ذخیره‌سازی می‌تواند عمر دادهٔ قابل استفادهٔ دوباره را افزایش دهد. در مقابل، بازیابی زمینه از لایه‌ای دورتر نیز هزینهٔ انتقال دارد. بنابراین سود مسیریابی آگاه از کش به تکرار پیشوندها، میزان اشغال حافظه و محل نگهداری داده در همان استقرار وابسته است؛ تنها داشتن قابلیت کش، کاهش تأخیر را تضمین نمی‌کند.

اولویت ترافیک و ارتقا چگونه اداره می‌شود؟

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

ارتقا در سرویس‌دهی تفکیک‌شده دشوارتر است، چون آماده‌سازی ورودی و تولید خروجی در استخرهای جدا انجام می‌شوند. DisaggregatedSet این دو بخش را یک واحد منطقی می‌بیند و درخواست را زمانی به جفت تازه می‌فرستد که هر دو بخش آماده و از نظر نسخه سازگار باشند. خود Endpoint Picker نیز نمونهٔ آمادهٔ جایگزین دارد تا با تعویض نمونهٔ فعال، تصمیم‌گیری دربارهٔ مقصد درخواست ادامه یابد. API پایدار پیکربندی به تیم زیرساخت امکان می‌دهد تعریف سرویس را بر مبنای نسخه‌ای مشخص نگه دارد؛ نتیجهٔ ارتقا در عمل همچنان به آماده‌بودن نمونه‌ها و تنظیمات استقرار وابسته است.

اعداد کارایی به چه محیطی تعلق دارند؟

در شرح فنی پروژهٔ llm-d، ترکیب مسیریابی آگاه از پیشوند و انتقال کش KV به حافظهٔ میزبان، روی بار عامل‌محورِ برنامه‌نویسی و Ironwood TPU یا TPU 7x، زمان میانه تا نخستین توکن را بیش از ۸۵ درصد کاهش داد و توان عملیاتی کل را ۲٫۴ برابر کرد؛ خط مبنا یک Kubernetes Service معمولی بود. نتیجه به ترکیب همین بار کاری، شتاب‌دهنده، مسیریاب و شیوهٔ نگهداری کش تعلق دارد. این آزمایش سهم مستقل هر جزء را از بهبود نهایی جدا نمی‌کند.

برای کلاستری که روی GPU یا توپولوژی شبکهٔ دیگری اجرا می‌شود، پرسش اصلی این است که درخواست‌ها چه مقدار زمینهٔ مشترک دارند و چه سهمی از تأخیر صرف پردازش آن زمینه می‌شود. اگر پیشوندها کم تکرار شوند، مسیریاب فرصت کمتری برای استفاده از کش خواهد داشت؛ اگر حافظه زود پر شود، محل انتقال کش و سرعت بازیابی آن اهمیت بیشتری پیدا می‌کند. نسبت درخواست‌های تعاملی به کارهای پس‌زمینه نیز تعیین می‌کند کنترل اولویت چه اثری بر تجربهٔ کاربران بگذارد. از این رو، نتیجهٔ منتشرشده اندازهٔ سود احتمالی در همان شرایط آزمایش است، نه وعدهٔ کارایی برای هر نصب llm-d.

نسخهٔ تازه ابزارهای ادارهٔ سرویس مشترک را در اختیار استقرارهای خودمیزبان می‌گذارد، اما پیامد آن در هر کلاستر با الگوی درخواست همان کلاستر روشن می‌شود. برای بارهایی که عامل بارها به زمینهٔ طولانی برمی‌گردد، جای کش و سیاست اعزام درخواست می‌تواند تعیین‌کننده باشد؛ برای بارهای دیگر، محدودیت اصلی ممکن است ظرفیت مدل یا انتقال داده میان استخرها باشد.

بیشتر بخوانید:

اشتراک‌گذاری:

عضویت در خبرنامه

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

0