Переглянути як Markdown

libreyolo profile

Група команд, яка вимірює, куди йде час у кроці навчання чи у виклику інференсу, записує самодостатній профіль і читає його назад через кілька ракурсів.

Команда
libreyolo profile
Вивід
profile.json і profile_trace.json у runs/profile

Синтаксис

bash
libreyolo profile <subcommand> [<positional>] [--flag value ...]

Ця група не приймає аргументів вигляду key=value. Її підкоманди використовують позиційні аргументи та POSIX-прапорці, тож пишеться --weights LibreYOLO9t.pt, а не weights=LibreYOLO9t.pt. Запуск libreyolo profile без підкоманди виводить їх список.

Дві підкоманди вимірюють і записують профіль, решта його читають. І run, і infer створюють однаковий самодостатній profile.json, тому кожна підкоманда читання працює з будь-яким із них.

profile run

Запускає коротке навчання з профілюванням і записує профіль.

bash
libreyolo profile run <data> [--flag value ...]
АргументТипове значенняПризначення
dataПозиційний. YAML датасету або його назва, напр. coco128. Обов'язковий
--weightsLibreYOLO9t.ptФайл або назва ваг моделі
--sizetВаріант розміру моделі
--batch16Мікробатч. -1 автоматично добирає близько 70% VRAM
--imgsz640Розмір зображення для навчання
--workers8Робочі процеси завантажувача даних
--amptrueВикористовувати AMP-шлях сімейства. --no-amp вимикає його
--steps20Профільовані, тобто виміряні, кроки
--warmup5Кроки прогріву перед вимірюванням
--repeat1Повторити N разів для середнього та стандартного відхилення
--device0Пристрій
--projectruns/profileКорінь каталогу виводу
--jsonfalseВивід JSON у stdout

Вікно вимірювання охоплює --warmup плюс --steps ітерацій. Замалий, щоб його заповнити, датасет не дає профілю, і команда завершується з кодом 3, називаючи три виходи: більший датасет, менше кроків або менший батч.

--repeat понад 1 записує зведений runs/profile/profile_repeat.json, у якому скалярні метрики усереднено за спробами, тоді як списки ядер узято з останньої спроби. Це також передумова для вердикту про значущість у compare: один запуск дати його не може.

profile infer

Профілює шлях інференсу і записує профіль.

bash
libreyolo profile infer [<source>] [--flag value ...]
АргументТипове значенняПризначення
sourceПозиційний. Зображення або каталог. Якщо пропущено, вбудоване зразкове зображення
--weightsLibreYOLO9t.ptФайл або назва ваг моделі
--sizetВаріант розміру моделі
--batch1Зображень на один прямий прохід
--imgsz640Розмір вхідного зображення
--halffalseПрямий прохід з autocast, лише CUDA. --no-half вимикає його
--amp-dtypefloat16Тип даних autocast на CUDA: float16 або bfloat16
--warmup20Ітерації прогріву перед вимірюванням
--runs100Виміряні ітерації
--repeat1Повторити N разів для середнього та стандартного відхилення
--conf0.25Поріг впевненості, який змінює обсяг роботи NMS
--iou0.45Поріг IoU для NMS
--max-det300Максимум виявлень на зображення, що змінює обсяг роботи NMS
--device0Пристрій
--tracetrueСтворювати трасу Chrome для деталізації за ядрами та операціями. --no-trace пропускає це
--projectruns/profileКорінь каталогу виводу
--jsonfalseВивід JSON у stdout

Повідомляє затримку на p50, p90 і p99, пропускну здатність у зображеннях за секунду та розподіл за етапами: препроцесинг, прямий прохід і постпроцесинг. Три аргументи порогів є тут тому, що вони змінюють число постпроцесингу.

profile summary

bash
libreyolo profile summary <trace> [--json]
АргументТипове значенняПризначення
traceПозиційний. Шлях до profile.json або profile_trace.json. Обов'язковий
--jsonfalseВивід JSON у stdout

Загальний зріз: час кроку, пропускна здатність, утилізація GPU, частка Tensor Core, пікова VRAM, накладні витрати хоста, запуски ядер на крок, вердикт про вузьке місце разом із його причиною, склад ядер за категоріями та найважчі ядра на крок. Для профілю інференсу друкуються ще перцентилі затримки та розподіл за етапами.

Профіль, знятий за нестачі VRAM, позначається окремо, бо виміряним у такому стані утилізації та пропускній здатності довіряти не можна.

profile get

bash
libreyolo profile get <trace> [<field>] [--json]
АргументТипове значенняПризначення
traceПозиційний. Шлях до профілю. Обов'язковий
fieldПозиційний. Назва метрики. Пропустіть, щоб побачити список доступних метрик
--jsonfalseВивід JSON у stdout

Друкує одну метрику й нічого більше, для циклів у скриптах. Невідоме поле завершується з кодом 2 і вказує на форму зі списком.

profile phases

bash
libreyolo profile phases <trace> [--json]
АргументТипове значенняПризначення
traceПозиційний. Шлях до профілю. Обов'язковий
--jsonfalseВивід JSON у stdout

Мілісекунди GPU, реальні мілісекунди, кількість ядер і кількість операцій для кожної фази: forward, backward, dataload, to_device, optimizer.

profile kernels

bash
libreyolo profile kernels <trace> [--flag value ...]
АргументТипове значенняПризначення
traceПозиційний. Шлях до профілю. Обов'язковий
--top20Показати N найбільших за часом GPU
--categoryФільтр за підрядком категорії: gemm, layout, norm, elementwise
--grepФільтр за регулярним виразом імені ядра
--tensorcorefalseЛише ядра Tensor Core
--sorttimetime, count або name
--phaseОбмежити однією фазою: forward, backward, dataload, to_device, optimizer
--jsonfalseВивід JSON у stdout

Найнижчий рівень аналізу: окремі ядра GPU з їхньою часткою часу GPU, мілісекундами на крок, викликами на крок і категорією. Невідома --phase завершується з кодом 2 і виводить фази, які має профіль.

profile ops

bash
libreyolo profile ops <trace> [--flag value ...]
АргументТипове значенняПризначення
traceПозиційний. Шлях до профілю. Обов'язковий
--top20Показати N найбільших за часом CPU
--phaseОбмежити однією фазою
--jsonfalseВивід JSON у stdout

Погляд з боку фреймворку, а не пристрою: операції aten та autograd, впорядковані за часом CPU, де й виявляється вартість запуску з хоста.

profile compare

bash
libreyolo profile compare <before> <after> [--json]
АргументТипове значенняПризначення
beforeПозиційний. Базовий профіль. Обов'язковий
afterПозиційний. Новий профіль. Обов'язковий
--jsonfalseВивід JSON у stdout

Порівнює пропускну здатність, мілісекунди на зображення, утилізацію GPU, накладні витрати хоста, запуски ядер на крок і вердикт про вузьке місце.

Щоб винести висновок про значущість, обидві сторони треба виміряти з --repeat щонайменше 2. За цієї умови різниця вважається значущою, коли перевищує подвоєну сумарну стандартну похибку, і вивід друкує зроблене порівняння. Без цього рядок повідомляє, що один запуск такого висновку не підтверджує.

profile what-if

bash
libreyolo profile what-if <trace> [--flag value ...]
АргументТипове значенняПризначення
traceПозиційний. Шлях до профілю. Обов'язковий
--remove-categoryСпрогнозувати вилучення категорії ядер: gemm, layout, norm, elementwise
--remove-launchesСпрогнозувати вилучення N запусків ядер на крок, наприклад виграш від злиття операцій
--jsonfalseВивід JSON у stdout

Оцінює, що дасть зміна, ще до того, як її написано. Один із двох параметрів обов'язковий; без жодного команда завершується з кодом 2.

Прогноз спирається на власний вердикт профілю. Нижче 80% утилізації GPU він моделює виграш як меншу кількість запусків, помножену на виміряну вартість одного запуску на хості, а вище цієї межі, як менший обсяг роботи GPU. Результат несе поле із застереженням, бо вартість одного запуску є наближенням, а єдиний доказ дає друге вимірювання.

Приклади

Виміряти інференс
# Без аргументу source береться вбудоване зразкове зображення.libreyolo profile infer --device cpu --warmup 5 --runs 20
Прочитати вердикт
libreyolo profile summary runs/profile/infer/profile.json
Порівняти два вимірювання
libreyolo profile infer --device cpu --warmup 5 --runs 20 --project runs/profile/alibreyolo profile infer --device cpu --warmup 5 --runs 20 --batch 4 --project runs/profile/b libreyolo profile compare runs/profile/a/infer/profile.json \  runs/profile/b/infer/profile.json

Примітки

Профайлер вимірює та звітує. Він нічого не змінює: цикл, для якого його створено, полягає в тому, щоб прочитати вердикт, відредагувати конфігурацію або код, перезапустити та порівняти.

--device типово має значення 0, тобто пристрій CUDA 0. Із --device cpu вимірювання відбувається на CPU і дає профіль, який підкоманди читання все одно приймають, тільки без деталізації за ядрами GPU.

Кожна підкоманда підтримує --json, а ті, що читають, друкують лише у stdout, завдяки чому групу зручно використовувати зі скрипта.

Коди виходу тут власні для цієї групи: 2 для файлу, якого не існує, або аргументу, який не вдається розв'язати, 3, коли run не створив профілю, і 1, коли трасу не вдається проаналізувати.

Пов'язане: libreyolo train, аргументи якої зазвичай і налаштовують за профілем навчання.

Перевірено з LibreYOLO v1.5.0.