llm.generate fixes
# What does this PR do ?

Apply the following fixes to llm.generate

- load from context subdir instead of ckpt dir
- disabling initializing optimizer
- add logic to find exact McoreGPTModel
- require user to provide their own trainer for llm.generate

Usage:
```
    strategy = nl.MegatronStrategy(tensor_model_parallel_size=tp, init_model_parallel=False)
    trainer = nl.Trainer(devices=tp, strategy=strategy)
    print(
        llm.generate(
            output_path,
            trainer=trainer,
            prompts=["Deep learning is"],
            inference_params=CommonInferenceParams(num_tokens_to_generate=20),
        )
    )
```
Example output:
```
[InferenceRequest(request_id='0', prompt='Deep learning is', inference_parameters=CommonInferenceParams(temperature=1.0, top_k=0, top_p=0.0, return_log_probs=False, num_tokens_to_generate=20), prompt_tokens=[34564, 6975, 374, 128001, 128001, 128001, 128001, 128001, 128001, 128001, 128001, 128001, 128001, 128001, 128001, 128001, 128001, 128001, 128001, 128001, 128001, 128001, 128001], arrival_time=1729579214.2338436, status=<Status.COMPLETED: 4>, encoder_prompt=None, generated_text=' the topic of hot interest nowadays. Thanks to its unique representatives including computer vision, natural language program etc', generated_tokens=tensor([  279,  8712,   315,  4106,  2802, 46877,    13, 11361,   311,  1202,
         5016, 24005,  2737,  6500, 11376,    11,  5933,  4221,  2068,  5099],
       device='cuda:0'), generated_log_probs=None, generated_length=20)]
```


**Collection**: [Note which collection this PR will affect]

# Changelog 
- Add specific line by line info of high level changes in this PR.

# Usage
* You can potentially add a usage example below

```python
# Add a code snippet demonstrating how to use this 
```

# GitHub Actions CI

The Jenkins CI system has been replaced by GitHub Actions self-hosted runners.

The GitHub Actions CI will run automatically when the "Run CICD" label is added to the PR.
To re-run CI remove and add the label again.
To run CI on an untrusted fork, a NeMo user with write access must first click "Approve and run".

# Before your PR is "Ready for review"
**Pre checks**:
- [ ] Make sure you read and followed [Contributor guidelines](https://github.com/NVIDIA/NeMo/blob/main/CONTRIBUTING.md)
- [ ] Did you write any new necessary tests?
- [ ] 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**:
- [ ] 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)
