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
