- PVSM.RU - https://www.pvsm.ru -
В последнее время большие языковые модели (LLM) становятся все более популярными, но для их эффективного запуска требуется значительная вычислительная мощность. Один из способов запуска LLM локально - использование библиотеки Llama.cpp [1]. В этой статье мы рассмотрим, как тестировать производительность видеокарт для LLM с использованием инструмента llama-bench, входящего в состав Llama.cpp.
Прежде чем мы приступим к тестированию, важно объяснить, почему мы используем Llama.cpp напрямую, а не Ollama. Ollama – это удобная надстройка, упрощающая установку и запуск LLM. Однако, она добавляет дополнительный слой абстракции, который приводит к снижению производительности и ограничивает контроль над настройками. Llama.cpp же напротив предоставляет прямой доступ к аппаратным ресурсам и позволяет максимально оптимизировать запуск LLM на вашей системе. Если ваша цель – получить максимальную производительность и точно настроить параметры, Llama.cpp – отличный выбор.
Установка Llama.cpp: Скачайте и установите Llama.cpp [2]. Инструкции доступны на GitHub-странице проекта. Убедитесь, что вы выбрали версию, соответствующую вашей операционной системе и архитектуре (например, llama-b5535-bin-win-vulkan-x64 для Windows с Vulkan). Так же можно использовать пакетный менеджер Winget: winget install ggml.llamacpp.
Загрузка GGUF модели: Вам потребуется GGUF-модель. Вы можете скачать их с Hugging Face (например, TheBloke/Llama-2-7B-GGUF [3]). Выбирайте модель, соответствующую вашим требованиям к размеру и качеству.
Подготовка скрипта: Создайте текстовый файл со скриптом для запуска llama-bench.
Вот пример скрипта, который можно использовать для тестирования:
llama-bench ^
--repetitions 25 ^
--delay 5 ^
--n-prompt 512 ^
--n-gen 512 ^
--ubatch-size 512 ^
--flash-attn 1 ^
--cache-type-k q8_0,f16 ^
--cache-type-v q8_0,f16 ^
--model C:HuggingFaceTheBlokeLlama-2-7B-GGUFllama-2-7b.Q4_0.gguf
Разъяснение параметров:
--repetitions: Количество повторений теста.
--delay: Задержка между повторениями (в секундах).
--n-prompt: Длина входного запроса (в токенах).
--n-gen: Длина генерируемого текста (в токенах).
--ubatch-size: Размер пакета для обработки. Увеличение этого значения может повысить производительность, но требует больше видеопамяти.
--flash-attn: Включение Flash Attention для ускорения вычислений (если поддерживается вашей видеокартой).
--cache-type-k q8_0,f16: Тип кэша для ключей.
--cache-type-v q8_0,f16: Тип кэша для значений.
--model: Путь к GGUF-модели.
Запустите скрипт из командной строки. llama-bench выведет результаты, включая время процессинга (pp512) и генерации (tg512) текста в токенах в секунду (tokens/s).
Результаты, полученные с помощью llama-bench, можно использовать для сравнения производительности разных видеокарт, моделей и настроек. Обратите внимание на генерацию токенов в секунду (tg) – чем выше это значение, тем быстрее работает LLM.
Полезный ресурс для сравнения производительности Llama.cpp с Vulkan: Performance of llama.cpp with Vulkan [4]. Здесь другие пользователи делятся своими результатами, что позволяет получить представление о производительности различных конфигураций.
Для более удобного взаимодействия с LLM можно запустить локальный сервер с использованием llama-server. Это позволит обращаться к модели по API и использовать веб-интерфейс для тестирования и экспериментов.
Пример скрипта:
llama-server ^
--host 0.0.0.0 ^
--port <port> ^
--log-file %USERPROFILE%.llama.cppllama-server.log ^
--threads 5 ^
--n-gpu-layers 99 ^
--ubatch-size 512 ^
--ctx-size 32768 ^
--flash-attn ^
--cache-type-k q8_0 ^
--cache-type-v q8_0 ^
--alias "gemma3:27b-it-qat" ^
--model C:HuggingFaceunslothgemma-3-27b-it-qat-GGUFgemma-3-27b-it-qat-UD-Q3_K_XL.gguf ^
--repeat-penalty 1.0 ^
--temp 1.0 ^
--min-p 0.05 ^
--top-k 64 ^
--top-p 0.95
Разъяснение параметров:
--host: IP-адрес для сервера.
--port: Порт для сервера.
--log-file: Файл для записи логов.
--threads: Количество потоков CPU. Выставьте это значение по количеству ядер вашего CPU - 1.
--n-gpu-layers: Количество слоев модели, переносимых на GPU. Начинайте с максимального и уменьшайте это значение до тех пор, пока не поместите модель видеопамять.
--ubatch-size: Размер пакета для обработки.
--ctx-size: Размер контекста (в токенах). Этот параметр зависит от размера видеопамяти. Необходимо подбирать его так, чтобы общая память видеокарты не использовалась, так как это ведет к снижению производительности.
--flash-attn: Включение Flash Attention.
--cache-type-k: Тип кэша для ключей.
--cache-type-v: Тип кэша для значений.
--alias: Псевдоним для модели (личное предпочтение, я например использую как у Ollama).
--model: Путь к GGUF-модели.
--repeat-penalty, --temp, --min-p, --top-k, --top-p: Параметры генерации текста.
После запуска сервера вы сможете обращаться к модели по API или используя веб интерфейс http://localhost:<port>.
Я использую видеокарту AMD RX 7800 XT 16GB и Llama.cpp с Vulkan. Vulkan был выбран вместо ROCm, поскольку производительность немного выше, и дросселя не так сильно шумят. Этот выбор позволил мне получить оптимальную производительность при работе с LLM.
Тестирование производительности видеокарт для LLM с использованием llama-bench – это важный шаг для выбора оптимальной конфигурации. Llama.cpp предоставляет широкий спектр настроек, позволяющих добиться максимальной производительности на вашей системе. Не забывайте экспериментировать с параметрами и сравнивать результаты, чтобы найти наилучший вариант для ваших задач.
P.S. Если вы используете NVIDIA GPU, замените Vulkan на CUDA-сборки Llama.cpp для максимальной производительности.
Автор: COBECT
Источник [7]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/nagruzochnoe-testirovanie/422063
Ссылки в тексте:
[1] Llama.cpp: https://github.com/ggml-org/llama.cpp
[2] Llama.cpp: https://github.com/ggml-org/llama.cpp/releases
[3] TheBloke/Llama-2-7B-GGUF: https://huggingface.co/TheBloke/Llama-2-7B-GGUF
[4] Performance of llama.cpp with Vulkan: https://github.com/ggml-org/llama.cpp/discussions/10879
[5] Документация по llama-bench: https://github.com/ggml-org/llama.cpp/tree/master/tools/llama-bench
[6] Документация по llama-server: https://github.com/ggml-org/llama.cpp/tree/master/tools/server
[7] Источник: https://habr.com/ru/articles/916836/?utm_source=habrahabr&utm_medium=rss&utm_campaign=916836
Нажмите здесь для печати.