libreyolo profile

Grup perintah yang mengukur ke mana waktu habis dalam satu step pelatihan atau satu panggilan inferensi, menulis profil yang mandiri, lalu membaca profil itu kembali lewat beberapa sudut pandang.

Perintah
libreyolo profile
Output
profile.json and profile_trace.json under runs/profile

Sinopsis

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

Grup ini tidak menerima argumen key=value. Subperintahnya memakai argumen posisional dan flag POSIX, jadi bentuknya --weights LibreYOLO9t.pt, bukan weights=LibreYOLO9t.pt. Menjalankan libreyolo profile tanpa subperintah akan menampilkan daftarnya.

Dua subperintah melakukan pengukuran dan menulis profil; sisanya membaca profil. run dan infer sama-sama menghasilkan profile.json mandiri yang sama, jadi setiap subperintah pembaca bisa dipakai pada keduanya.

profile run

Menjalankan pelatihan singkat yang diprofil dan menulis sebuah profil.

bash
libreyolo profile run <data> [--flag value ...]
ArgumenDefaultArti
dataPosisional. YAML atau nama dataset, misalnya coco128. Wajib
--weightsLibreYOLO9t.ptBerkas bobot atau nama model
--sizetVarian ukuran model
--batch16Micro-batch. -1 menyesuaikan otomatis sekitar 70% VRAM
--imgsz640Ukuran gambar pelatihan
--workers8Worker dataloader
--amptruePakai jalur AMP milik family. --no-amp mematikannya
--steps20Step yang diprofil, artinya yang diukur
--warmup5Step warmup sebelum pengukuran
--repeat1Ulangi N kali untuk mendapat rata-rata dan simpangan baku
--device0Perangkat
--projectruns/profileRoot direktori output
--jsonfalseOutput JSON ke stdout

Jendela pengukurannya adalah --warmup ditambah --steps iterasi. Dataset yang terlalu kecil untuk mengisinya tidak menghasilkan profil dan perintah keluar dengan kode 3, sambil menyebut tiga jalan keluarnya: dataset yang lebih besar, step yang lebih sedikit, atau batch yang lebih kecil.

--repeat di atas 1 menulis runs/profile/profile_repeat.json teragregasi yang metrik skalarnya dirata-ratakan lintas percobaan, sementara daftar kernelnya diambil dari percobaan terakhir. Ini juga prasyarat untuk kesimpulan signifikansi di compare: satu kali run tidak bisa memberikannya.

profile infer

Memprofil jalur inferensi dan menulis sebuah profil.

bash
libreyolo profile infer [<source>] [--flag value ...]
ArgumenDefaultArti
sourcePosisional. Gambar atau direktori. Gambar contoh bawaan bila tidak diisi
--weightsLibreYOLO9t.ptBerkas bobot atau nama model
--sizetVarian ukuran model
--batch1Jumlah gambar per forward pass
--imgsz640Ukuran gambar masukan
--halffalseForward dengan autocast, hanya CUDA. --no-half mematikannya
--amp-dtypefloat16dtype autocast CUDA: float16 atau bfloat16
--warmup20Iterasi warmup sebelum pengukuran
--runs100Iterasi yang diukur
--repeat1Ulangi N kali untuk mendapat rata-rata dan simpangan baku
--conf0.25Ambang batas skor keyakinan (confidence), yang mengubah banyaknya kerja NMS
--iou0.45Ambang IoU untuk NMS
--max-det300Deteksi maksimum per gambar, yang mengubah banyaknya kerja NMS
--device0Perangkat
--tracetrueHasilkan Chrome trace untuk menelusuri kernel dan op. --no-trace melewatinya
--projectruns/profileRoot direktori output
--jsonfalseOutput JSON ke stdout

Melaporkan latensi pada p50, p90 dan p99, throughput dalam gambar per detik, serta pembagian tahap antara preprocess, forward dan postprocess. Ketiga argumen ambang batas itu ada di sini karena semuanya menggeser angka postprocess.

profile summary

bash
libreyolo profile summary <trace> [--json]
ArgumenDefaultArti
tracePosisional. Path ke sebuah profile.json atau profile_trace.json. Wajib
--jsonfalseOutput JSON ke stdout

Bacaan tingkat tingginya: waktu per step, throughput, utilisasi GPU, porsi Tensor Core, puncak VRAM, overhead host, peluncuran kernel per step, kesimpulan bottleneck beserta alasannya, komposisi kernel per kategori, dan kernel teratas per step. Pada profil inferensi, ditampilkan juga persentil latensi dan pembagian tahapnya.

Profil yang diambil saat terjadi VRAM thrash akan ditandai, karena utilisasi dan throughput yang terukur di sana tidak bisa dipercaya.

profile get

bash
libreyolo profile get <trace> [<field>] [--json]
ArgumenDefaultArti
tracePosisional. Path ke sebuah profil. Wajib
fieldPosisional. Nama metrik. Kosongkan untuk menampilkan daftar metrik yang tersedia
--jsonfalseOutput JSON ke stdout

Menampilkan satu metrik dan tidak lebih, untuk dipakai di loop skrip. Field yang tidak dikenal keluar dengan kode 2 dan menunjuk ke bentuk daftarnya.

profile phases

bash
libreyolo profile phases <trace> [--json]
ArgumenDefaultArti
tracePosisional. Path ke sebuah profil. Wajib
--jsonfalseOutput JSON ke stdout

Milidetik GPU, milidetik wall, jumlah kernel dan jumlah op per fase: forward, backward, dataload, to_device, optimizer.

profile kernels

bash
libreyolo profile kernels <trace> [--flag value ...]
ArgumenDefaultArti
tracePosisional. Path ke sebuah profil. Wajib
--top20Tampilkan N teratas berdasarkan waktu GPU
--categorySaring berdasarkan potongan nama kategori: gemm, layout, norm, elementwise
--grepSaring dengan regular expression nama kernel
--tensorcorefalseHanya kernel Tensor Core
--sorttimetime, count atau name
--phaseBatasi ke satu fase: forward, backward, dataload, to_device, optimizer
--jsonfalseOutput JSON ke stdout

Dasar dari analisisnya: kernel GPU satu per satu dengan porsinya terhadap waktu GPU, milidetik per step, jumlah pemanggilan per step dan kategorinya. --phase yang tidak dikenal keluar dengan kode 2 dan menampilkan daftar fase yang dimiliki profil itu.

profile ops

bash
libreyolo profile ops <trace> [--flag value ...]
ArgumenDefaultArti
tracePosisional. Path ke sebuah profil. Wajib
--top20Tampilkan N teratas berdasarkan waktu CPU
--phaseBatasi ke satu fase
--jsonfalseOutput JSON ke stdout

Sudut pandang framework, bukan sudut pandang perangkat: op aten dan autograd yang diurutkan berdasarkan waktu CPU, dan di situlah biaya peluncuran dari host terlihat.

profile compare

bash
libreyolo profile compare <before> <after> [--json]
ArgumenDefaultArti
beforePosisional. Profil baseline. Wajib
afterPosisional. Profil baru. Wajib
--jsonfalseOutput JSON ke stdout

Membandingkan selisih throughput, milidetik per gambar, utilisasi GPU, overhead host, peluncuran kernel per step dan kesimpulan bottleneck.

Penilaian signifikansi menuntut kedua sisi diukur dengan --repeat minimal 2. Bila itu terpenuhi, sebuah selisih dihitung signifikan ketika melebihi dua kali galat baku gabungan, dan outputnya menampilkan perbandingan yang dilakukannya. Tanpa itu, barisnya menyatakan bahwa satu kali run tidak cukup untuk menopang penilaian tersebut.

profile what-if

bash
libreyolo profile what-if <trace> [--flag value ...]
ArgumenDefaultArti
tracePosisional. Path ke sebuah profil. Wajib
--remove-categoryProyeksikan efek menghilangkan satu kategori kernel: gemm, layout, norm, elementwise
--remove-launchesProyeksikan efek menghilangkan N peluncuran kernel per step, misalnya hasil dari op fusion
--jsonfalseOutput JSON ke stdout

Memperkirakan apa yang akan didapat dari sebuah perubahan sebelum perubahan itu ditulis. Salah satu dari dua opsi tersebut wajib diisi; bila tidak ada yang diberikan, perintah keluar dengan kode 2.

Proyeksinya mengikuti kesimpulan profil itu sendiri. Di bawah utilisasi GPU 80%, penghematannya dimodelkan sebagai berkurangnya peluncuran dikali biaya host per peluncuran yang terukur; di atasnya, sebagai berkurangnya kerja GPU. Hasilnya membawa sebuah field peringatan, karena biaya per peluncuran hanyalah pendekatan dan satu-satunya bukti adalah pengukuran kedua.

Contoh

Mengukur inferensi
# Tanpa argumen source, gambar contoh bawaan yang dipakai.libreyolo profile infer --device cpu --warmup 5 --runs 20
Membaca kesimpulannya
libreyolo profile summary runs/profile/infer/profile.json
Membandingkan dua pengukuran
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

Catatan

Profiler mengukur dan melaporkan. Ia tidak mengubah apa pun: membaca kesimpulannya, menyunting konfigurasi atau kodenya, menjalankan ulang, lalu membandingkan, itulah siklus yang menjadi tujuan pembuatannya.

Nilai bawaan --device adalah 0, yaitu perangkat CUDA 0. Memberikan --device cpu akan mengukur di CPU dan menghasilkan profil yang tetap diterima subperintah pembaca, tanpa detail kernel GPU.

Setiap subperintah mendukung --json, dan subperintah pembaca hanya mencetak ke stdout, dan itulah yang membuat grup ini bisa dipakai dari skrip.

Kode keluar di sini adalah milik grup ini sendiri: 2 untuk berkas yang tidak ada atau argumen yang tidak bisa diselesaikan, 3 ketika run tidak menghasilkan profil, dan 1 ketika sebuah trace tidak bisa dianalisis.

Terkait: libreyolo train, yang argumennya biasanya menjadi sasaran penyetelan saat sebuah profil pelatihan diambil.

Diverifikasi dengan LibreYOLO v1.5.0.