TensorSharp, silnik wnioskowania (inference engine) napisany w czystym .NET dla modeli językowych GGUF, jest już publicznie dostępny, co pozwala programistom .NET na uruchamianie wnioskowania dużych modeli językowych (LLM) bez konieczności uruchamiania serwera Python. Projekt deklaruje wydajność porównywalną z powszechnie używanym llama.cpp, działając na systemach Windows, macOS i Linux oraz wspierając backendy CPU, CUDA, MLX, Metal i Vulkan.

Dlaczego natywne .NET ma znaczenie

Większość środowisk uruchomieniowych LLM jest napisana w C/C++ lub opiera się na wrapperach Pythona, które tworzą osobny proces. Dla zespołów, których usługi już działają w .NET, ta dodatkowa warstwa oznacza konieczność użycia kontenerów, komunikacji międzyprocesowej oraz zwiększa powierzchnię ataku. Pozostawienie wnioskowania w tym samym środowisku uruchomieniowym pozwala programistom uprościć potoki CI/CD, zmniejszyć opóźnienia wynikające z przeskoku sieciowego oraz obniżyć koszty utrzymania środowiska Python.

Jak zbudowano TensorSharp

Autor napisał silnik od zera, zamiast ponownie wykorzystywać llama.cpp. Backend CPU jest napisany w 100% w C#, dzięki czemu na systemach Windows i Linux działa bez natywnych zależności. Wsparcie dla GPU pochodzi z istniejących interfejsów API grafiki: CUDA dla Nvidia, MLX dla procesorów Apple Silicon, Metal dla układów graficznych macOS oraz Vulkan dla sprzętu wieloplatformowego. W rdzeniu znajdują się nowoczesne rozwiązania, takie jak stronicowany cache klucz-wartość (KV cache), ciągłe przetwarzanie wsadowe (continuous batching) oraz dekodowanie spekulatywne (speculative decoding) dla modeli takich jak Qwen i Gemma.

Funkcje dostępne od razu po instalacji

  • Kompatybilność z modelami GGUF – ten sam format, którego używane są najnowsze wydania open-source LLM.
  • Działanie wieloplatformowe – działa na systemach Windows, macOS i Linux bez konieczności zmian w kodzie.
  • Interfejsy API HTTP zgodne z OpenAI i Ollama – gotowa alternatywa dla istniejących bibliotek klienckich.
  • Obsługa multimodalna – może przetwarzać obrazy, wideo, dźwięk i pliki PDF jako część promptu.
  • Wywoływanie narzędzi i ustrukturyzowany wynik – wspiera wzorce wywoływania funkcji (function-calling) powszechne w agentach czatowych.

Wydajność w porównaniu z llama.cpp

Benchmarki udostępnione przez utrzymującego projekt pokazują mieszane wyniki:

  • Prefill i czas do pierwszego tokenu (TTFT) – TensorSharp często wyprzedza llama.cpp, oferując niższe opóźnienia przy pierwszej odpowiedzi.
  • Przepustowość dekodowania – zazwyczaj zbliżona do llama.cpp lub nieco wolniejsza.

Liczby sugerują, że implementacja w czystym C# nie poświęca szybkości w najbardziej wrażliwych na opóźnienia fazach, pozostając jednocześnie konkurencyjną pod względem surowej liczby tokenów na sekundę.

Uwagi, o których należy pamiętać

  • Wydajność w rzeczywistych warunkach zależy od architektury modelu, konfiguracji sprzętowej i układu pamięci; programiści powinni przeprowadzić własne testy wydajności przed wdrożeniem produkcyjnym.

Co dalej?

Kanał dyskusyjny projektu na Telegramie jest miejscem, w którym wczesni użytkownicy mogą dzielić się wynikami i zgłaszać prośby o nowe funkcje.

Podsumowanie: TensorSharp daje firm