Perfscale news #9. GPU, LLM, Docker images

Об авторе, кто он такой и что делает можно почитать тут. Пост специально открыт для всех, чтобы не было проблем с разным уровнем доступа.

Приветствую, любители нагрузки! Для истории прошлые выпуски:

Итак, что было сделано

в 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 сентября. До встречи в будущем!

Бесплатный
sdet12
performance8
perfscale8
Комментарии
avatar
Здесь будут комментарии к публикации