Pull to refresh

Тестирование производительности видеокарт на примере больших языковых моделей с использованием Llama.cpp

Level of difficultyEasy
Reading time4 min
Views1K

В последнее время большие языковые модели (LLM) становятся все более популярными, но для их эффективного запуска требуется значительная вычислительная мощность. Один из способов запуска LLM локально - использование библиотеки Llama.cpp. В этой статье мы рассмотрим, как тестировать производительность видеокарт для LLM с использованием инструмента llama-bench, входящего в состав Llama.cpp.

Дисклеймер: Почему Llama.cpp, а не Ollama?

Прежде чем мы приступим к тестированию, важно объяснить, почему мы используем Llama.cpp напрямую, а не Ollama. Ollama – это удобная надстройка, упрощающая установку и запуск LLM. Однако, она добавляет дополнительный слой абстракции, который приводит к снижению производительности и ограничивает контроль над настройками. Llama.cpp же напротив предоставляет прямой доступ к аппаратным ресурсам и позволяет максимально оптимизировать запуск LLM на вашей системе. Если ваша цель – получить максимальную производительность и точно настроить параметры, Llama.cpp – отличный выбор.

Подготовка к тестированию

  1. Установка Llama.cpp: Скачайте и установите Llama.cpp. Инструкции доступны на GitHub-странице проекта. Убедитесь, что вы выбрали версию, соответствующую вашей операционной системе и архитектуре (например, llama-b5535-bin-win-vulkan-x64 для Windows с Vulkan). Так же можно использовать пакетный менеджер Winget: winget install ggml.llamacpp.

  2. Загрузка GGUF модели: Вам потребуется GGUF-модель. Вы можете скачать их с Hugging Face (например, TheBloke/Llama-2-7B-GGUF). Выбирайте модель, соответствующую вашим требованиям к размеру и качеству.

  3. Подготовка скрипта: Создайте текстовый файл со скриптом для запуска llama-bench.

Запуск 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:\HuggingFace\TheBloke\Llama-2-7B-GGUF\llama-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. Здесь другие пользователи делятся своими результатами, что позволяет получить представление о производительности различных конфигураций.

Запуск локального сервера с llama-server

Для более удобного взаимодействия с LLM можно запустить локальный сервер с использованием llama-server. Это позволит обращаться к модели по API и использовать веб-интерфейс для тестирования и экспериментов.

Пример скрипта:

llama-server ^
    --host 0.0.0.0 ^
	--port <port> ^
    --log-file %USERPROFILE%\.llama.cpp\llama-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:\HuggingFace\unsloth\gemma-3-27b-it-qat-GGUF\gemma-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 для максимальной производительности.

Tags:
Hubs:
0
Comments1

Articles