4
0
mirror of https://github.com/nerfstudio-project/nerfstudio.git synced 2026-11-11 02:24:38 +08:00

adding scripts for easy local run (#59)

This commit is contained in:
evonneng 2022-05-05 13:48:34 -07:00 committed by GitHub
parent 0b82c1188c
commit 3a35bcda91
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 86 additions and 1 deletions

View File

@ -67,7 +67,7 @@ bash environments/run_jupyter.sh
# Tooling
One can use [autoenv](https://github.com/hyperupcall/autoenv) to make setting up the environment and environment variables easier. This will run the `.envrc` file upon entering the `/path/to/mattport` folder. It will also remove the environment parameters upon leaving.
1. One can use [autoenv](https://github.com/hyperupcall/autoenv) to make setting up the environment and environment variables easier. This will run the `.envrc` file upon entering the `/path/to/mattport` folder. It will also remove the environment parameters upon leaving.
```
# Install direnv.
@ -79,4 +79,20 @@ eval "$(direnv hook bash)"
# Populate your .envrc with commands you want to run. Then, run the following to allow updates.
cd /path/to/mattport
direnv allow .
```
2. To run local **github actions**, you can run:
```
python scripts/debugging/run_actions.py
```
3. To run local **profiling** to get a flame graph, make sure [pyspy](https://github.com/benfred/py-spy) is installed and you can run:
```
pip install py-spy
## for flame graph
./scripts/debugging/profile.sh -t flame -o flame.svg -p scripts/run_train.py data/dataset=blender_lego
## for live view of functions
./scripts/debugging/profile.sh -t top -p scripts/run_train.py data/dataset=blender_lego
```

43
scripts/debugging/profile.sh Executable file
View File

@ -0,0 +1,43 @@
#!/bin/bash
helpFunction_flame()
{
echo "Usage: $0 -o output_file -p program"
echo -e "\t-o output .svg filename, where to save flame graph"
echo -e "\t-p .py program we want to profile with associated arguments"
exit 1 # Exit program after printing help
}
helpFunction_top()
{
echo "Usage: $0 -p program"
echo -e "\t-p .py program we want to profile with associated arguments"
exit 1 # Exit program after printing help
}
while getopts "t:o:p:a:" opt; do
case "$opt" in
t ) type="$OPTARG" ;;
o ) output_file="$OPTARG" ;;
p ) program="$OPTARG" ;;
? ) helpFunction ;;
esac
done
if [ -z "$type" ]; then
echo "Missing profiling type (flame / top)"
fi
# Print helpFunction in case parameters are empty
if [[ "$type" = "flame" ]]; then
if [ -z "$output_file" ] || [ -z "$program" ]; then
echo "Some or all of the parameters are empty";
helpFunction_flame
fi
py-spy record -o "$output_file" python "$program"
elif [[ "$type" = "top" ]]; then
if [ -z "$program" ]; then
echo "Some or all of the parameters are empty";
helpFunction_top
fi
py-spy top python "$program"
fi

View File

@ -0,0 +1,26 @@
"""Simple yaml debugger"""
import subprocess
import yaml
LOCAL_TESTS = ["Run Black", "Python Pylint", "Test with pytest"]
if __name__ == "__main__":
with open(".github/workflows/code_checks.yml", "rb") as f:
my_dict = yaml.safe_load(f)
steps = my_dict["jobs"]["build"]["steps"]
for step in steps:
if "name" in step and step["name"] in LOCAL_TESTS:
if step["name"] == "Run Black":
curr_command = f"black mattport/ {step['with']['options']};"
else:
compressed = step["run"].replace("\n", "").replace("\\", "")
curr_command = f"{compressed};"
print("*" * 100)
print(f"Running {curr_command}")
subprocess.call(curr_command, shell=True)
else:
print("*" * 100)
print(f"Skipping {step}")