4
0
mirror of https://github.com/nerfstudio-project/nerfstudio.git synced 2026-11-11 02:24:38 +08:00
nerfstudio/docs/developer_guides/debugging_tools/profiling.md
evonneng 3d7abf5a4d
Eng/doc nits (#650)
cleanup install
2022-10-04 10:27:33 -07:00

61 lines
2.1 KiB
Markdown

# Code profiling support
We provide built-in performance profiling capabilities to make it easier for you to debug and assess the performance of your code.
#### In-house profiler
You can use our built-in profiler. By default, it is enabled and will print at the termination of the program. You can disable it via CLI using the flag `--logging.no-enable-profiler`.
The profiler computes the average total time of execution for any function with the `@profiler.time_function` decorator.
For instance, if you wanted to profile the total time it takes to generate rays given pixel and camera indices via the `RayGenerator` class, you might want to time its `forward()` function. In that case, you would need to add the decorator to the function.
```python
"""nerfstudio/model_components/ray_generators.py""""
class RayGenerator(nn.Module):
...
@profiler.time_function # <-- add the profiler decorator before the function
def forward(self, ray_indices: TensorType["num_rays", 3]) -> RayBundle:
# implementation here
...
```
At termination of training or end of the training run, the profiler will print out the average execution time for all of the functions that have the profiler tag.
:::{admonition} Tip
:class: info
Use this profiler if there are *specific/individual functions* you want to measure the times for.
:::
#### Profiling with PySpy
If you want to profile the entire codebase, consider using [PySpy](https://github.com/benfred/py-spy).
Install PySpy
```bash
pip install py-spy
```
To perform the profiling, you can either specify that you want to generate a flame graph or generate a live-view of the profiler.
- flame graph: with wandb logging and our inhouse logging disabled
```bash
program="ns-train nerfacto -- --vis=wandb --logging.no-enable-profiler blender-data"
py-spy record -o {PATH_TO_OUTPUT_SVG} $program
```
- top-down stats: running same program configuration as above
```bash
py-spy top $program
```
:::{admonition} Attention
:class: attention
In defining `program`, you will need to add an extra `--` before you specify your program's arguments.
:::