Perfscale news #9. GPU, LLM, Docker images
Об авторе, кто он такой и что делает можно почитать тут. Пост специально открыт для всех, чтобы не было проблем с разным уровнем доступа.
Приветствую, любители нагрузки! Для истории прошлые выпуски:
- Новости Perfscale № 1
- Perfscale news #2: Fix Protocol, Magic metrics и MCP
- perfscale news #3 Websocket, Inference, NPM
- Perfscale news #4. GRPC, Fixed Triggers, Child Process
- Perfscale news #5. SQL, thresholds и оптимизации
- Perfscale news #6. GraphQL, поддержка Import, и метрики
- Perfscale news #7. Fix Import, SOAP, and more HTTP metrics
- Perfscale news #8. WS Benchmark, Jmeter open sourced & Fixed linked accounts
Итак, что было сделано
в OSS
теперь последняя версия: 0.17. И вот что нового произошло за это время
GPU testing
Итак, для того, чтобы включить GPU тестирование, достаточно написать в config следующее
vus: 10 duration: 5m gpu: enabled: true interval_ms: 1000 # default 1000 (min 10) source: nvidia-smi # nvidia-smi (default) | dcgm dcgm_url: 127.0.0.1:9400/metrics # for source: dcgm devices: [0, 1] # optional; default — every GPU the source reports
Тут важно сделать следующие отступления:
Во-первых, не придумано ничего лучше, чем использовать фреимворк NVIDIA Data Center GPU Manager (DCGM) — это проект по сбору телеметрии и измерению состояния графических процессоров NVIDIA.
Во-вторых, кроме ноутбука с NVIDIA у меня нет. А на Apple Metal никто не запускает нагрузку, да и драйверы закрытые(есть только powerline, но это детский сад), поэтому тут было принято волевое решение с пропуском AMD и Apple сознательно. Но, если у вас есть вариант, где можно запустить решение, кроме персонального комьютера — то свяжитесь со мной (TG: vitalicset)
В-третьих, уже сами настройки:
- interval — это то, с какой периодичностью опрашивается DCGM
- source — это источник сбора метрик. По умолчанию опрашивается драйвер smi(по сути встроенный мониторинг) и DCGM (внешний мониторинг, где у нас есть координатор. Можно сказать, что это типа Prometheus но для видеоадаптеров)
- devices: если у вас персональный комьютер то не используйте эту настройку. либо задайте 0, поскольку у вас 1 Nvidia девайс.
Я вот здумался, что есть K8S для GPU, когда память видеокарты может поделится на кратность 8(если мне не изменяет память) и у нас будет типа параллелизма вычеслений задач. Такой сценарий не тестировался, поскольку мои мощности ограничены.
Где стоит применять нагрузочное тестирование GPU
- рендеринг сцен в софте (например в промышленных рендерах и играх)
- LLM
Других я use-case не придумал. Вообще все затевалось вокруг LLM, поэтому переходим туда сразу
LLM testing
То, ради чего вводился GPU модуль — это Magnum Opus [прим. Magnum Opus — самое главное], то, зачем создавался модуль по тестированию GPU и данной статьи. Вдруг у вас (как и у меня) или в кампании запущенна LLM и вам бы не мешало бы протестировать ее возможности и собрать метрики.
Вот пример такого конфига
# config.yaml vus: 8 duration: 2m gpu: enabled: true
И самого теста (на примере развернутой ollama)
steps:
- name: chat completion
use: std/llm@v1
with:
url: 127.0.0.1:11434/v1/chat/completions
model: llama3.1
prompt: "Summarize the CAP theorem in two sentences."
max_tokens: 256
check:
status: 200
И вот вы запустили ваш тест через команду с --summary-export
perfscale run -f test.yaml -c config.yaml --summary-export gpu-run.json
и получили к примеру такой результат
{
"gpu": {
"source": "nvidia-smi",
"interval_ms": 1000,
"devices": [
{
"index": 0,
"samples": [
{ "ts_ms": 1720000000000, "index": 0, "utilization_pct": 64.0,
"memory_used_mib": 41088.0, "memory_total_mib": 81559.0,
"temperature_c": 71.0, "power_w": 512.3 }
],
"avg_utilization_pct": 64.3,
"max_utilization_pct": 100.0,
"max_memory_used_mib": 41088.0,
"memory_total_mib": 81559.0,
"max_temperature_c": 71.0,
"max_power_w": 512.3
}
]
}
}
Кстати, без summary-export вы получите что-то такое
gpu: 1 device, 300 samples every 1000ms (nvidia-smi) gpu0: util avg=64.3% max=100.0% vram max=41088/81559MiB temp max=71.0C power max=512.3W
Далее вы же хотите его отобразить можете этот JSON перекладывать как угодно, но видно, что идет именно сборка семплов прямо во время выполнения!
Docker Images
Теперь в perfscale OSS
github.com/Perfscale/perfscale/pkgs/container/perfscale
У нас принято публиковать пакеты со следующими названиями и доступно под названием ghcr.io/perfscale/perfscale
• :0.17.0 — perfscale (49MB) — только YAML движок
• :0.17.0-k6 — + k6 v2.2.0 (139MB)
• :0.17.0-jmeter — + JMeter 5.6.3 (539MB)
• :0.17.0-locust — + locust 2.46.4 (227MB)
• :0.17.0-full — всё вместе (806MB)
Несложно догадаться, что оптимальным вариантом будет использование именно perfscale (условно slim), поскольку это небольшой размер и простота использования, но для простоты перезда можете использовать full, если не знаете что выбрать. Да, GPU работает в slim версии.
А есть ли latest тег? Да, есть. Автоматом он собирается для каждой релизной версии perfscale. Но я знаю, что многие из devops не любят latest тег, поскольку он часто кешируется. Поэтому я тут аккуратно скажу что он есть, но и как-бы не упоминал, только если дочитали до сюда.
В Controlplane
изменений не много, которые можно подсветить. Поэтому считайте, что их нет
P. S. предвосхищая ваши вопросы, а что по поводу perfscaled агента, который ставится на машину. Пока что без изменений (зато в следующем выпуске будет много чего). А еще работаю над тем, чтобы можно было установить perfscaled через лицензию. Данный режим еще прорабатывается. Пока хватает дел с ним и последними изменениями!
А на сегодня все. Желаю вам хорошей доступности сервисов и отличных выходных. Ваш покорный слуга готовится к выступлению на Moscow QA, который состоится 5 сентября. До встречи в будущем!