A collection of neural network utilities
Project description
NNModuleTools
A collection of neural network utilities.
Contents
-
npz compare visualizer
This tool can compare two npz archives visually.
-
float utils
This tool can inspect the memory of float numbers. It also provides simple arithmetic operations between them.
-
module debugger
This tool can save all the inputs and outputs of submodules in forward and backward pass. You can also manually save your desired tensors.
Installation
python -m pip install nnmoduletools
Usage
-
npz compare visualizer
See tutorial.ipynb
Now you can also use command line to compare two npz files and generate a report:
python -m nnmoduletools.comparer target.npz ref.npz --tolerance 0.99,0.99 --verbose 3 --output_dir compare_report --output_fn compare_report.md
See
python -m nnmoduletools.comparer --helpfor more information.You can also use
Reporterto generate your own report:from nnmoduletools.comparer import Reporter with Reporter("path/to/output/dir", "report.md"): comparer = nnmoduletools.NPZComparer("path/to/target.npz", "path/to/ref.npz") print("# Compare Report: tensor") comparer.plot_vs_auto(tensor="tensor", save_fig=True, save_dir="subdir") comparer.dump_vs_plot(top_k=20)
You will have your report in
path/to/output/dir/report.mdand the plots inpath/to/output/dir/subdir/. -
float utils
See tutorial.ipynb
-
module debugger
Typical usage: run the same module using two different devices, dump the tensors into npz file and compare them in npz compare visualizer.
You may have to set environment variables:
export DBG_DEVICE=cuda # suppose you are using cuda as the device; if you are using deepspeed, device name will be automatically get from deepspeed.get_accelerator() export DBG_SAVE_ALL=1 # by default no tensors are saved; you should export this to enable saving
Insert these lines into your code:
import torch from nnmoduletools.module_debugger import register_hook, save_tensors, save_model_params, save_model_grads, combine_npz class YourModule(torch.nn.Module): ... # Your module here model = YourModule() model.apply(register_hook) # <=== apply the hook to print log and save input output tensors ... save_model_params(0) # <=== save the model params before training # in your training loop for step in range(1, total_steps+1): output = model.forward(input) loss = loss_function(output, target) loss.backward() combine_npz(step) # <=== combine input and output tensors into large npzs save_model_grads(step) # <=== save the model grads after backward pass optimizer.step() save_model_params(step) # <=== save the model params after optim update save_tensors(tensor_to_save, name_to_save, dir_to_save, save_grad_instead) # <=== save the tensor you want to given directory. You can save grad instead by passing save_grad_instead=True
The log and npz files will be saved in a directory named like
logs_2024.06.04.16.52.12/You can get the latest log directory easily with
LogReader:from nnmoduletools.module_debugger import LogReader latest = LogReader(devices=["cuda"]) print(latest.cuda_dir)
Troubleshooting
You may encounter such errors when using backward hooks:
RuntimeError: Output 0 of BackwardHookFunctionBackward is a view and is being modified inplace. This view was created inside a custom Function (or because an input was returned as-is) and the autograd logic to handle view+inplace would override the custom backward associated with the custom Function, leading to incorrect gradients. This behavior is forbidden. You can fix this by cloning the output of the custom Function.
It is likely because that your module has an inplace operation right before return in forward, such as
class YourModule(torch.nn.Module):
...
def forward(self, x):
result = ...
result += 1 # <===
return result
You can replace the operation with
def forward(self, x):
result = ...
result = result + 1 # <===
return result
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file nnmoduletools-0.0.12a0.tar.gz.
File metadata
- Download URL: nnmoduletools-0.0.12a0.tar.gz
- Upload date:
- Size: 22.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.9.19
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5bbea7129e3588653ecbc8291b1820610001df0600531e297fba02ea9866e417
|
|
| MD5 |
82448d97ab262c2f021815373fd47e22
|
|
| BLAKE2b-256 |
0415ef769666a82d807ec5ae5b40cb49d78837714c756ea4a32ebde49a37821d
|
File details
Details for the file nnmoduletools-0.0.12a0-py3-none-any.whl.
File metadata
- Download URL: nnmoduletools-0.0.12a0-py3-none-any.whl
- Upload date:
- Size: 22.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.9.19
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
655a416e0a9f54fa74884a2bffadab8495195151ca8ec0a8ac58bb9b3b7a8a42
|
|
| MD5 |
dc8c3ab1e4d32432fe7ff23afc2fa8a4
|
|
| BLAKE2b-256 |
83e76a78a4bbf91d29739bdc52ef11d6442010e26ceeb8db66f3666af065bc24
|