TensorSharp, движок инференса на чистом .NET для языковых моделей формата GGUF, стал общедоступным. Это позволит .NET-разработчикам запускать инференс больших языковых моделей (LLM) без необходимости развертывания Python-сервера. Проект заявляет о производительности, сопоставимой с широко используемой llama.cpp, при работе на Windows, macOS и Linux с поддержкой бэкендов CPU, CUDA, MLX, Metal и Vulkan.

Почему важен нативный .NET

Большинство сред выполнения LLM написаны на C/C++ или полагаются на Python-обертки, которые запускают отдельный процесс. Для команд, чьи сервисы уже работают на .NET, этот дополнительный слой означает использование контейнеров, межпроцессного взаимодействия и расширение поверхности атаки. Выполнение инференса внутри той же среды выполнения позволяет разработчикам упростить конвейеры CI/CD, сократить задержки, возникающие при сетевых переходах, и снизить затраты на поддержку Python-окружения.

Как устроен TensorSharp

Автор написал движок с нуля, а не стал переиспользовать llama.cpp. CPU-бэкенд на 100% написан на C#, поэтому в Windows и Linux он работает без нативных зависимостей. Поддержка GPU реализована через существующие графические API: CUDA для Nvidia, MLX для Apple silicon, Metal для GPU в macOS и Vulkan для кроссплатформенного оборудования. В ядро интегрированы современные методы, такие как страничное кэширование пар ключ-значение (paged KV cache), непрерывное пакетирование (continuous batching) и спекулятивное декодирование для таких моделей, как Qwen и Gemma.

Возможности, доступные «из коробки»

  • Совместимость с моделями GGUF — тот же формат, который используется в последних релизах open-source LLM.
  • Кроссплатформенность — работает на Windows, macOS и Linux без изменений в коде.
  • HTTP API, совместимые с OpenAI и Ollama — готовая замена существующим клиентским библиотекам.
  • Мультимодальность — возможность принимать изображения, видео, аудио и PDF в качестве части промпта.
  • Вызов инструментов (tool calling) и структурированный вывод — поддержка паттернов вызова функций, характерных для чат-агентов.

Производительность в сравнении с llama.cpp

Бенчмарки, предоставленные разработчиком, показывают неоднозначные результаты:

  • Prefill и время до первого токена (TTFT) — TensorSharp часто обходит llama.cpp, обеспечивая более низкую задержку при получении первого ответа.
  • Пропускная способность декодирования — обычно сопоставима с llama.cpp или немного ниже.

Цифры говорят о том, что реализация на чистом C# не жертвует скоростью на наиболее чувствительных к задержкам этапах, оставаясь при этом конкурентоспособной по чистой скорости генерации токенов в секунду.

Нюансы, которые стоит учитывать

  • Реальная производительность варьируется в зависимости от архитектуры модели, конфигурации оборудования и расположения памяти; разработчикам следует провести собственные бенчмарки перед внедрением в продакшн.

Что дальше

В дискуссионном канале проекта в Telegram ранние пользователи могут делиться результатами и предлагать новые функции.

Итог: TensorSharp дает .NET-разработчикам возможность встраивать инференс LLM напрямую в свои приложения, избавляя от необходимости использовать отдельный Python-стек и обеспечивая задержки, сопоставимые с эталонным показателем llama.cpp. Командам, работающим в продакшене, следует проверить производительность на своем целевом оборудовании, но этот движок открывает прямой путь для создания нативных AI-сервисов внутри экосистемы .NET.