[{"data":1,"prerenderedAt":31},["ShallowReactive",2],{"chapter:vision-rs\u002Fkernels-and-performance\u002Fbenchmarking.json":3},{"project":4,"route":5,"title":6,"titleHtml":7,"navTitle":6,"part":8,"sourcePath":9,"editUrl":10,"html":11,"toc":12,"hasMermaid":23,"prev":24,"next":28},"vision-rs","\u002Fvision-rs\u002Fkernels-and-performance\u002Fbenchmarking","Benchmarking & Profiling","Benchmarking &amp; Profiling","Kernels & Performance","kernels-and-performance\u002Fbenchmarking.md","https:\u002F\u002Fgithub.com\u002Fteenygrad\u002Fvision-rs\u002Fedit\u002Fmain\u002Fbook\u002Fsrc\u002Fkernels-and-performance\u002Fbenchmarking.md","\u003Ch2 id=\"throughputlatency-yolo26-bench\">Throughput\u002Flatency (\u003Ccode>yolo26 bench\u003C\u002Fcode>)\u003C\u002Fh2>\n\u003Cpre data-lang=\"bash\" class=\"shiki teeny-datasheet\" style=\"background-color:#16181a;color:#e6e8e3\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#7FB6D9\">source\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> .env\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#7FB6D9\">cargo\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> build\u003C\u002Fspan>\u003Cspan style=\"color:#B79AD4\"> --release\u003C\u002Fspan>\u003Cspan style=\"color:#B79AD4\"> --example\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> yolo26\u003C\u002Fspan>\u003Cspan style=\"color:#B79AD4\"> --features\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> cuda\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#7FB6D9\">.\u002Ftarget\u002Frelease\u002Fexamples\u002Fyolo26\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> bench\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> \\\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B79AD4\">  --model\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> ultralytics\u002Fyolo26n\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> \\\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B79AD4\">  --dataset\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> assets\u002Fdatasets\u002Fcoco128.toml\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> \\\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B79AD4\">  --skip-map\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> \\\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B79AD4\">  --warmup\u003C\u002Fspan>\u003Cspan style=\"color:#B79AD4\"> 10\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> \\\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B79AD4\">  --runs\u003C\u002Fspan>\u003Cspan style=\"color:#B79AD4\"> 100\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>\u003Ccode>--skip-map\u003C\u002Fcode> skips the \u003Ca href=\"mailto:mAP@0.5\" target=\"_blank\" rel=\"noopener noreferrer\">mAP@0.5\u003C\u002Fa> accuracy check (adds ~30s if included).\n\u003Ccode>--warmup\u003C\u002Fcode>\u002F\u003Ccode>--runs\u003C\u002Fcode> control how many iterations are discarded vs. timed.\u003C\u002Fp>\n\u003Ch2 id=\"per-kernel-profiling-with-nsys\">Per-kernel profiling with \u003Ccode>nsys\u003C\u002Fcode>\u003C\u002Fh2>\n\u003Cp>The bench command wraps its batch=1 timed loop with\n\u003Ccode>cudaProfilerStart\u003C\u002Fcode>\u002F\u003Ccode>Stop\u003C\u002Fcode>, so \u003Ccode>--capture-range=cudaProfilerApi\u003C\u002Fcode> records\nonly the timed region, excluding warmup and kernel compilation:\u003C\u002Fp>\n\u003Cpre data-lang=\"bash\" class=\"shiki teeny-datasheet\" style=\"background-color:#16181a;color:#e6e8e3\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#7FB6D9\">source\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> .env\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#7FB6D9\">nsys\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> profile\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> \\\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B79AD4\">  --capture-range=cudaProfilerApi\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> \\\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B79AD4\">  --cuda-graph-trace=node\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> \\\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B79AD4\">  --output=\u002Ftmp\u002Fyolo26_bench\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> \\\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B79AD4\">  --force-overwrite=true\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> \\\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B79AD4\">  --stats=true\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> \\\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B79AD4\">  --kill=none\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> \\\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#D8A76B\">  .\u002Ftarget\u002Frelease\u002Fexamples\u002Fyolo26\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> bench\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> \\\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B79AD4\">    --model\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> ultralytics\u002Fyolo26n\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> \\\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B79AD4\">    --dataset\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> assets\u002Fdatasets\u002Fcoco128.toml\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> \\\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B79AD4\">    --skip-map\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> \\\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B79AD4\">    --warmup\u003C\u002Fspan>\u003Cspan style=\"color:#B79AD4\"> 10\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> \\\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B79AD4\">    --runs\u003C\u002Fspan>\u003Cspan style=\"color:#B79AD4\"> 100\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cul>\n\u003Cli>\u003Ccode>--cuda-graph-trace=node\u003C\u002Fcode> gets individual kernel stats inside CUDA\ngraphs, which would otherwise be opaque to \u003Ccode>nsys\u003C\u002Fcode>.\u003C\u002Fli>\n\u003Cli>\u003Ccode>--kill=none\u003C\u002Fcode> stops \u003Ccode>nsys\u003C\u002Fcode> from \u003Ccode>SIGTERM\u003C\u002Fcode>-ing the process after the\ncapture range ends — without it, the bench command’s final results row\nnever gets printed.\u003C\u002Fli>\n\u003Cli>The report lands at \u003Ccode>\u002Ftmp\u002Fyolo26_bench.nsys-rep\u003C\u002Fcode> (open in the Nsight\nSystems GUI). \u003Ccode>--stats=true\u003C\u002Fcode> also prints \u003Ccode>cuda_gpu_kern_sum\u003C\u002Fcode>,\n\u003Ccode>cuda_api_sum\u003C\u002Fcode>, and \u003Ccode>cuda_gpu_mem_time_sum\u003C\u002Fcode> tables directly to stdout.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2 id=\"comparing-against-a-tensorrt-baseline\">Comparing against a TensorRT baseline\u003C\u002Fh2>\n\u003Cp>\u003Ccode>bench.py\u003C\u002Fcode> runs the same benchmark across PyTorch, ONNX Runtime, and\nTensorRT FP32, using the \u003Ccode>ultralytics\u003C\u002Fcode> Python package:\u003C\u002Fp>\n\u003Cpre data-lang=\"bash\" class=\"shiki teeny-datasheet\" style=\"background-color:#16181a;color:#e6e8e3\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#7FB6D9\">source\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> .env\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#7FB6D9\">python3\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> bench.py\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>The TensorRT engine export takes ~25s on first run; the compiled \u003Ccode>.engine\u003C\u002Fcode>\nfile is cached at \u003Ccode>$MODELS_CACHE_DIR\u002Fultralytics\u002Fyolo26n\u002Fyolo26n.engine\u003C\u002Fcode>\nfor subsequent runs.\u003C\u002Fp>\n",[13,17,20],{"id":14,"text":15,"level":16},"throughputlatency-yolo26-bench","Throughput\u002Flatency (yolo26 bench)",2,{"id":18,"text":19,"level":16},"per-kernel-profiling-with-nsys","Per-kernel profiling with nsys",{"id":21,"text":22,"level":16},"comparing-against-a-tensorrt-baseline","Comparing against a TensorRT baseline",false,{"title":25,"titleHtml":26,"route":27},"The teenyc Toolchain","The \u003Ccode>teenyc\u003C\u002Fcode> Toolchain","\u002Fvision-rs\u002Fkernels-and-performance\u002Fteenyc-toolchain",{"title":29,"titleHtml":29,"route":30},"Building for Jetson Orin Nano","\u002Fvision-rs\u002Fdeployment\u002Fcross-compilation",1786271830547]