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

زبان Vx: شناسایی خطاهای حافظه در مرحله کامپایل برای سخت‌افزارهای ناهمگن

·۱۲ مهر ۱۴۰۵۴ دقیقه مطالعه
زبان Vx: یک زبان، هر تراشه‌ای
زبان Vx: یک زبان، هر تراشه‌ای
اشتراک‌گذاری
واقعاً چه چیز جدید است؟

نوآوری اصلی در تبدیل «مکان فیزیکی داده در سخت‌افزار» به یک «تایپ معنایی» است؛ به این معنا که کامپایلر می‌داند داده در کدام تراشه است و هرگونه دسترسی غیرمجاز را پیش از اجرای کد متوقف می‌کند.

تصور کنید یک برنامه‌نویس سیستم در ساعت ۳ صبح با یک خطای Segfault مواجه شود، چون اشاره‌گری از حافظه GPU به CPU نشت کرده است؛ در Vx این کابوس هرگز اتفاق نمی‌افتد. در این زبان، تلاش یک رشته میزبان برای ارجاع به یک اشاره‌گر دستگاه منجر به خطای کامپایل می‌شود، نه یک کرش در نیمه‌شب. این زبان برنامه‌نویسی که در ۳ اکتبر ۲۰۲۶ منتشر شد، پیچیدگی‌های محاسبات ناهمگن (Heterogeneous Computing) را از زمان اجرا به سیستم تایپ منتقل کرده است.

فلسفه ناهمگنی

بسیاری از زبان‌های مدرن با شتاب‌دهنده‌ها مثل یک زیرساخت مبهم برخورد می‌کنند که در زمان اجرا تصمیم می‌گیرند داده‌ها چگونه به تراشه ارسال شوند. اما Vx این موضوع را به عنوان یک معناشناسی (Semantics) می‌بیند. در این مدل، مکان قرارگیری داده‌ها بخشی از «تایپ» آن‌هاست.

دنیایی را تصور کنید که در آن کد شما دقیقاً می‌داند داده‌ها کجا قرار دارند—چه در DRAM میزبان و چه در حافظه با پهنای‌باند بالای (HBM) یک NPU—حتی پیش از آنکه برنامه اجرا شود. تانسوری که در حافظه HBM یک NPU پین شده است، تایپی کاملاً متفاوت از تانسوری در DRAM میزبان دارد. برای جابه‌جایی بین این دو، باید صراحتاً از دستور transfer() استفاده کنید. این رویکرد برای مقابله با چالش‌های گلوگاه حافظه طراحی شده است که در مدل‌های زبانی بزرگ باعث اتلاف شدید توان پردازشی GPU می‌شود.

در معماری حافظه یکپارچه اپل، این انتقال در هنگام کامپایل تقریباً به هیچ تبدیل می‌شود. با این حال، این دستور همچنان در سورس‌کد نوشته می‌شود؛ زیرا مکان‌یابی داده‌ها (Data Locality) باید با خواندن کد قابل اثبات باشد، نه از طریق پروفایل کردن یک فایل باینری. بهینه‌سازی‌های مشابه در سطح سخت‌افزار، افزایش چشمگیر سرعت استنتاج در مک‌بوک‌های پرو را ممکن ساخته است.

ایمنی و بررسی تایپ

طبق مستندات vxlang.org، این زبان چندین مکانیسم ایمنی سخت‌گیرانه را برای حذف باگ‌های سخت‌افزاری پیاده کرده است؛ باگ‌هایی که معمولاً به صورت کراش‌های زمان اجرا، فساد خاموش داده‌ها (Silent Corruption) یا خطاهای کمبود حافظه در گام ۱۲۰۰ آموزش مدل ظاهر می‌شوند:

  • تایپینگ فضای آدرس (Address-space typing): مانع از نشت اشاره‌گرهای دستگاه به عبارات میزبان یا ارجاع به یک اشاره‌گر دستگاه از طریق میزبان می‌شود.
  • پذیرش ظرفیت (Capacity admission): پیش از ساخت باینری، بررسی می‌کند که آیا یک مجموعه کاری (Working set) با فضای حافظه هدف در یک فایل ماشین تعریف‌شده سازگار است یا خیر.
  • قراردادهای درز (Seam contracts): با استفاده از یک اثبات‌گر SMT تضمین می‌کند که انتقال‌های ناهمگام پیش از خواندن یک بافر، برای سیستم قابل مشاهده باشند.
  • قابلیت دسترسی توپولوژی (Topology reachability): انتقال بین فضاهای حافظه‌ای که هیچ مسیر سخت‌افزاری تعریف‌شده‌ای ندارند را مسدود می‌کند.
  • تایپ‌های خطی (Linear types): با استفاده از یک Borrow Checker مجهز به Variance و ردیابی منطقه (Region tracking)، از استفاده از بافرهای مصرف‌شده پس از انتقال (Use-after-move) جلوگیری می‌کند.
  • مشتق‌گیری خودکار (Autodiff): از مشتق‌گیری در مناطقی که Adjoint آن‌ها تعریف نشده است، جلوگیری می‌کند.

مدل‌های ماشین تعریف‌شده

برخلاف کامپایلرهایی که مدل‌های هزینه را به‌صورت سخت‌افزاری (Hard-code) تعریف می‌کنند، Vx یک فایل ماشین را می‌خواند که اتصالات واقعی و سلسله‌مراتب حافظه سخت‌افزار خاص را توصیف می‌کند. در مخزن پروژه، فایل‌های تأییدشده برای Nvidia H100، H200، B200، A100، AMD MI300X و Apple M4 و همچنین نودهای چند-GPU در دسترس هستند.

این فایل‌ها برای جلوگیری از خطاهای اعشاری، از تبدیل‌های عدد صحیح دقیق برای واحدها استفاده می‌کنند: پیشوندهای SI به صورت دهدهی (GB = 10⁹) و پیشوندهای IEC به صورت باینری (GiB = 2³⁰) هستند. برای مثال، فایل H100 صراحتاً ظرفیت HBM را ۸۰ گیبی‌بایت (GiB) با پهنای‌باند ۳.۳۵ ترابایت بر ثانیه تعریف می‌کند، در حالی که حافظه L2 با ظرفیت ۵۰ مبی‌بایت (MiB) و پهنای‌باند ۱۲ ترابایت بر ثانیه لیست شده است.

خط لوله کامپایل

در لایه بک‌اند، این زبان از یک فرانت‌اند موازی داده‌محور استفاده می‌کند که در آن هر نماد و تایپ اسمی (Nominal type) یک شناسه ۲۵۶ بیتی تخت است. این ساختار از طریق Boxing اجباری برای تایپ‌های بازگشتی (Recursive types)، ماژول‌ها را از هم جدا می‌کند و اجازه می‌دهد خط لوله کامپایل بدون تداخل قفل‌ها (Lock contention) یا نیاز به موتور پرس‌وجو (Query engine)، روی چندین هسته اجرا شود.

سیستم خروجی‌های MLIR کاملاً یکسانی (Byte-identical) تولید می‌کند، چه به‌صورت سریال ساخته شود و چه موازی. این موضوع در مجموعه تست‌ها با تعداد رشته‌های مختلف و پروسه‌های تازه بررسی می‌شود تا ثبات Seed هش تضمین گردد.

بک‌اندهای پشتیبانی‌شده عبارت‌اند از:

  • CPU (x86-64, arm64): مسیر MLIR $ \rightarrow $ LLVM IR $ \rightarrow $ native (به صورت AOT یا JIT).
  • NVIDIA GPU: مسیر MLIR $ \rightarrow $ NVVM $ \rightarrow $ PTX $ \rightarrow $ SASS.
  • Apple AMX / ANE: اعزام دستورات CoreML از طریق پلاگین.
  • توزیع‌شده: مناطق راه دور مبتنی بر مانیفست روی یک پروتکل شبکه (Wire protocol).

تولیدکنندگان سخت‌افزار می‌توانند کامپایلر را از طریق پلاگین‌های Pass در MLIR گسترش دهند، به جای اینکه هسته اصلی را تغییر دهند.

سبک‌سنگین‌ها و موارد استفاده

این رویکرد با انتقال باگ‌های گران‌قیمت به مرحله کامپایل، شیوه مهندسی سیستم‌های هوش مصنوعی را تغییر می‌دهد. با این حال، این سخت‌گیری به قیمت کاهش انعطاف‌پذیری تمام شده است. در حالی که کاربران PyTorch اغلب معماری‌ها را در میان حلقه تغییر می‌دهند یا بر اساس شکل تانسورها شاخه می‌زنند، Vx دارای مناطق استاتیک و پیش‌کامپایل (AOT) است.

Vx زبان مناسبی برای پروژه‌هایی است که باید روی ۱۰ نوع سیلیکون مختلف، هم سریع و هم دقیق باشند. اما برای ایده‌هایی که هنوز در حال شکل‌گیری و آزمایش هستند، زبان مناسبی نیست.

توسعه‌دهندگان در حال حاضر می‌توانند Vx را روی macOS (Apple Silicon) و Linux x86_64 از طریق دستور curl -fsSL https://vxlang.org/install.sh | sh نصب کنند.

گام بعدی شما

  • اگر روی سیستم‌های توزیع‌شده یا شتاب‌دهنده‌های مختلف کار می‌کنید، نصب Vx را روی لینوکس یا مک از طریق دستور curl امتحان کنید.
  • مستندات vxlang.org را برای درک نحوه تعریف فایل‌های ماشین (Machine Files) مطالعه کنید.
  • بررسی کنید که آیا محدودیت‌های تایپ خطی در Vx می‌تواند جایگزین مدیریت دستی حافظه در پروژه‌های C++ شما شود یا خیر.

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

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

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

تأثیر برای ایران

این زبان ابزاری قدرتمند برای توسعه‌دهندگان ایرانی است که با محدودیت سخت‌افزاری مواجه‌اند و نیاز دارند کد خود را با بیشترین بهینگی روی سخت‌افزارهای متنوع (از M4 تا H100) اجرا کنند.

·نگاه ما
تحریریه دات‌هوش

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

منابع

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

گفتگو

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

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

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

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

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

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

دات‌هوش

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

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