fix(customizer): reduce complexity of the tasks images used by customizer backends#684
Conversation
…izer backends Signed-off-by: Sam Oluwalana <soluwalana@nvidia.com>
|
🌿 Preview your docs: https://nvidia-preview-solu-simplify-tasks.docs.buildwithfern.com/nemo-platform |
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
📝 WalkthroughWalkthroughThe change adds the shared ChangesCustomizer task runtime and packaging
Backend and platform integration
Catalog and validation alignment
Possibly related PRs
Suggested labels: Suggested reviewers: 🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
|
There was a problem hiding this comment.
Actionable comments posted: 6
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (4)
tests/agentic-use/customizer-lora-job-cli/environment/setup-env.sh (1)
6-14: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick winUpdate the stale image-pull diagnostics.
The script pulls
nmp-customizer-tasks, but the heading and failure guidance still reference Automodel andBASE_TAG_AUTOMODEL. Update them to the customizer-tasks image and its actual build variable.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@tests/agentic-use/customizer-lora-job-cli/environment/setup-env.sh` around lines 6 - 14, Update the image-pull heading and the failure guidance associated with TASKS_IMAGE in the setup script to reference the customizer-tasks image and its actual build variable, while leaving the training-image diagnostics unchanged.packages/nmp_customization_common/src/nmp/customization_common/tasks/file_io/run.py (1)
119-152: 🩺 Stability & Availability | 🟡 Minor | ⚡ Quick winMove callback creation outside the retry loop
_download_with_retryand_upload_with_retryrebuild their progress callbacks on every tenacity retry. That re-sends the initialACTIVEprogress update each attempt, and upload also re-walkssrc_pathjust to recompute file totals. Build the callbacks once indownload_fileset/upload_filesetand pass them into the retried helper.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@packages/nmp_customization_common/src/nmp/customization_common/tasks/file_io/run.py` around lines 119 - 152, Update download_fileset and upload_fileset to construct their progress callbacks and any associated file totals before invoking _download_with_retry or _upload_with_retry. Extend both retried helpers to accept and reuse the prebuilt callbacks, removing callback creation and upload source re-walking from each retry attempt while preserving existing progress behavior.packages/nmp_customization_common/src/nmp/customization_common/tasks/model_entity/run.py (1)
121-149: 🩺 Stability & Availability | 🟠 Major | ⚡ Quick winRetry filter doesn't cover the newly re-raised transient exceptions.
ClientInternalServerError,httpx.TimeoutException, andhttpx.ConnectErrorare re-raised here to propagate as transient, but the@retrydecorator'sretry_if_exception_typeonly matchesInternalServerError,APITimeoutError,APIConnectionError. These three new types will never trigger a retry — they'll simply fail on first occurrence, undermining the intent of separating them from the generic wrap-into-ModelEntityCreationErrorpath.🔁 Include the new transient types in the retry filter
`@retry`( stop=stop_after_attempt(MAX_RETRIES), wait=wait_exponential(multiplier=2, min=INITIAL_BACKOFF_SECONDS, max=MAX_BACKOFF_SECONDS), - retry=retry_if_exception_type((InternalServerError, APITimeoutError, APIConnectionError)), + retry=retry_if_exception_type(( + InternalServerError, + APITimeoutError, + APIConnectionError, + ClientInternalServerError, + httpx.TimeoutException, + httpx.ConnectError, + )), reraise=True, ) def create_model_entity(self, config: ModelEntityTaskConfig) -> tuple[dict, ModelEntity]:🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@packages/nmp_customization_common/src/nmp/customization_common/tasks/model_entity/run.py` around lines 121 - 149, Update the retry filter on create_model_entity to include ClientInternalServerError, httpx.TimeoutException, and httpx.ConnectError alongside the existing transient exception types, so exceptions re-raised by its fileset validation block trigger the configured retries.packages/nmp_customization_common/tests/tasks/test_file_io.py (1)
199-200: 🩺 Stability & Availability | 🟡 Minor | ⚡ Quick winRestore the path-traversal regression tests
TestValidateSafePath/TestBuildOutputMetadataare gone here, and there’s no replacement inpackages/nmp_customization_common/tests/tasks/test_file_io_utils.py. Add coverage for thePathTraversalErrorpath before merging.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@packages/nmp_customization_common/tests/tasks/test_file_io.py` around lines 199 - 200, Add regression coverage for path traversal handling in TestValidateSafePath and TestBuildOutputMetadata, restoring the missing tests or adding equivalent cases in test_file_io_utils.py. Verify unsafe paths raise PathTraversalError and that the download flow does not invoke sdk.files.download when validation fails.
🧹 Nitpick comments (2)
services/automodel/tests/test_images.py (1)
47-48: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winKeep registry-override coverage on
get_tasks_image().This now tests only the training-image path, so a regression in
get_tasks_image()passingimage_registrytoget_customizer_tasks_image()would pass unnoticed. Assert the customizer-task image here and add a separate training-image assertion if needed.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@services/automodel/tests/test_images.py` around lines 47 - 48, Update the test around get_automodel_qualified_image so it asserts the customizer-task image produced by get_tasks_image(), preserving coverage that image_registry is forwarded to get_customizer_tasks_image(). Add a separate assertion for the training-image path only if that behavior also needs coverage.services/unsloth/src/nmp/unsloth/images.py (1)
6-6: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winDrop unneeded
from __future__ import annotations.File only uses native
str | Nonehints — no forward refs needed. This future-import makes all annotations string-based at runtime, which the guideline for**/*.pyexplicitly discourages.As per coding guidelines: "prefer concrete type hints over string-based type hints, and do not import those types only under
TYPE_CHECKING; import them normally when possible."♻️ Proposed fix
"""Docker image resolution for nmp-unsloth job steps.""" - -from __future__ import annotations🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@services/unsloth/src/nmp/unsloth/images.py` at line 6, Remove the unnecessary from __future__ import annotations from images.py, leaving the existing native str | None annotations unchanged so they remain concrete at runtime.Source: Coding guidelines
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In @.github/assets/ngc/containers/nmp-customizer-tasks.md:
- Line 6: Change the document’s opening “NeMo Customizer Tasks Container”
heading from level two to a top-level level-one heading to satisfy markdownlint
MD041.
In @.github/assets/ngc/containers/nmp-rl-training.md:
- Line 6: Change the document’s first heading, “NeMo-RL Training Container,”
from level 2 to level 1 by updating its Markdown marker from ## to #, preserving
the heading text.
In `@docker/unsloth/README.md`:
- Around line 9-11: Update the Dockerfile reference in the README table for
nmp-unsloth-training to use docker/Dockerfile.nmp-unsloth-training, matching the
repository-root command context and existing file location.
In `@docs/set-up/config-reference.mdx`:
- Around line 531-540: Update the source configuration descriptions for
lora_sidecar_image_name, lora_sidecar_command, and lora_sidecar_args, then
regenerate the generated reference using make generate-config-reference-docs; do
not hand-edit docs/set-up/config-reference.mdx or commit manual changes there.
In `@services/automodel/src/nmp/automodel/tasks/docker/README.md`:
- Line 47: Add a concise “Next Steps” section to the Docker README after the
configuration content, including links to the related customizer task and
compiler documentation. Preserve the existing setup instructions and use the
repository’s established documentation links where available.
In `@tests/smoke_gpu/test_customizer_tasks.py`:
- Around line 47-52: Update test_nmp_customizer_tasks_importable to import
nmp.customization_common.tasks.file_io.__main__ rather than only the file_io
package. Preserve the existing import checks for the other module entrypoints.
---
Outside diff comments:
In
`@packages/nmp_customization_common/src/nmp/customization_common/tasks/file_io/run.py`:
- Around line 119-152: Update download_fileset and upload_fileset to construct
their progress callbacks and any associated file totals before invoking
_download_with_retry or _upload_with_retry. Extend both retried helpers to
accept and reuse the prebuilt callbacks, removing callback creation and upload
source re-walking from each retry attempt while preserving existing progress
behavior.
In
`@packages/nmp_customization_common/src/nmp/customization_common/tasks/model_entity/run.py`:
- Around line 121-149: Update the retry filter on create_model_entity to include
ClientInternalServerError, httpx.TimeoutException, and httpx.ConnectError
alongside the existing transient exception types, so exceptions re-raised by its
fileset validation block trigger the configured retries.
In `@packages/nmp_customization_common/tests/tasks/test_file_io.py`:
- Around line 199-200: Add regression coverage for path traversal handling in
TestValidateSafePath and TestBuildOutputMetadata, restoring the missing tests or
adding equivalent cases in test_file_io_utils.py. Verify unsafe paths raise
PathTraversalError and that the download flow does not invoke sdk.files.download
when validation fails.
In `@tests/agentic-use/customizer-lora-job-cli/environment/setup-env.sh`:
- Around line 6-14: Update the image-pull heading and the failure guidance
associated with TASKS_IMAGE in the setup script to reference the
customizer-tasks image and its actual build variable, while leaving the
training-image diagnostics unchanged.
---
Nitpick comments:
In `@services/automodel/tests/test_images.py`:
- Around line 47-48: Update the test around get_automodel_qualified_image so it
asserts the customizer-task image produced by get_tasks_image(), preserving
coverage that image_registry is forwarded to get_customizer_tasks_image(). Add a
separate assertion for the training-image path only if that behavior also needs
coverage.
In `@services/unsloth/src/nmp/unsloth/images.py`:
- Line 6: Remove the unnecessary from __future__ import annotations from
images.py, leaving the existing native str | None annotations unchanged so they
remain concrete at runtime.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Enterprise
Run ID: e49c6830-52fb-46c5-88bd-1b095d86deb6
📒 Files selected for processing (77)
.github/assets/ngc/containers/nmp-customizer-tasks.md.github/assets/ngc/containers/nmp-rl-training.md.github/workflows/release.yamlRELEASING.mdconftest.pydocker-bake.hcldocker/Dockerfile.nmp-customizer-tasksdocker/Dockerfile.nmp-rl-tasksdocker/automodel/Dockerfile.nmp-automodel-tasksdocker/automodel/README.mddocker/customizer/Dockerfile.platform-workspacedocker/customizer/pyproject.workspace.tomldocker/unsloth/README.mddocs/customizer/index.mdxdocs/set-up/config-reference.mdxpackages/nmp_customization_common/src/nmp/customization_common/config.pypackages/nmp_customization_common/src/nmp/customization_common/service/images.pypackages/nmp_customization_common/src/nmp/customization_common/tasks/file_io/__init__.pypackages/nmp_customization_common/src/nmp/customization_common/tasks/file_io/__main__.pypackages/nmp_customization_common/src/nmp/customization_common/tasks/file_io/callbacks.pypackages/nmp_customization_common/src/nmp/customization_common/tasks/file_io/run.pypackages/nmp_customization_common/src/nmp/customization_common/tasks/model_entity/__init__.pypackages/nmp_customization_common/src/nmp/customization_common/tasks/model_entity/__main__.pypackages/nmp_customization_common/src/nmp/customization_common/tasks/model_entity/run.pypackages/nmp_customization_common/tests/tasks/test_file_io.pypackages/nmp_platform/README.mdpackages/nmp_platform/config/local.yamlpackages/nmp_platform_runner/src/nmp/platform_runner/config/local.yamlplugins/nemo-customizer/src/nemo_customizer/skills/nemo-customizer/SKILL.mdplugins/nemo-customizer/src/nemo_customizer/skills/nemo-customizer/references/rl-kubernetes-runtime.mdplugins/nemo-rl/README.mdpytest.iniservices/automodel/README.mdservices/automodel/pyproject.tomlservices/automodel/src/nmp/automodel/app/jobs/compiler.pyservices/automodel/src/nmp/automodel/config.pyservices/automodel/src/nmp/automodel/images.pyservices/automodel/src/nmp/automodel/tasks/__main__.pyservices/automodel/src/nmp/automodel/tasks/docker/README.mdservices/automodel/src/nmp/automodel/tasks/docker/docker-compose.yamlservices/automodel/src/nmp/automodel/tasks/file_io/__init__.pyservices/automodel/src/nmp/automodel/tasks/file_io/__main__.pyservices/automodel/src/nmp/automodel/tasks/file_io/callbacks.pyservices/automodel/src/nmp/automodel/tasks/file_io/run.pyservices/automodel/src/nmp/automodel/tasks/model_entity/__init__.pyservices/automodel/src/nmp/automodel/tasks/model_entity/__main__.pyservices/automodel/src/nmp/automodel/tasks/model_entity/run.pyservices/automodel/tests/test_compiler.pyservices/automodel/tests/test_images.pyservices/core/models/pyproject.tomlservices/core/models/src/nmp/core/models/api/v2/models.pyservices/core/models/src/nmp/core/models/controllers/backends/k8s_nim_operator/config.pyservices/rl/pyproject.tomlservices/rl/src/nmp/rl/app/jobs/compiler.pyservices/rl/src/nmp/rl/config.pyservices/rl/src/nmp/rl/images.pyservices/rl/src/nmp/rl/tasks/file_io/__main__.pyservices/rl/src/nmp/rl/tasks/file_io/callbacks.pyservices/rl/src/nmp/rl/tasks/file_io/run.pyservices/rl/src/nmp/rl/tasks/model_entity/__init__.pyservices/rl/src/nmp/rl/tasks/model_entity/__main__.pyservices/rl/src/nmp/rl/tasks/model_entity/run.pyservices/rl/tests/test_compiler.pyservices/unsloth/pyproject.tomlservices/unsloth/src/nmp/unsloth/app/jobs/compiler.pyservices/unsloth/src/nmp/unsloth/images.pyservices/unsloth/src/nmp/unsloth/tasks/file_io/__init__.pyservices/unsloth/src/nmp/unsloth/tasks/file_io/__main__.pyservices/unsloth/src/nmp/unsloth/tasks/model_entity/__init__.pyservices/unsloth/src/nmp/unsloth/tasks/model_entity/__main__.pyservices/unsloth/tests/test_images.pyservices/unsloth/tests/test_model_entity.pytests/agentic-use/customizer-lora-job-cli/environment/setup-env.shtests/agentic-use/customizer-lora-job-cli/instruction.mdtests/smoke_gpu/conftest.pytests/smoke_gpu/test_customizer_automodel.pytests/smoke_gpu/test_customizer_tasks.py
💤 Files with no reviewable changes (23)
- docker/automodel/Dockerfile.nmp-automodel-tasks
- services/automodel/src/nmp/automodel/tasks/file_io/main.py
- services/automodel/src/nmp/automodel/tasks/file_io/init.py
- services/rl/src/nmp/rl/tasks/model_entity/main.py
- services/rl/src/nmp/rl/tasks/file_io/main.py
- services/unsloth/src/nmp/unsloth/tasks/file_io/main.py
- services/automodel/src/nmp/automodel/tasks/model_entity/main.py
- services/automodel/pyproject.toml
- services/rl/src/nmp/rl/tasks/model_entity/init.py
- services/unsloth/src/nmp/unsloth/tasks/model_entity/init.py
- services/automodel/src/nmp/automodel/tasks/model_entity/init.py
- docker/Dockerfile.nmp-rl-tasks
- services/unsloth/src/nmp/unsloth/tasks/file_io/init.py
- services/rl/src/nmp/rl/tasks/model_entity/run.py
- services/unsloth/pyproject.toml
- services/automodel/src/nmp/automodel/tasks/model_entity/run.py
- services/automodel/src/nmp/automodel/tasks/file_io/run.py
- services/rl/pyproject.toml
- tests/smoke_gpu/test_customizer_automodel.py
- services/rl/src/nmp/rl/tasks/file_io/run.py
- services/unsloth/src/nmp/unsloth/tasks/model_entity/main.py
- services/automodel/src/nmp/automodel/tasks/file_io/callbacks.py
- services/rl/src/nmp/rl/tasks/file_io/callbacks.py
Signed-off-by: Sam Oluwalana <soluwalana@nvidia.com>
There was a problem hiding this comment.
Actionable comments posted: 1
🧹 Nitpick comments (2)
packages/nmp_customization_common/src/nmp/customization_common/tasks/file_io_metadata.py (1)
13-13: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winUse a concrete return type.
Change
-> dictto-> dict[str, str]; the implementation already guarantees that shape, but the current annotation discards it.As per coding guidelines, Python code should “prefer concrete type hints over string-based type hints.”
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@packages/nmp_customization_common/src/nmp/customization_common/tasks/file_io_metadata.py` at line 13, Update the affected function’s return annotation from dict to dict[str, str], preserving the existing implementation and behavior while exposing its guaranteed key and value types.Source: Coding guidelines
services/unsloth/README.md (1)
53-58: 📐 Maintainability & Code Quality | 🔵 Trivial | 🏗️ Heavy liftSeparate the architecture explanation from this reference README.
The added “Why a service package?” section mixes explanation with the package/layout reference content. Move the rationale to a linked explanation page and keep this README within one Diataxis type.
As per coding guidelines, each documentation page should fit ONE Diataxis quadrant; do not mix architecture explanations with reference material; use cross-links instead.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@services/unsloth/README.md` around lines 53 - 58, Remove the “Why a service package, not just a plugin module?” architecture rationale from the reference README and place it on a separate explanation page. Add a clear link from this README to that page, while keeping the remaining content focused solely on package/layout reference material.Source: Coding guidelines
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@plugins/nemo-unsloth/README.md`:
- Around line 36-39: Update the README documentation for the model-upload and
model-entity-creation steps to list all required task arguments: include both
--service-source unsloth and --service-name unsloth for the shared file_io
upload task, and --service-name unsloth for the model_entity task. Keep the
existing step descriptions and behavior unchanged.
---
Nitpick comments:
In
`@packages/nmp_customization_common/src/nmp/customization_common/tasks/file_io_metadata.py`:
- Line 13: Update the affected function’s return annotation from dict to
dict[str, str], preserving the existing implementation and behavior while
exposing its guaranteed key and value types.
In `@services/unsloth/README.md`:
- Around line 53-58: Remove the “Why a service package, not just a plugin
module?” architecture rationale from the reference README and place it on a
separate explanation page. Add a clear link from this README to that page, while
keeping the remaining content focused solely on package/layout reference
material.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Enterprise
Run ID: cea18e40-c50f-4351-b860-d3137fa26313
📒 Files selected for processing (12)
docker-bake.hcldocker/automodel/README.mdpackages/nmp_customization_common/src/nmp/customization_common/tasks/file_io_metadata.pypackages/nmp_customization_common/tests/tasks/test_file_io_metadata.pypackages/nmp_platform/README.mdplugins/nemo-unsloth/README.mdservices/rl/README.mdservices/rl/src/nmp/rl/app/jobs/compiler.pyservices/rl/tests/test_compiler.pyservices/unsloth/README.mdservices/unsloth/src/nmp/unsloth/app/jobs/compiler.pyservices/unsloth/tests/test_compiler_validation_path.py
🚧 Files skipped from review as they are similar to previous changes (4)
- packages/nmp_platform/README.md
- services/rl/tests/test_compiler.py
- docker/automodel/README.md
- services/rl/src/nmp/rl/app/jobs/compiler.py
There was a problem hiding this comment.
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
services/automodel/src/nmp/automodel/tasks/docker/README.md (1)
27-30: 📐 Maintainability & Code Quality | 🟠 Major | ⚡ Quick winAdd the required Python SDK alternative.
This HOW-TO currently documents only the CLI workflow. Add the equivalent Python SDK example in a tab-set alongside the Docker command.
As per coding guidelines, “Provide both Python SDK and CLI examples in tab-sets for consistency and to support multiple user workflows.”
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@services/automodel/src/nmp/automodel/tasks/docker/README.md` around lines 27 - 30, Update the Docker usage section in the README to add a tab-set containing both the existing CLI workflow and its equivalent Python SDK example. Preserve the current Docker command, and add the SDK invocation for running the file-IO task with the same automodel service source and customizer service name.Source: Coding guidelines
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Outside diff comments:
In `@services/automodel/src/nmp/automodel/tasks/docker/README.md`:
- Around line 27-30: Update the Docker usage section in the README to add a
tab-set containing both the existing CLI workflow and its equivalent Python SDK
example. Preserve the current Docker command, and add the SDK invocation for
running the file-IO task with the same automodel service source and customizer
service name.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Enterprise
Run ID: e5d78500-c3f5-4e35-9401-d1df7950966c
📒 Files selected for processing (8)
docker/unsloth/README.mdpackages/nmp_customization_common/src/nmp/customization_common/tasks/file_io/run.pyservices/automodel/src/nmp/automodel/app/jobs/compiler.pyservices/automodel/src/nmp/automodel/tasks/docker/README.mdservices/rl/src/nmp/rl/app/jobs/compiler.pyservices/unsloth/src/nmp/unsloth/app/jobs/compiler.pytests/smoke_gpu/test_customizer_automodel.pytests/smoke_gpu/test_customizer_tasks.py
💤 Files with no reviewable changes (2)
- tests/smoke_gpu/test_customizer_automodel.py
- packages/nmp_customization_common/src/nmp/customization_common/tasks/file_io/run.py
🚧 Files skipped from review as they are similar to previous changes (5)
- tests/smoke_gpu/test_customizer_tasks.py
- services/automodel/src/nmp/automodel/app/jobs/compiler.py
- docker/unsloth/README.md
- services/unsloth/src/nmp/unsloth/app/jobs/compiler.py
- services/rl/src/nmp/rl/app/jobs/compiler.py
Signed-off-by: Sam Oluwalana <soluwalana@nvidia.com>
crookedstorm
left a comment
There was a problem hiding this comment.
Looks right from the devops side.
gabwow
left a comment
There was a problem hiding this comment.
Overall looks like a good rework, small suggestions
albcui
left a comment
There was a problem hiding this comment.
Massive refactor! A couple of minor correctness concerns.
Signed-off-by: Sam Oluwalana <soluwalana@nvidia.com>
Signed-off-by: Sam Oluwalana <soluwalana@nvidia.com>
Signed-off-by: Sam Oluwalana <soluwalana@nvidia.com>
Summary by CodeRabbit
nmp-customizer-tasksCPU container and dedicated smoke-test image for customization steps (file I/O, model entity, model-spec analysis, LoRA sidecar).NMP_CUSTOMIZER_TASKS_IMAGEand standardized CPU task command wiring across Automodel, RL, and Unsloth.nmp-customizer-tasks, including new container documentation pages.