Validation does not work as expected due to incorrect handling of `limit_val_batches`
**Describe the bug**

There are at least two issues with how `limit_val_batches` is handled in the current master branch:
1. `trainer.limit_val_batches` is multiplied by `get_num_microbatches()` [here](https://github.com/NVIDIA/NeMo/blob/e3365ead822b4355a6391dd458d3457c441252ac/nemo/collections/nlp/models/language_modeling/megatron_base_model.py#L213C40-L213C47) even if it is a float (e.g., 1.0), which can make the code crash immediately after [here](https://github.com/NVIDIA/NeMo/blob/e3365ead822b4355a6391dd458d3457c441252ac/nemo/collections/nlp/models/language_modeling/megatron_gpt_model.py#L993) because we end up with a float > 1.0
2. Because the length of the validation dataloader is computed in terms of global batches ([here](https://github.com/NVIDIA/NeMo/blob/e3365ead822b4355a6391dd458d3457c441252ac/nemo/collections/nlp/data/language_modeling/megatron/data_samplers.py#L85)), PyTorch Lightning will cap the number of validation steps to this number if `limit_val_batches * get_num_microbatches()` is higher, and we won't do the intended number of validation steps. Worse, this can lead to a crash due to incomplete batches.

Here's an example of what can go wrong because of (2):
* Consider the case where the validation set has 127 samples, `global_batch_size=16`, `micro_batch_size=2`, `data_parallel_size=2` and `limit_val_batches=6`
* In that case we have `get_num_microbatches() == 4`
* The multiplication of `limit_val_batches` by `get_num_microbatches()` sets `trainer.limit_val_batches=24`
* The length of the validation dataloader is `127 // 16 == 7`
* As a result, instead of processing 24 validation microbatches, we only process 7. This ends up causing a `StopIteration` in-between the `on_validation_batch_start` and `on_validation_batch_end` callbacks, which is caught by PTL but prevents the validation_batch timer from stopping properly, which triggers a crash on the next validation batch (`RuntimeError: Cannot start timer = 'validation_step_timing' since it is already active`)


**Steps/Code to reproduce bug**

I'm seeing this issue with custom code that I can't easily share now, but it should be easy to repro with any megatron GPT training loop.

**Environment overview (please complete the following information)**

 - Environment location: Docker (I think the image is taken from a recent nightly build)
 - Method of NeMo install: I tried both the version in my Docker image and the current master

**Additional context**

I'll put up a draft PR with a potential direction to solve these issues (see #7429)