Запуск локальных больших языковых моделей часто загоняет вас в аппаратный тупик. Пользователи NVIDIA живут внутри экосистемы CUDA. Разработчики Apple выбирают Metal. Все остальные надеются, что их GPU поддерживает OpenCL, или просто переходят на CPU. Эта фрагментация усложняет выпуск десктопных ИИ-приложений больше, чем это должно быть. TensorSharp сделала шаг к решению этой проблемы, добавив бэкенд Vulkan, что дает движку надежный путь работы с дискретными GPU от разных производителей.
Почему Vulkan меняет правила игры
О Vulkan обычно говорят в кругах геймеров, но как кроссплатформенный вычислительный API с низкими накладными расходами он не менее важен для инференса. Он охватывает оборудование, которое CUDA игнорирует: интегрированные чипы Intel UHD и Iris Xe, старые дискретные карты, бюджетные ноутбуки на Windows без наклейки NVIDIA. Для локального движка инференса такой охват — это реальная мощь. Разработчик может выпустить один бинарный файл, который будет работать на гораздо большем количестве машин, чем решение, ограниченное только CUDA.
Поддержка Vulkan в TensorSharp дебютировала через проект GGML. Эта интеграция уже работает, хотя автор планирует позже создать нативный бэкенд Vulkan. Использование GGML в качестве моста было правильным промежуточным шагом. Это позволяет подтвердить архитектуру и немедленно предоставить оборудование тестировщикам. За этим последует нативный бэкенд, чтобы устранить накладные расходы на абстракцию и дать ориентированному на C# движку более тонкий контроль над буферами команд и барьерами памяти.
Как выглядит тестовая база на данный момент
Валидация уже охватывает две очень разные конфигурации Windows. Разработчик провел тесты на NVIDIA GeForce RTX 3080 Laptop GPU и на обычной Intel UHD Graphics. Оба варианта работают хорошо. Этот диапазон заслуживает внимания. Дискретные высокомощные чипы и базовая интегрированная графика редко так легко объединяются в одну тестовую базу в мире инференса. Если вы используете легкий ноутбук без дискретной видеокарты, TensorSharp теперь предлагает реальный путь ускорения, не зависящий от драйверов NVIDIA.
Пробел в этой матрице — AMD. Оборудование Radeon еще не тестировалось. Если у вас есть GPU AMD, проекту нужна ваша обратная связь. Валидация сообществом на картах серий RX 6000 или 7000 — это то, что превращает экспериментальный бэкенд в решение промышленного уровня. Создайте issue, если что-то сломалось. Создайте issue, если всё работает идеально. Любой результат двигает проект вперед.
TensorSharp — это не обертка
Этот момент заслуживает особого внимания. TensorSharp — это не C# binding вокруг llama.cpp. Разработчик построил весь движок с нуля. CPU-бэкенд написан на чистом C#. Когда вы запускаете инференс без GPU, вы выполняете управляемый код, а не осуществляете маршалинг через интерфейс внешних функций (FFI) в C++ бинарный файл. Проект также поддерживает выделенные бэкенды для CUDA, Apple MLX и GGML. Несмотря на эту архитектурную независимость, производительность соответствует llama.cpp, которая остается эталоном, к которому стремятся большинство проектов локального инференса. Это равенство далось нелегко. Это означает, что планирование памяти, диспетчеризация ядер и тензорные операции выдерживают реальную нагрузку.
Поддержка моделей включает Gemma4, DiffusionGemma и Qwen3.6. Среда выполнения также поддерживает мультимодальную работу. Конвейеры зрения, аудио и рассуждений работают через один и тот же движок. Если вы создаете прототип десктопного ассистента, который читает скриншоты и принимает голосовые команды, вам не нужно сшивать три отдельные среды выполнения и молиться, чтобы их потребление памяти уместилось в вашей машине.
Гибкость платформ и API
TensorSharp работает на Windows, macOS и Linux. Новый бэкенд Vulkan органично вписывается в эту матрицу наряду с существующими путями CUDA и Metal. Движок также обеспечивает совместимость с API OpenAI и Ollama. Такой выбор устраняет сложности интеграции. Вы можете направить существующий клиентский код на локальный сервер TensorSharp, не переписывая шаблоны промптов и не меняя логику парсинга формата ответов. Для команд, которые уже используют Ollama внутри компании или разрабатывают под REST-интерфейс OpenAI, переход на локальный экземпляр TensorSharp — это в основном вопрос смены базового URL.
Заимствованные оптимизации, которые работают
Производительность зависит не только от того, какой API взаимодействует с GPU. TensorSharp интегрирует несколько оптимизаций, уже доказавших свою эффективность в других продакшн-решениях.
Paged KV cache, заимствованный из vLLM, предотвращает раздувание памяти во время долгих диалогов. Вместо резервирования одного непрерывного буфера на каждую последовательность, движок выделяет страницы фиксированного размера и отображает их по требованию. Вы можете дольше держать окна контекста открытыми, не опасаясь резкого скачка использования оперативной памяти.
Непрерывное пакетирование (continuous batching), также применяемое в vLLM, повышает пропускную способность. Движок может подмешивать новые запросы в активные пакеты вместо того, чтобы ждать завершения текущей группы. Если промпт одного пользователя состоит из десяти токенов, а другого — из двухсот, оборудование работает интенсивнее, а средняя задержка снижается.
Для моделей Mixture-of-Experts TensorSharp реализует стратегию кэширования на базе SSD, заимствованную из oMLX. Часто используемые веса экспертов находятся в быстром хранилище, а не борются за системную оперативную память. На машинах с ограниченным объемом памяти, но достойными NVMe-накопителями, это позволяет использовать архитектуры MoE.
Квантование следует стандарту GGUF, установленному llama.cpp. Ваши квантованные 4-битные и 5-битные модели загружаются напрямую без этапа конвертации.
Главный вывод
Поддержка Vulkan превращает TensorSharp из интересного эксперимента на C# в практический вариант для инференса на гетерогенном оборудовании. Дорожная карта ясна: валидация на дискретных чипах AMD и Intel, а затем доработка реализации с использованием нативного Vulkan-бэкенда. Если в вашей рабочей станции или ноутбуке установлена карта AMD, запустите сборку и поделитесь результатами. Именно такой цикл обратной связи превращает экспериментальный код в продукт, готовый к использованию.
Подробности релиза можно найти в статье разработчика. Если проект избавил вас от возни с инструментами CUDA или борьбы с ограничениями версий macOS, поставьте звезду репозиторию. Для текущих обсуждений и веток сообщества по тестированию открыта группа в Telegram.
