libreyolo profile
Група команд, яка вимірює, куди йде час у кроці навчання чи у виклику інференсу, записує самодостатній профіль і читає його назад через кілька ракурсів.
- Команда
libreyolo profile- Вивід
profile.json і profile_trace.json у runs/profile
Синтаксис
libreyolo profile <subcommand> [<positional>] [--flag value ...]Ця група не приймає аргументів вигляду key=value. Її підкоманди використовують
позиційні аргументи та POSIX-прапорці, тож пишеться --weights LibreYOLO9t.pt, а
не weights=LibreYOLO9t.pt. Запуск libreyolo profile без підкоманди виводить
їх список.
Дві підкоманди вимірюють і записують профіль, решта його читають. І run, і
infer створюють однаковий самодостатній profile.json, тому кожна підкоманда
читання працює з будь-яким із них.
profile run
Запускає коротке навчання з профілюванням і записує профіль.
libreyolo profile run <data> [--flag value ...]| Аргумент | Типове значення | Призначення |
|---|---|---|
data | Позиційний. YAML датасету або його назва, напр. coco128. Обов'язковий | |
--weights | LibreYOLO9t.pt | Файл або назва ваг моделі |
--size | t | Варіант розміру моделі |
--batch | 16 | Мікробатч. -1 автоматично добирає близько 70% VRAM |
--imgsz | 640 | Розмір зображення для навчання |
--workers | 8 | Робочі процеси завантажувача даних |
--amp | true | Використовувати AMP-шлях сімейства. --no-amp вимикає його |
--steps | 20 | Профільовані, тобто виміряні, кроки |
--warmup | 5 | Кроки прогріву перед вимірюванням |
--repeat | 1 | Повторити N разів для середнього та стандартного відхилення |
--device | 0 | Пристрій |
--project | runs/profile | Корінь каталогу виводу |
--json | false | Вивід JSON у stdout |
Вікно вимірювання охоплює --warmup плюс --steps ітерацій. Замалий, щоб його
заповнити, датасет не дає профілю, і команда завершується з кодом 3, називаючи
три виходи: більший датасет, менше кроків або менший батч.
--repeat понад 1 записує зведений runs/profile/profile_repeat.json, у якому
скалярні метрики усереднено за спробами, тоді як списки ядер узято з останньої
спроби. Це також передумова для вердикту про значущість у compare: один запуск
дати його не може.
profile infer
Профілює шлях інференсу і записує профіль.
libreyolo profile infer [<source>] [--flag value ...]| Аргумент | Типове значення | Призначення |
|---|---|---|
source | Позиційний. Зображення або каталог. Якщо пропущено, вбудоване зразкове зображення | |
--weights | LibreYOLO9t.pt | Файл або назва ваг моделі |
--size | t | Варіант розміру моделі |
--batch | 1 | Зображень на один прямий прохід |
--imgsz | 640 | Розмір вхідного зображення |
--half | false | Прямий прохід з autocast, лише CUDA. --no-half вимикає його |
--amp-dtype | float16 | Тип даних autocast на CUDA: float16 або bfloat16 |
--warmup | 20 | Ітерації прогріву перед вимірюванням |
--runs | 100 | Виміряні ітерації |
--repeat | 1 | Повторити N разів для середнього та стандартного відхилення |
--conf | 0.25 | Поріг впевненості, який змінює обсяг роботи NMS |
--iou | 0.45 | Поріг IoU для NMS |
--max-det | 300 | Максимум виявлень на зображення, що змінює обсяг роботи NMS |
--device | 0 | Пристрій |
--trace | true | Створювати трасу Chrome для деталізації за ядрами та операціями. --no-trace пропускає це |
--project | runs/profile | Корінь каталогу виводу |
--json | false | Вивід JSON у stdout |
Повідомляє затримку на p50, p90 і p99, пропускну здатність у зображеннях за секунду та розподіл за етапами: препроцесинг, прямий прохід і постпроцесинг. Три аргументи порогів є тут тому, що вони змінюють число постпроцесингу.
profile summary
libreyolo profile summary <trace> [--json]| Аргумент | Типове значення | Призначення |
|---|---|---|
trace | Позиційний. Шлях до profile.json або profile_trace.json. Обов'язковий | |
--json | false | Вивід JSON у stdout |
Загальний зріз: час кроку, пропускна здатність, утилізація GPU, частка Tensor Core, пікова VRAM, накладні витрати хоста, запуски ядер на крок, вердикт про вузьке місце разом із його причиною, склад ядер за категоріями та найважчі ядра на крок. Для профілю інференсу друкуються ще перцентилі затримки та розподіл за етапами.
Профіль, знятий за нестачі VRAM, позначається окремо, бо виміряним у такому стані утилізації та пропускній здатності довіряти не можна.
profile get
libreyolo profile get <trace> [<field>] [--json]| Аргумент | Типове значення | Призначення |
|---|---|---|
trace | Позиційний. Шлях до профілю. Обов'язковий | |
field | Позиційний. Назва метрики. Пропустіть, щоб побачити список доступних метрик | |
--json | false | Вивід JSON у stdout |
Друкує одну метрику й нічого більше, для циклів у скриптах. Невідоме поле
завершується з кодом 2 і вказує на форму зі списком.
profile phases
libreyolo profile phases <trace> [--json]| Аргумент | Типове значення | Призначення |
|---|---|---|
trace | Позиційний. Шлях до профілю. Обов'язковий | |
--json | false | Вивід JSON у stdout |
Мілісекунди GPU, реальні мілісекунди, кількість ядер і кількість операцій для кожної фази: forward, backward, dataload, to_device, optimizer.
profile kernels
libreyolo profile kernels <trace> [--flag value ...]| Аргумент | Типове значення | Призначення |
|---|---|---|
trace | Позиційний. Шлях до профілю. Обов'язковий | |
--top | 20 | Показати N найбільших за часом GPU |
--category | Фільтр за підрядком категорії: gemm, layout, norm, elementwise | |
--grep | Фільтр за регулярним виразом імені ядра | |
--tensorcore | false | Лише ядра Tensor Core |
--sort | time | time, count або name |
--phase | Обмежити однією фазою: forward, backward, dataload, to_device, optimizer | |
--json | false | Вивід JSON у stdout |
Найнижчий рівень аналізу: окремі ядра GPU з їхньою часткою часу GPU,
мілісекундами на крок, викликами на крок і категорією. Невідома --phase
завершується з кодом 2 і виводить фази, які має профіль.
profile ops
libreyolo profile ops <trace> [--flag value ...]| Аргумент | Типове значення | Призначення |
|---|---|---|
trace | Позиційний. Шлях до профілю. Обов'язковий | |
--top | 20 | Показати N найбільших за часом CPU |
--phase | Обмежити однією фазою | |
--json | false | Вивід JSON у stdout |
Погляд з боку фреймворку, а не пристрою: операції aten та autograd,
впорядковані за часом CPU, де й виявляється вартість запуску з хоста.
profile compare
libreyolo profile compare <before> <after> [--json]| Аргумент | Типове значення | Призначення |
|---|---|---|
before | Позиційний. Базовий профіль. Обов'язковий | |
after | Позиційний. Новий профіль. Обов'язковий | |
--json | false | Вивід JSON у stdout |
Порівнює пропускну здатність, мілісекунди на зображення, утилізацію GPU, накладні витрати хоста, запуски ядер на крок і вердикт про вузьке місце.
Щоб винести висновок про значущість, обидві сторони треба виміряти з --repeat
щонайменше 2. За цієї умови різниця вважається значущою, коли перевищує подвоєну
сумарну стандартну похибку, і вивід друкує зроблене порівняння. Без цього рядок
повідомляє, що один запуск такого висновку не підтверджує.
profile what-if
libreyolo profile what-if <trace> [--flag value ...]| Аргумент | Типове значення | Призначення |
|---|---|---|
trace | Позиційний. Шлях до профілю. Обов'язковий | |
--remove-category | Спрогнозувати вилучення категорії ядер: gemm, layout, norm, elementwise | |
--remove-launches | Спрогнозувати вилучення N запусків ядер на крок, наприклад виграш від злиття операцій | |
--json | false | Вивід JSON у stdout |
Оцінює, що дасть зміна, ще до того, як її написано. Один із двох параметрів
обов'язковий; без жодного команда завершується з кодом 2.
Прогноз спирається на власний вердикт профілю. Нижче 80% утилізації GPU він моделює виграш як меншу кількість запусків, помножену на виміряну вартість одного запуску на хості, а вище цієї межі, як менший обсяг роботи GPU. Результат несе поле із застереженням, бо вартість одного запуску є наближенням, а єдиний доказ дає друге вимірювання.
Приклади
# Без аргументу source береться вбудоване зразкове зображення.libreyolo profile infer --device cpu --warmup 5 --runs 20libreyolo profile summary runs/profile/infer/profile.jsonlibreyolo 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, аргументи якої зазвичай і
налаштовують за профілем навчання.