SALM with NeMo Automodel integration for Nemotron Nano V3 LLM backbone#15447
SALM with NeMo Automodel integration for Nemotron Nano V3 LLM backbone#15447
Conversation
Signed-off-by: Piotr Żelasko <pzelasko@nvidia.com>
Signed-off-by: Piotr Żelasko <pzelasko@nvidia.com>
Signed-off-by: Piotr Żelasko <petezor@gmail.com>
…eechlm-yifan-mod-port
Signed-off-by: Piotr Żelasko <petezor@gmail.com>
Signed-off-by: Piotr Żelasko <petezor@gmail.com>
Signed-off-by: Piotr Żelasko <petezor@gmail.com>
Signed-off-by: Piotr Żelasko <petezor@gmail.com>
Signed-off-by: Piotr Żelasko <petezor@gmail.com>
Signed-off-by: Piotr Żelasko <petezor@gmail.com>
Signed-off-by: Piotr Żelasko <petezor@gmail.com>
Signed-off-by: Piotr Żelasko <petezor@gmail.com>
Signed-off-by: Piotr Żelasko <petezor@gmail.com>
Signed-off-by: Piotr Żelasko <pzelasko@nvidia.com>
Signed-off-by: Piotr Żelasko <petezor@gmail.com>
…IDIA-NeMo/NeMo into speechlm2-with-nemo-automodel
Signed-off-by: Piotr Żelasko <petezor@gmail.com>
Signed-off-by: Piotr Żelasko <petezor@gmail.com>
Signed-off-by: Piotr Żelasko <petezor@gmail.com>
Signed-off-by: Piotr Żelasko <petezor@gmail.com>
Signed-off-by: Piotr Żelasko <petezor@gmail.com>
…automodel's utility Signed-off-by: Piotr Żelasko <petezor@gmail.com>
…full LLM Signed-off-by: Piotr Żelasko <petezor@gmail.com>
Signed-off-by: Piotr Żelasko <petezor@gmail.com>
Signed-off-by: Piotr Żelasko <pzelasko@nvidia.com>
Signed-off-by: Piotr Żelasko <petezor@gmail.com>
Signed-off-by: Piotr Żelasko <petezor@gmail.com>
Signed-off-by: Piotr Żelasko <petezor@gmail.com>
Signed-off-by: Piotr Żelasko <petezor@gmail.com>
|
/claude review |
| roles = self.get_roles() | ||
| assert len(turns) > 0, "Empty dialog is not supported." | ||
| for turn in turns: | ||
| assert "role" in turn, f"A turn must have have a 'role' key. We received {turn=}" |
There was a problem hiding this comment.
Typo: duplicated "have"
| assert "role" in turn, f"A turn must have have a 'role' key. We received {turn=}" | |
| assert "role" in turn, f"A turn must have a 'role' key. We received {turn=}" |
| roles = self.get_roles() | ||
| assert len(turns) > 0, "Empty dialog is not supported." | ||
| for turn in turns: | ||
| assert "role" in turn, f"A turn must have have a 'role' key. We received {turn=}" |
There was a problem hiding this comment.
Same typo: duplicated "have"
| assert "role" in turn, f"A turn must have have a 'role' key. We received {turn=}" | |
| assert "role" in turn, f"A turn must have a 'role' key. We received {turn=}" |
| slot_values = turn.get("slots", {}) | ||
| if expected_slots: | ||
| assert slot_values, ( | ||
| f"A turn for role {role} must have have a non-empty value under 'slots' key. " |
There was a problem hiding this comment.
Same typo here too: duplicated "have"
| f"A turn for role {role} must have have a non-empty value under 'slots' key. " | |
| f"A turn for role {role} must have a non-empty value under 'slots' key. " |
| roles = self.get_roles() | ||
| assert len(turns) > 0, "Empty dialog is not supported." | ||
| for turn in turns: | ||
| assert "role" in turn, f"A turn must have have a 'role' key. We received {turn=}" |
There was a problem hiding this comment.
Typo: "have have" → "have"
| assert "role" in turn, f"A turn must have have a 'role' key. We received {turn=}" | |
| assert "role" in turn, f"A turn must have a 'role' key. We received {turn=}" |
| roles = self.get_roles() | ||
| assert len(turns) > 0, "Empty dialog is not supported." | ||
| for turn in turns: | ||
| assert "role" in turn, f"A turn must have have a 'role' key. We received {turn=}" |
There was a problem hiding this comment.
Same "have have" typo here.
| assert "role" in turn, f"A turn must have have a 'role' key. We received {turn=}" | |
| assert "role" in turn, f"A turn must have a 'role' key. We received {turn=}" |
| slot_values = turn.get("slots", {}) | ||
| if expected_slots: | ||
| assert slot_values, ( | ||
| f"A turn for role {role} must have have a non-empty value under 'slots' key. " |
There was a problem hiding this comment.
Same "have have" typo.
| f"A turn for role {role} must have have a non-empty value under 'slots' key. " | |
| f"A turn for role {role} must have a non-empty value under 'slots' key. " |
| if self._use_tp: | ||
| tp_world_size = self.device_mesh["tp"].size() | ||
| if (remainder := (input_embs.shape[1] - 1) % tp_world_size) != 0: | ||
| # Truncate some tokens from the end to make the sequence lenght shape divisible by tensor parallelism |
There was a problem hiding this comment.
Typo: "lenght" → "length"
| # Truncate some tokens from the end to make the sequence lenght shape divisible by tensor parallelism | |
| # Truncate some tokens from the end to make the sequence length shape divisible by tensor parallelism |
| } | ||
|
|
||
|
|
||
| class Qwen3PromptFormatter(PromptFormatter): |
There was a problem hiding this comment.
Bug: Qwen3PromptFormatter is not imported in nemo/collections/common/prompts/__init__.py, so it won't be registered in PromptFormatter.resolve(). Users specifying prompt_format: qwen3 would get a resolution failure at runtime. The existing line 29 in __init__.py should be updated to:
from nemo.collections.common.prompts.qwen import QwenPromptFormatter, Qwen3PromptFormatterAlso, there are no tests for Qwen3PromptFormatter (unlike NemotronNanoV3PromptFormatter which has 312 lines of tests).
Review SummaryBug
Typos
Test Coverage
|
…com/nvidia/nemo into speechlm2-with-nemo-automodel-merge
Signed-off-by: Piotr Żelasko <petezor@gmail.com>
Important
The
Update branchbutton must only be pressed in very rare occassions.An outdated branch is never blocking the merge of a PR.
Please reach out to the automation team before pressing that button.
What does this PR do ?
Add a one line overview of what this PR aims to accomplish.
Collection: [Note which collection this PR will affect]
Changelog
Usage
# Add a code snippet demonstrating how to use thisGitHub 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:
PR Type:
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 contains specific people who can review PRs to various areas.
Additional Information