Add nsys profiling
# What does this PR do ?

Enable nsys profiling for any NeMo model from CLI or YAML.

Note this PR was originally: #4531 , authored by @erhoo82 

**Collection**: [Core]

# Changelog 
- Add setup nsys method to ModelPt
- Add on_train_batch_start/end hooks to enable nsys profiling

# Usage
* Add the following to your NeMo Model config:

```
# Nsys profiling options
nsys_profile:
  enabled: False
  start_step: 10  # Global batch to start profiling
  end_step: 10 # Global batch to end profiling
  ranks: [0] # Global rank IDs to profile
  gen_shape: False # Generate model and kernel details including input shapes
```
Then wrap your training command with:
```
nsys profile -s none -o <path_to_output> -t cuda,nvtx --force-overwrite true --capture-range=cudaProfilerApi --capture-range-end=stop python ...
```

See https://docs.nvidia.com/nsight-systems/UserGuide/index.html#cli-profiling for more details.

# Before your PR is "Ready for review"
**Pre checks**:
- [x] Make sure you read and followed [Contributor guidelines](https://github.com/NVIDIA/NeMo/blob/main/CONTRIBUTING.md)
- [x] Did you write any new necessary tests?
- [x] Did you add or update any necessary documentation?
- [ ] Does the PR affect components that are optional to install? (Ex: Numba, Pynini, Apex etc)
  - [ ] Reviewer: Does the PR have correct import guards for all optional libraries?
  
**PR Type**:
- [x] New Feature
- [ ] Bugfix
- [ ] Documentation

If you haven't finished some of the above items you can still open "Draft" PR.


## Who can review?

Anyone in the community is free to review the PR once the checks have passed. 
[Contributor guidelines](https://github.com/NVIDIA/NeMo/blob/main/CONTRIBUTING.md) contains specific people who can review PRs to various areas.

# Additional Information
* Related to # (issue)
