LLamaSharp: библиотека для запуска LLM на C#/.NET
LLamaSharp — это библиотека на C#/.NET, позволяющая эффективно запускать LLM (среди прочих моделей, LLaMA) на локальных устройствах. Проект предлагает высокоуровневые API и поддержку Retrieval-Augmented Generation (RAG), что облегчает интеграцию больших языковых моделей в приложения.
Библиотека выделяется среди аналогичных решений своей простотой в использовании и кроссплатформенностью, а также эффективностью как на CPU, так и на GPU благодаря использованию библиотеки llama.cpp. Подходит для разработчиков, которые хотят внедрить LLM в свои .NET приложения или исследовать возможности локальной работы с моделями.
Чтобы запустить LLamaSharp, можно использовать NuGet пакеты, доступные для разных бэкендов: CPU, CUDA и Vulkan. Учти, что проект все еще может находиться на ранней стадии разработки и лучше подойдет для разработки и тестирования, чем для боевых систем на текущий момент.
LLamaSharp — это кроссплатформенная библиотека, позволяющая запускать модели LLaMA (и другие) на локальном устройстве. Она основана на llama.cpp и поддерживает эффективную работу как на CPU, так и на GPU. Библиотека предоставляет более высокоуровневые API и поддерживает RAG, обеспечивая удобное развертывание LLM (больших языковых моделей) в приложениях.
Установка и запуск
Для начала работы с LLamaSharp необходимо установить саму библиотеку и один или несколько пакетных бэкендов. LLamaSharp использует нативные библиотеки, скомпилированные из C++, поэтому никакой компиляции C++ выполнять не нужно — просто установи необходимые пакеты. Вот как это сделать:
PM> Install-Package LLamaSharp
Далее установи один или несколько из следующих бэкендов:
- LLamaSharp.Backend.Cpu: поддержка CPU для Windows, Linux и Mac (поддержка Metal для Mac).
- LLamaSharp.Backend.Cuda12: поддержка CUDA 12 для Windows и Linux.
- LLamaSharp.Backend.Vulkan: поддержка Vulkan для Windows и Linux.
Если ни один из опубликованных бэкендов не подходит для твоего устройства, рекомендуется открыть issue.
Подготовка модели
LLamaSharp работает с моделями в формате GGUF, которые можно получить из форматов PyTorch (.pth) и Huggingface (.bin). Для получения файла GGUF у тебя есть два варианта:
- Поискать модели в Huggingface с добавлением 'gguf' к названию модели; там можно найти много уже конвертированных файлов.
- Конвертировать модель самостоятельно, следуя инструкциям из README llama.cpp.
Пример использования
Вот пример простого взаимодействия с ботом, основанным на LLM в LLamaSharp. Не забудь заменить путь к модели на свой:
string modelPath = @""; // измените на свой путь к модели.
var parameters = new ModelParams(modelPath)
{
ContextSize = 1024,
GpuLayerCount = 5
};
using var model = LLamaWeights.LoadFromFile(parameters);
using var context = model.CreateContext(parameters);
var executor = new InteractiveExecutor(context);
// Добавление истории чата
var chatHistory = new ChatHistory();
chatHistory.AddMessage(AuthorRole.System, "Transcript of a dialog...");
chatHistory.AddMessage(AuthorRole.User, "Hello, Bob.");
chatHistory.AddMessage(AuthorRole.Assistant, "Hello. How may I help you today?");
ChatSession session = new(executor, chatHistory);
// Запуск сессии
while (userInput != "exit")
{
await foreach (var text in session.ChatAsync(new ChatHistory.Message(AuthorRole.User, userInput), inferenceParams))
{
Console.Write(text);
}
userInput = Console.ReadLine() ?? "";
}
Ограничения и советы
Несколько распространённых вопросов:
- GPU не используется, хотя установлен CUDA? Убедись, что установлен пакет бэкенда, совместимый с установленной версией CUDA.
- Инференс медленный? Для больший моделей требуется больше времени. Настрой GpuLayerCount на максимальное значение для улучшения производительности.
- Программа зависает без вывода? Проверь совместимость нативной библиотеки и модели с используемой версией LLamaSharp.
- Модель генерирует бесконечный вывод? Убедись, что ты установил анти-промпт или max-length при выполнении инференса.
Для получения дополнительной информации обращайся к документации и ресурсам проекта.
Открыть на GitHub: SciSharp/LLamaSharp →
RepoRadar