پرش به محتوای اصلی
پرش به محتوای مقاله

چگونه Hugging Face بهره‌وری GPU را در استنتاج مدل‌ها به ۹۹.۴٪ رساند؟

·۲۶ اردیبهشت ۱۴۰۵۳ دقیقه مطالعه
چگونه Hugging Face بهره‌وری GPU را در استنتاج مدل‌ها به ۹۹.۴٪ رساند؟
اشتراک‌گذاری

اگر از سخت‌افزارهای گران‌قیمتی مثل H200 استفاده می‌کنید، احتمالاً ۲۵ درصد از زمان پردازش شما صرف انتظار بیهوده است. باید بدانید که گلوگاه استنتاج در مدل‌های زبانی بزرگ، همیشه قدرت محاسباتی نبوده، بلکه مدیریت نوبت‌های پردازش است. این تمرکز بر بهینه‌سازی گلوگاه‌ها، بخشی از روند کلی کاهش وابستگی به سخت‌افزارهای حجیم است؛ مشابه آنچه در پروژه ion7-core برای کاهش مصرف رم در اجرای مدل‌ها مشاهده کردیم.

Title card

به نقل از تحلیل فنی منتشر شده در ۱۴ مه ۲۰۲۶، شرکت Hugging Face توانسته است با حذف شکاف‌های زمانی (Idle Gaps) بین بارهای کاری CPU و GPU، سرعت تولید توکن را ۲۲ درصد افزایش دهد. این دستاورد از طریق تغییر رویکرد از Batching هم‌گام (Synchronous) به نامتقارن (Asynchronous) حاصل شده است که بهره‌وری GPU را به رقم خیره‌کننده ۹۹.۴ درصد می‌رساند.

در سیستم‌های رایج، CPU و GPU به‌صورت نوبتی عمل می‌کنند؛ یعنی GPU در حالی که CPU در حال آماده‌سازی دسته (Batch) بعدی است، بیکار می‌ماند. همان‌طور که در تحلیل قبلی ما درباره‌ی بهینه‌سازی لایه‌های استنتاج اشاره کردیم، این وقفه در حلقه‌های با فرکانس بالا، بخش بزرگی از زمان اجرا را می‌بلعد.

Synchronous batching

Synchronous batching

بر اساس مستندات این پروژه، تیم توسعه برای حل این مشکل از سه جریان CUDA (CUDA Streams) مجزا استفاده کرده است:

  • H2D: انتقال داده از میزبان به دستگاه (Host-to-Device)
  • Compute: انجام محاسبات اصلی
  • D2H: انتقال داده از دستگاه به میزبان (Device-to-Host)

آن‌ها برای حفظ ترتیب عملیات بدون مسدود کردن CPU، از رویدادهای CUDA (CUDA Events) بهره بردند.

CUDA streams concurrency

Realistic CUDA streams concurrency

برای جلوگیری از تداخل داده‌ها (Race Conditions)، یک سیستم بافرینگ دوگانه (Slots A and B) و یک استخر حافظه برای گراف‌های CUDA (CUDA Graphs) طراحی شده است. همچنین یک «ماسک انتقال» (Carry-over mask) برای مدیریت توکن‌های تولید شده در دسته N که برای دسته N+1 مورد نیاز هستند، پیاده‌سازی شده تا خط لوله پردازش هرگز متوقف نشود.

Blocking vs non-blocking transfer

Failed asynchronous batching

در آزمایش‌های انجام شده روی یک مدل 8B با اندازه دسته ۳۲، زمان تولید ۸ هزار توکن از ۳۰۰.۶ ثانیه به ۲۳۴.۵ ثانیه کاهش یافت. این یعنی GPU تقریباً در تمام مدت فرآیند فعال بوده است.

CPU and GPU activity timeline

این تغییر، معیار کارایی استنتاج را جابه‌جا می‌کند. وقتی صف کاری GPU کاملاً اشباع شود، گلوگاه از «ارکستراسیون CPU» به «ظرفیت محاسباتی خالص GPU» منتقل می‌شود. این موضوع به‌ویژه برای یادگیری تقویت‌شده (Reinforcement Learning) و تولید متون با پنجره متنی بلند (بیش از ۱۶ هزار توکن) که در آن‌ها نرخ خروجی (Throughput) حیاتی است، اهمیت دارد.

این قابلیت اکنون در کلاس ContinuousBatchingAsyncIOs در کتابخانه transformers در دسترس است.

گام بعدی شما

  • اگر از محیط‌های تولیدی (Production) استفاده می‌کنید، کلاس ContinuousBatchingAsyncIOs را در آخرین نسخه transformers جایگزین متدهای قدیمی کنید.
  • نرخ بهره‌وری GPU خود را با ابزارهای مانیتورینگ بررسی کنید تا اثر حذف شکاف‌های CPU را بسنجید.
  • در صورت استفاده از مدل‌های با Context بلند، تأثیر این به‌روزرسانی بر کاهش تأخیر (Latency) را اندازه‌گیری کنید.

اما داستان سخت‌افزاری این تحول حتی شگفت‌انگیزتر است — به تحلیل ما درباره‌ی تراشه‌های Blackwell مراجعه کنید.

چرا این موضوع مهم است؟

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

این گزارش با خط‌لولهٔ خودکار دات‌هوش از منابع معتبر جهانی تدوین و زیر نظر تحریریه منتشر شده است. روش کار ما

گفتگو

پنج‌شنبه‌های هوش‌محور

بسته‌ی هفتگی دات‌هوش

۵ خبر، ۲ ابزار، ۱ پرامپت در هر شماره. به‌زودی راه‌اندازی می‌شود — هر پنج‌شنبه صبح.

خبر کلیدی
ابزار کاربردی
پرامپت حرفه‌ای
تحلیل پژوهش
به‌زودی
زاویه‌ی ایرانی
به‌زودی
تمرین این هفته
به‌زودی

راهنماهای دات‌هوش

راهنماهای کاربردیِ دات‌هوش برای کار با هوش مصنوعی — از همین‌جا شروع کنید:

دات‌هوش

راهنمای فارسی هوش مصنوعی — با نگاه به ایران

اخبار روزانه، معرفی ابزارها و مدل‌ها، و آموزشِ کار با هوش مصنوعی؛ همیشه با این پرسش که از ایران چه چیزی کار می‌کند و چه چیزی نه.