مقدمه: چرا باز کردن Flooding

در دنیای امروز، مدل‌های زبانی بسیار بزرگ مثل BLOOM به‌عنوان یک ابزار قدرتمند در حوزه هوش مصنوعی مطرح هستند. اما اجرای این مدل‌ها در شرایط واقعی بهینه‌سازی خاصی می‌طلبد تا به بخشی از هزینه‌های محاسباتی صرفه‌جویی شود. تیم‌های Hugging Face به‌دنبال یک راه‌حل سریع و مقیاس‌پذیر برای این چالش بوده‌اند.

مسارهای انتقال کد: از JAX/Flax تا PyTorch

مرحله اول شامل انتقال کد از پلتفرم Flax/JAX به چارچوب PyTorch بود. این تغییر نه‌تنها باعث آسان‌تر شدن توسعه شد، بلکه با بهره‌گیری از دارایهای PyTorch، اجازه می‌داد مدل در محیط‌های تولیدی بدون مشکل اجرا شود. سپس مسیرهای جایگزین مانند ONNX یا TensorRT بررسی شد تا سرعت پردازش را به حداکثر برسانند.

بهینه‌سازی‌های مبتنی بر معماری: TP، Flash Attention و Triton

با بهره‌گیری از استراتژی پیشرفته‌ای که «TP» (تراپلکسر) نامیده می‌شود، دو kernel سفارشی نوشته شد و با torch.jit.script برای بهینه‌سازی کد پیاده‌سازی شد. علاوه بر این، توجه فلاش و Triton که اجازه می‌دهد توابع پیچیده‌تر براساس بهینه‌سازی‌های خاص GPU ساده‌تر جابه‌جا شوند، نیز در برنامه آزمایشی استفاده شدند. هر یک از این تکنیک‌ها در نهایت باعث بهبود چشمگیر در زمان پاسخ و ظرفیت پردازش شدند.

  • پورت‌سازی JAX/Flax به PyTorch
  • استفاده از ONNX و TensorRT برای بهینه‌سازی هسته‌ای
  • استفاده از DeepSpeed و Webserver برای مقیاس‌پذیری
  • نکات نوآورانه برای هر دو Flash Attention و Triton

پرسش‌های پرتکرار

چگونه می‌توان از این نکات برای مدل‌های دیگر استفاده کرد؟

کاهش تأخیر و افزایش ظرفیت در مدل‌های بقیه می‌تواند با پیاده‌سازی همان روش‌های سفارشی در PyTorch و بهینه‌سازی با torch.jit.script پیدا شود. همچنین همچنان لازم است که جزئیات معماری مدل را بررسی کرده و بهترین گزینه‌های CUDA‑specific (مثل Flash Attention و Triton) را اعمال کنید.

ارزش زمان صرف شده برای توسعه یک سرور شخصی چیست؟

در این پروژه، حدود ۱ هفته برای پیاده‌سازی اولیه و ۳ هفته برای تست و ارزیابی نهایی صرف شد. با این حال، زمان‌برترین بخش‌ها شامل بنچمارک‌گذاری دقیق، تولید کد CUDA سفارشی و بهینه‌سازی حداکثری با TorchScript بوده است.