شش GPU روی یک slot؛ اجرای Radeon و RTX پشت یک PCIe switch

چرا مهم است

اگر برای اجرای model چند GPU کنار هم می‌گذاری، این گزارش تفاوت اتصال هر کارت به switch و اتصال مشترک به CPU را نشان می‌دهد. نتیجه‌های آن همچنین نشان می‌دهند که وضعیت P2P در همین سیستم روی نرخ خروجی اثر داشته است.

قبل از خواندن، این‌ها را بدان۴ مفهوم
PCIe switch

قطعه‌ای که چند دستگاه PCIe را به یک اتصال بالادستی وصل می‌کند و می‌تواند ترافیک میان دستگاه‌های متصل را درون خودش هدایت کند.

در حال نگارش: PCIe switch

Peer-to-peer

انتقال مستقیم داده میان دو دستگاه، مانند دو GPU،؜ بدون عبور داده از حافظهٔ میزبان.

در حال نگارش: Peer-to-peer

Tensor parallelism

روشی برای تقسیم محاسبات tensor‌های یک model میان چند GPU؛ هر GPU بخشی از محاسبات را انجام می‌دهد.

در حال نگارش: Tensor parallelism

decode

مرحله‌ای از اجرای model زبانی که در آن token‌های خروجی به‌تدریج تولید می‌شوند.

در حال نگارش: decode

نویسنده با استفاده از یک PCIe switch مدل Broadcom PEX88096،؜ شش GPU را به تنها یک slot از نوع x16 روی ASUS TUF Gaming X570-Plus متصل کرده است: چهار Radeon AI PRO R9700 با حافظهٔ ۳۲ گیگابایتی و دو RTX 3090 با حافظهٔ ۲۴ گیگابایتی. سیستم با Ryzen 9 3900X،؜ حافظهٔ RAM برابر با ۱۲۸ گیگابایت و Debian 13،؜ هر دو محیط ROCm و CUDA را اجرا می‌کند.

در این چیدمان، CPU با یک اتصال PCIe gen4 x16 به switch وصل است و هر GPU اتصال gen4 x8 خودش را تا switch دارد؛ بنابراین motherboard به تنظیم bifurcation نیاز ندارد. این به معنی شش اتصال x8 مستقل تا CPU نیست. مزیت مهم switch در آزمایش، امکان انتقال مستقیم Peer-to-peer میان R9700‌ها بود: کپی روی هر چهار کارت در مجموع ۵۴٫۷ گیگابایت‌برثانیه ثبت شد، در حالی که ظرفیت یک‌طرفهٔ اتصال x16 به CPU حدود ۲۸ گیگابایت‌برثانیه است؛ پس این ترافیک داخل switch باقی می‌ماند.

راه‌اندازی بدون دردسر نبود. فعال‌کردن Resizable BAR باعث توقف سیستم در مرحلهٔ BIOS می‌شد. نویسنده آن را خاموش کرد و با یک module اختصاصی و هنوز منتشرنشدهٔ kernel،؜ پیش از بارگذاری driver‌ها، BAR سی‌ودوگیگابایتی را فقط به چهار R9700 اختصاص داد. این module همچنین یک bug در Linux 7.0 مربوط به کوچک‌بودن پنجرهٔ switch را دور می‌زند. برای عبور محلی ترافیک R9700‌ها، ACS redirect نیز غیرفعال شد؛ تغییری که به قیمت کاهش جداسازی میان این کارت‌ها تمام می‌شود.

چهار R9700 با radiance 1.4.0 و ROCm 7.2.4،؜ مدل Qwen3.8-27B را با Tensor parallelism چهارراهه اجرا کردند. پردازش اولیهٔ prompt با اندازهٔ ۳۲ هزار token حدود ۴۶۷۴ token در ثانیه و برای ۲۳۳ هزار token،؜ برابر با ۳۳۴۰ بود. در آزمایش ۱۶ client،؜ مجموع خروجی به ۶۰۱٫۱ token در ثانیه رسید؛ خاموش‌کردن P2P این مقدار را تقریباً نصف کرد.

دو RTX 3090 جداگانه با vLLM 0.28 و Tensor parallelism دوراهه، Swift-1.5 را اجرا کردند. P2P برای آن‌ها خاموش بود و کپی‌ها از حافظهٔ میزبان عبور می‌کردند. با gpu-unlock،؜ سرعت decode برای یک جریان ۶۷ و برای هشت جریان در مجموع ۴۰۰ token در ثانیه بود. این ابزار پردازش اولیهٔ prompt را ۱۳ تا ۲۰ درصد سریع‌تر کرد، اما بهبود روشنی در decode مشاهده نشد.

نکته کلیدی

سرعت اسمی اتصال هر GPU را با ظرفیت مسیر مشترک تا CPU یکی نگیر. در این آزمایش، ترافیک R9700‌ها داخل switch می‌ماند، اما کپی میان RTX 3090‌ها از حافظهٔ میزبان عبور می‌کرد؛ پس مسیر انتقال داده را هم بررسی کن.

خواندن مقاله اصلی (در زبانه‌ی جدید باز می‌شود)
برچسب‌ها (۴)