اجرای مدل‌های زبانی بزرگ (LLM) به صورت محلی اغلب شما را در تنگنای سخت‌افزاری قرار می‌دهد. کاربران NVIDIA در اکوسیستم CUDA زندگی می‌کنند. توسعه‌دهندگان Apple از Metal استفاده می‌کنند. بقیه امیدوارند که GPU آن‌ها از OpenCL پشتیبانی کند یا به سادگی به CPU متکی شوند. این تکه‌تکه بودن، عرضه یک اپلیکیشن هوش مصنوعی دسکتاپ را دشوارتر از آنچه باید باشد، می‌کند. TensorSharp با افزودن یک backend مبتنی بر Vulkan، گامی در جهت حل این مشکل برداشته است و مسیری قابل اعتماد برای موتور خود در میان GPUهای مجزا از سازندگان مختلف فراهم کرده است.

چرا Vulkan معادله را تغییر می‌دهد

Vulkan معمولاً در محافل گیمینگ مورد بحث قرار می‌گیرد، اما به عنوان یک API محاسباتی کم‌هزینه (low-overhead) و چندپلتفرمی، برای استنتاج (inference) نیز به همان اندازه اهمیت دارد. این تکنولوژی به سخت‌افزاری دسترسی پیدا می‌کند که CUDA نادیده می‌گیرد؛ تراشه‌های مجتمع Intel UHD و Iris Xe، کارت‌های مجزای قدیمی‌تر و لپ‌تاپ‌های ویندوزی اقتصادی که برچسب NVIDIA ندارند. برای یک موتور استنتاج محلی، این میزان دسترسی یک قدرت کاربردی است. یک توسعه‌دهنده می‌تواند یک مسیر باینری واحد عرضه کند که روی دستگاه‌های بسیار بیشتری نسبت به یک راهکار مبتنی بر CUDA اجرا شود.

پشتیبانی TensorSharp از Vulkan از طریق پروژه GGML آغاز شد. این ادغام در حال حاضر کاربردی است، اگرچه نویسنده قصد دارد بعداً یک backend بومی (native) برای Vulkan بسازد. استفاده از GGML به عنوان یک پل، حرکت مرحله‌ای درستی بود. این کار معماری را تایید می‌کند و سخت‌افزار را بلافاصله در اختیار آزمایش‌کنندگان قرار می‌دهد. یک backend بومی در آینده برای حذف سربار انتزاع (abstraction overhead) و دادن کنترل دقیق‌تر به موتورِ مبتنی بر C# بر روی command buffers و memory barriers اضافه خواهد شد.

سطح تست تا این لحظه چگونه است

اعتبارسنجی در حال حاضر دو پیکربندی بسیار متفاوت ویندوز را پوشش می‌دهد. توسعه‌دهنده روی یک NVIDIA GeForce RTX 3080 Laptop GPU و روی Intel UHD Graphics معمولی تست انجام داده است. هر دو به خوبی اجرا شدند. این دامنه تست ارزش توجه دارد. در دنیای استنتاج، سخت‌افزارهای مجزای پرقدرت (high-wattage) و گرافیک‌های مجتمع پایه به ندرت به این راحتی در یک سطح تست مشترک قرار می‌گیرند. اگر از یک لپ‌تاپ سبک بدون GPU اختصاصی استفاده می‌کنید، TensorSharp اکنون یک مسیر شتاب‌دهی واقعی ارائه می‌دهد که به درایورهای NVIDIA وابسته نیست.

خلاء موجود در این ماتریس، AMD است. هنوز هیچ سخت‌افزار Radeon تست نشده است. اگر شما صاحب یک GPU از نوع AMD هستید، این پروژه به بازخورد شما نیاز دارد. اعتبارسنجی جامعه کاربری روی کارت‌های سری RX 6000 یا 7000 است که یک backend آزمایشی را به یک گزینه در سطح تولید (production-grade) تبدیل می‌کند. اگر مشکلی وجود دارد، یک issue ثبت کنید؛ اگر عملکرد عالی است، باز هم ثبت کنید. هر نتیجه‌ای پروژه را به جلو می‌راند.

TensorSharp یک Wrapper نیست

بر این نکته باید تاکید کرد. TensorSharp یک C# binding برای llama.cpp نیست. توسعه‌دهنده کل موتور را از پایه ساخته است. backend مربوط به CPU کاملاً با C# نوشته شده است. وقتی استنتاج را بدون GPU اجرا می‌کنید، در حال اجرای کد مدیریت‌شده (managed code) هستید، نه اینکه از طریق یک رابط تابع خارجی (FFI) به یک باینری C++ متصل شوید. این پروژه همچنین backendهای اختصاصی برای CUDA، MLX اپل و GGML را حفظ می‌کند. با وجود این استقلال معماری، عملکرد آن با llama.cpp برابری می‌کند که همچنان نقطه مرجع اکثر پروژه‌های استنتاج محلی است. رسیدن به این برابری دشوار بوده است؛ این بدان معناست که چیدمان حافظه (memory layout)، kernel dispatch و عملیات تنسور (tensor ops) همگی تحت بار واقعی پایداری دارند.

پشتیبانی از مدل‌ها شامل Gemma4، DiffusionGemma و Qwen3.6 است. این runtime همچنین کارهای چندوجهی (multimodal) را مدیریت می‌کند. خط لوله‌های بینایی (vision)، صوتی (audio) و استدلالی (reasoning) از طریق همان موتور اجرا می‌شوند. اگر در حال ساخت یک نمونه اولیه از یک دستیار دسکتاپ هستید که اسکرین‌شات‌ها را می‌خواند و دستورات صوتی را می‌پذیرد، نیازی نیست سه runtime مجزا را به هم متصل کنید و دعا کنید که ردپای حافظه (memory footprint) آن‌ها در دستگاه شما جا شود.

انعطاف‌پذیری پلتفرم و API

TensorSharp روی Windows، macOS و Linux اجرا می‌شود. backend جدید Vulkan به راحتی در کنار مسیرهای موجود CUDA و Metal در این ماتریس قرار می‌گیرد. این موتور همچنین سازگاری با هر دو API OpenAI و Ollama را ارائه می‌دهد. این انتخاب اصطکاکِ ادغام را از بین می‌برد. شما می‌توانید کدهای کلاینت موجود را بدون بازنویسی قالب‌های پرامپت (prompt templates) یا تجزیه (parsing) یک ساختار پاسخ جدید، به یک سرور محلی TensorSharp متصل کنید. برای تیم‌هایی که در حال حاضر Ollama را به صورت داخلی اجرا می‌کنند یا بر اساس سطح REST اپل (OpenAI) توسعه می‌دهند، سوئیچ کردن به یک نمونه محلی TensorSharp عمدتاً فقط شامل تغییر یک base URL است.

بهینه‌سازی‌های قرض گرفته شده که کار می‌کنند

عملکرد فقط به این بستگی ندارد که کدام API با GPU صحبت می‌کند. TensorSharp چندین بهینه‌سازی را که در جاهای دیگر در محیط تولید اثبات شده‌اند، ادغام کرده است.

قابلیت Paged KV cache که از vLLM قرض گرفته شده است، از انفجار حافظه در طول مکالمات طولانی جلوگیری می‌کند. به جای رزرو کردن یک فضای کاری پیوسته (contiguous scratchpad) برای هر توالی، موتور صفحات با اندازه ثابت را تخصیص داده و آن‌ها را در صورت نیاز نگاشت (map) می‌کند. شما می‌توانید پنجره‌های کانتکست (context windows) را بدون نگرانی از جهش ناگهانی مصرف RAM، برای مدت طولانی‌تری باز نگه دارید.

Continuous batching، که آن هم از vLLM است، نرخ پردازش (throughput) را بهبود می‌بخشد. موتور می‌تواند درخواست‌های جدید را به جای انتظار برای پایان یافتن گروه فعلی، به درون دسته‌های فعال وارد کند. اگر پرامپت یک کاربر ده توکن و پرامپت کاربر دیگر دویست توکن باشد، سخت‌افزار مشغول‌تر می‌ماند و میانگین تأخیر کاهش می‌یابد.

برای مدل‌های Mixture-of-Experts، TensorSharp یک استراتژی کش مبتنی بر SSD را پیاده‌سازی می‌کند که از oMLX الهام گرفته شده است. وزن‌های متخصص (expert weights) که مکرراً مورد استفاده قرار می‌گیرند، به جای رقابت برای اشغال رم سیستم، در حافظه سریع آماده می‌مانند. در دستگاه‌هایی با حافظه محدود اما درایوهای NVMe مناسب، این قابلیت باعث می‌شود معماری‌های MoE قابل استفاده باقی بمانند.

کوانتیزاسیون از استاندارد GGUF که توسط llama.cpp ایجاد شده، پیروی می‌کند. مدل‌های کوانتیزه شده ۴ بیتی و ۵ بیتی شما مستقیماً و بدون نیاز به مرحله تبدیل، بارگذاری می‌شوند.

نکته اصلی

پشتیبانی از Vulkan، TensorSharp را از یک آزمایش جالب در C# به یک گزینه عملی برای استنتاج (inference) در سخت‌افزارهای ناهمگون تبدیل می‌کند. نقشه راه روشن است: اعتبارسنجی روی تراشه‌های مجزای AMD و Intel، و سپس بهبود پیاده‌سازی با یک بک‌اِند بومی Vulkan. اگر در ایستگاه کاری یا لپ‌تاپ خود کارت گرافیک AMD دارید، نسخه ساخته شده را اجرا کرده و نتایج خود را به اشتراک بگذارید. همین حلقه بازخورد است که کد آزمایشی را به چیزی تبدیل می‌کند که می‌توانید عرضه کنید.

می‌توانید جزئیات انتشار را در نوشته‌ی توسعه‌دهنده پیدا کنید. اگر این پروژه شما را از درگیر شدن با CUDA toolkits یا کلنجار رفتن با محدودیت‌های نسخه‌های macOS نجات می‌دهد، یک ستاره در مخزن (repository) آن ثبت کنید. برای بحث‌های مستمر و رشته‌های تست جامعه کاربری، گروه تلگرام همواره فعال است.