diff --git a/ARCHITECTURE.md b/ARCHITECTURE.md index f4ae21026..a640fd711 100644 --- a/ARCHITECTURE.md +++ b/ARCHITECTURE.md @@ -138,9 +138,9 @@ images/ │ └── examples/ Example-specific runtime images ├── universal/ │ └── training/ Universal training images (3 variants) -│ ├── th06-cpu-torch210-py312/ -│ ├── th06-cuda130-torch210-py312/ -│ └── th06-rocm64-torch291-py312/ +│ ├── th-torch-cpu-py312/ +│ ├── th-torch-cuda-py312/ +│ └── th-torch-rocm-py312/ ├── tests/ Test runner image └── util/ └── mc-cli/ MinIO client utility image diff --git a/images/universal/training/README.md b/images/universal/training/README.md index e980f4e3e..03d5a988e 100644 --- a/images/universal/training/README.md +++ b/images/universal/training/README.md @@ -33,14 +33,14 @@ When `DOWNSTREAM=true`: | Flavor | Directory | Use Case | |--------|-----------|----------| -| **CUDA** | `th-cuda-torch-py/` | NVIDIA GPU training | -| **ROCm** | `th-rocm-torch-py/` | AMD GPU training | -| **CPU** | `th-cpu-torch-py/` | CPU-only training | +| **CUDA** | `th-torch-cuda-py312/` | NVIDIA GPU training | +| **ROCm** | `th-torch-rocm-py312/` | AMD GPU training | +| **CPU** | `th-torch-cpu-py312/` | CPU-only training | All flavors include: - **Training Hub** with LoRA support -- **PyTorch ** -- **Python ** +- **PyTorch** +- **Python 3.12** - **JupyterLab** (workbench mode) ### CUDA Image @@ -163,9 +163,9 @@ Update to dependencies **other than** CUDA, ROCm, PyTorch, or Training Hub. 2. Coordinate with AIPCC team for the new index with updated major packages 3. Coordinate with Notebooks team for the new base image 4. Create new directory following naming convention: - - CUDA: `th-cuda-torch-py/` - - ROCm: `th-rocm-torch-py/` - - CPU: `th-cpu-torch-py/` + - CUDA: `th-torch-cuda-py/` + - ROCm: `th-torch-rocm-py/` + - CPU: `th-torch-cpu-py/` 5. Copy files from previous version and update: - `Dockerfile` - update base image, package versions - `pyproject.toml` - update dependencies to match `training-hub` requirements diff --git a/images/universal/training/th06-cpu-torch210-py312/Dockerfile b/images/universal/training/th06-cpu-torch210-py312/Dockerfile deleted file mode 100644 index 028943576..000000000 --- a/images/universal/training/th06-cpu-torch210-py312/Dockerfile +++ /dev/null @@ -1,109 +0,0 @@ -# TH06 CPU Universal Image Dockerfile (torch 2.10.0) -# -# FIPS-friendly Features: -# - Build tools are isolated in intermediate stage -# - Final image contains only runtime dependencies -# - Uses pip install (additive) to preserve base image packages -# -# Build Modes: -# - Midstream (default): DOWNSTREAM=false - installs system packages -# - Downstream: DOWNSTREAM=true - skips midstream-only sections (base image has them) - -################################################################################ -# Build Arguments -################################################################################ -ARG BASE_IMAGE=quay.io/opendatahub/odh-workbench-jupyter-minimal-cpu-py312-ubi9:3.4-v1.43 -ARG PYTHON_VERSION=3.12 -ARG DOWNSTREAM=false - -################################################################################ -# Build Stage - Install Python Dependencies -################################################################################ -FROM ${BASE_IMAGE} AS builder - -USER 0 -WORKDIR /tmp/deps - -# Copy requirements files -COPY --chown=1001:0 pyproject.toml requirements.txt ./ - -# Switch to user 1001 for pip installations -USER 1001 -WORKDIR /opt/app-root/src - -# Install dependencies from AIPCC GA index -RUN uv pip install --no-cache-dir \ - --index-strategy=unsafe-best-match \ - --index-url=https://console.redhat.com/api/pypi/public-rhai/rhoai/3.4/cpu-ubi9/simple/ \ - -r /tmp/deps/requirements.txt - -# Fix permissions for OpenShift -ARG PYTHON_VERSION -USER 0 -RUN chmod -R g+w /opt/app-root/lib/python${PYTHON_VERSION}/site-packages \ - && fix-permissions /opt/app-root -P - -# Clean up -RUN rm -rf /tmp/deps - -################################################################################ -# Final Stage - FIPS-friendly Runtime -################################################################################ -FROM ${BASE_IMAGE} AS final - -LABEL name="universal:th06-cpu-py312-torch210" \ - summary="TH06 CPU Python 3.12 image with PyTorch 2.10.0" \ - description="Universal CPU image combining minimal Jupyter workbench and runtime ML stack (PyTorch 2.10.0) on UBI9" \ - io.k8s.display-name="TH06 CPU Python 3.12 (Workbench + Runtime)" \ - io.k8s.description="Universal CPU image: Jupyter workbench by default; runtime when command provided." - -USER 0 -WORKDIR /opt/app-root/src - -################################################################################ -# MIDSTREAM ONLY: System packages -# Controlled by ARG DOWNSTREAM (default: false) -# - DOWNSTREAM=false (midstream): Installs system packages -# - DOWNSTREAM=true: Skips this section (AIPCC base image has everything pre-configured) -################################################################################ -ARG DOWNSTREAM - -RUN if [ "${DOWNSTREAM}" != "true" ]; then \ - echo "MIDSTREAM BUILD: Installing system packages..." && \ - dnf install -y --setopt=install_weak_deps=False \ - perl \ - mesa-libGL \ - protobuf \ - skopeo && \ - dnf clean all && rm -rf /var/cache/dnf/*; \ -else \ - echo "DOWNSTREAM BUILD: Skipping system packages (provided by base image)"; \ -fi -################################################################################ -# END MIDSTREAM ONLY -################################################################################ - -# Copy Python site-packages and CLI entry points from builder stage -# This excludes any build artifacts (FIPS friendly) -ARG PYTHON_VERSION -COPY --from=builder /opt/app-root/lib/python${PYTHON_VERSION}/site-packages /opt/app-root/lib/python${PYTHON_VERSION}/site-packages -COPY --from=builder /opt/app-root/bin /opt/app-root/bin - -# Remove uv from final image (inherited from base image, not needed at runtime) -RUN rm -f /opt/app-root/bin/uv - -# Copy license file -COPY LICENSE.md /licenses/cpu-license.md - -# Copy entrypoint -COPY --chmod=0755 entrypoint-universal.sh /usr/local/bin/entrypoint-universal.sh - -# Fix permissions for OpenShift (final stage) -RUN fix-permissions /opt/app-root -P \ - && chmod -R g+w /opt/app-root/lib/python${PYTHON_VERSION}/site-packages - -USER 1001 -WORKDIR /opt/app-root/src - -ENTRYPOINT ["/usr/local/bin/entrypoint-universal.sh"] -CMD ["start-notebook.sh"] diff --git a/images/universal/training/th06-cpu-torch210-py312/LICENSE.md b/images/universal/training/th06-cpu-torch210-py312/LICENSE.md deleted file mode 100644 index 4ba3abcf0..000000000 --- a/images/universal/training/th06-cpu-torch210-py312/LICENSE.md +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2023 - 2025 Advanced Micro Devices, Inc. All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. \ No newline at end of file diff --git a/images/universal/training/th06-cpu-torch210-py312/entrypoint-universal.sh b/images/universal/training/th06-cpu-torch210-py312/entrypoint-universal.sh deleted file mode 100644 index ae3e4d617..000000000 --- a/images/universal/training/th06-cpu-torch210-py312/entrypoint-universal.sh +++ /dev/null @@ -1,18 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail -# Universal entrypoint for workbench mode -# -# Workbench (OpenShift): NOTEBOOK_ARGS env var is set → starts Jupyter notebook -# Training jobs: Controller overrides entrypoint entirely, this script is not used -# -# Fallback: If no NOTEBOOK_ARGS and a command is provided, run that command - -if [ -n "${NOTEBOOK_ARGS:-}" ]; then - # Workbench mode: NOTEBOOK_ARGS is set (OpenShift injects this) - # Note: NOTEBOOK_ARGS is trusted platform input (set by OpenShift workbench controller) - # and requires word splitting for multiple arguments - exec sh -lc 'exec start-notebook.sh ${NOTEBOOK_ARGS}' -fi - -# Fallback: run provided command (e.g., from CMD or manual override) -exec "${@:-start-notebook.sh}" \ No newline at end of file diff --git a/images/universal/training/th06-cpu-torch210-py312/pyproject.toml b/images/universal/training/th06-cpu-torch210-py312/pyproject.toml deleted file mode 100644 index 86553193e..000000000 --- a/images/universal/training/th06-cpu-torch210-py312/pyproject.toml +++ /dev/null @@ -1,92 +0,0 @@ -# TH06 CPU Universal Image Python Dependencies -# -# To regenerate requirements.txt: -# uv pip compile --python-platform=linux --python-version=3.12 \ -# --index-strategy=unsafe-best-match \ -# --index-url=https://console.redhat.com/api/pypi/public-rhai/rhoai/3.4/cpu-ubi9/simple/ \ -# -o requirements.txt pyproject.toml - -[project] -name = "th06-cpu-universal-image" -version = "0.1.0" -requires-python = "==3.12.*" - -dependencies = [ - # =================================================================== - # ML/AI DEPENDENCIES (added on top of base image) - # Base image deps are NOT listed here - pip install is additive - # Strict AIPCC-only: all packages must be available in AIPCC index - # =================================================================== - - # PyTorch CPU version - "torch==2.10.0", - - # Triton (CPU compatible for JIT compilation) - "triton==3.6.0", - - # ML Training and Inference Libraries - "peft==0.18.1", - "datasets==4.3.0", - "transformers~=5.5.0", - "accelerate==1.12.0", - "trl==0.24.0", - - # Deep Learning Utilities (CPU-compatible) - "einops>=0.8", - "numba>=0.61.2", - - # Tokenization - "sentencepiece>=0.1.99", - "tokenizers>=0.22.0", - - # Core Dependencies - "numpy>=2.0.0", - "tqdm>=4.67.1", - "pydantic>=2.11.7", - "protobuf>=3.20.0", - "simpleeval>=0.9.13", - "safetensors==0.8.0", - "py-cpuinfo>=9.0.0", - "rich>=13.9.4", - "aiofiles==25.1.0", - "async-timeout==5.0.1", - "tensorboard==2.20.0", - - # Storage - "s3fs==2025.9.0", - "mlflow==3.10.1+rhaiv.3", - - # Training Frameworks - "training_hub==0.6.0", - "instructlab-training==0.14.2", - "rhai-innovation-mini-trainer==0.6.1", - - # Kubeflow SDK - "kubeflow==0.3.0+rhaiv.2", - "kubeflow_spark_api==2.4.0", - "pyspark_connect==4.0.1", - - # Model Management - "model_registry==0.3.7", - - # Note: GPU-specific packages are NOT included: - # - flash-attn (requires CUDA/ROCm) - # - bitsandbytes (GPU-focused) - # - liger-kernel (GPU-focused) - # - deepspeed (primarily for GPU training) - # - causal-conv1d, mamba-ssm (require CUDA) -] - -[tool.uv] -environments = [ - "sys_platform == 'linux' and implementation_name == 'cpython'", -] -index-strategy = "unsafe-best-match" -index-url = "https://console.redhat.com/api/pypi/public-rhai/rhoai/3.4/cpu-ubi9/simple/" -constraint-dependencies = [ - "aiohttp>=3.14.0", - "gitpython>=3.1.50", - "pillow>=12.3.0", - "starlette>=1.3.1", - "pyasn1>=0.6.4", -] diff --git a/images/universal/training/th06-cpu-torch210-py312/requirements.txt b/images/universal/training/th06-cpu-torch210-py312/requirements.txt deleted file mode 100644 index 0f890ac27..000000000 --- a/images/universal/training/th06-cpu-torch210-py312/requirements.txt +++ /dev/null @@ -1,637 +0,0 @@ ---index-url=https://console.redhat.com/api/pypi/public-rhai/rhoai/3.4/cpu-ubi9/simple/ -# This file was autogenerated by uv via the following command: -# uv pip compile --python-platform=linux --python-version=3.12 --index-strategy=unsafe-best-match -o requirements.txt pyproject.toml -absl-py==2.4.0 - # via tensorboard -accelerate==1.12.0 - # via - # th06-cpu-universal-image (pyproject.toml) - # peft - # training-hub - # trl -aiobotocore==2.26.0 - # via s3fs -aiofiles==25.1.0 - # via - # th06-cpu-universal-image (pyproject.toml) - # instructlab-training - # rhai-innovation-mini-trainer - # training-hub -aiohappyeyeballs==2.6.2 - # via aiohttp -aiohttp==3.14.1 - # via - # -c (workspace) - # aiobotocore - # aiohttp-retry - # fsspec - # model-registry - # s3fs - # training-hub -aiohttp-retry==2.9.1 - # via model-registry -aioitertools==0.13.0 - # via aiobotocore -aiosignal==1.4.0 - # via aiohttp -alembic==1.18.4 - # via mlflow -annotated-doc==0.0.4 - # via - # fastapi - # typer -annotated-types==0.7.0 - # via pydantic -anyio==4.13.0 - # via - # httpx - # starlette -async-timeout==5.0.1 - # via th06-cpu-universal-image (pyproject.toml) -attr==0.3.2 - # via training-hub -attrs==26.1.0 - # via aiohttp -blinker==1.9.0 - # via flask -botocore==1.41.5 - # via aiobotocore -cachetools==7.1.4 - # via - # mlflow-skinny - # mlflow-tracing -certifi==2026.5.20 - # via - # httpcore - # httpx - # kubernetes - # requests -cffi==2.0.0 - # via cryptography -charset-normalizer==3.4.7 - # via requests -click==8.4.1 - # via - # flask - # mlflow-skinny - # uvicorn -cloudpickle==3.1.2 - # via mlflow-skinny -contourpy==1.3.3 - # via matplotlib -cryptography==46.0.7 - # via - # google-auth - # mlflow -cycler==0.12.1 - # via matplotlib -databricks-sdk==0.117.0 - # via - # mlflow-skinny - # mlflow-tracing -datasets==4.3.0 - # via - # th06-cpu-universal-image (pyproject.toml) - # instructlab-training - # rhai-innovation-mini-trainer - # training-hub - # trl -deprecated==1.3.1 - # via rhai-innovation-mini-trainer -dill==0.4.0 - # via - # datasets - # multiprocess -docker==7.1.0 - # via mlflow -durationpy==0.10 - # via kubernetes -einops==0.8.2 - # via th06-cpu-universal-image (pyproject.toml) -fastapi==0.136.3 - # via mlflow-skinny -filelock==3.29.3 - # via - # datasets - # huggingface-hub - # torch - # training-hub -flask==3.1.3 - # via - # flask-cors - # mlflow -flask-cors==6.0.5 - # via mlflow -fonttools==4.63.0 - # via matplotlib -frozenlist==1.8.0 - # via - # aiohttp - # aiosignal - # training-hub -fsspec==2025.9.0 - # via - # datasets - # huggingface-hub - # s3fs - # torch - # training-hub -gitdb==4.0.12 - # via gitpython -gitpython==3.1.50 - # via - # -c (workspace) - # mlflow-skinny -google-auth==2.53.0 - # via databricks-sdk -googleapis-common-protos==1.75.0 - # via - # grpcio-status - # pyspark-connect -graphene==3.4.3 - # via mlflow -graphql-core==3.2.11 - # via - # graphene - # graphql-relay -graphql-relay==3.2.0 - # via graphene -greenlet==3.4.0 - # via sqlalchemy -grpcio==1.80.0 - # via - # grpcio-status - # pyspark-connect - # tensorboard -grpcio-status==1.80.0 - # via pyspark-connect -gunicorn==25.3.0 - # via mlflow -h11==0.16.0 - # via - # httpcore - # uvicorn -hf-xet==1.4.3 - # via huggingface-hub -httpcore==1.0.9 - # via httpx -httpx==0.28.1 - # via - # datasets - # huggingface-hub -huey==2.6.0 - # via mlflow -huggingface-hub==1.13.0 - # via - # accelerate - # datasets - # peft - # tokenizers - # transformers -idna==3.18 - # via - # anyio - # httpx - # requests - # yarl -importlib-metadata==8.9.0 - # via mlflow-skinny -iniconfig==2.3.0 - # via pytest -instructlab-training==0.14.2 - # via - # th06-cpu-universal-image (pyproject.toml) - # training-hub -itsdangerous==2.2.0 - # via flask -jinja2==3.1.6 - # via - # flask - # torch - # training-hub -jmespath==1.1.0 - # via - # aiobotocore - # botocore -joblib==1.5.3 - # via scikit-learn -kiwisolver==1.5.0 - # via matplotlib -kubeflow==0.3.0+rhaiv.2 - # via th06-cpu-universal-image (pyproject.toml) -kubeflow-katib-api==0.19.0 - # via kubeflow -kubeflow-spark-api==2.4.0 - # via th06-cpu-universal-image (pyproject.toml) -kubeflow-trainer-api==2.1.0 - # via kubeflow -kubernetes==35.0.0 - # via kubeflow -llvmlite==0.47.0 - # via - # numba - # training-hub -mako==1.3.12 - # via alembic -markdown==3.10.2 - # via tensorboard -markdown-it-py==4.2.0 - # via rich -markupsafe==3.0.3 - # via - # flask - # jinja2 - # mako - # werkzeug -matplotlib==3.10.8 - # via - # mlflow - # training-hub -mdurl==0.1.2 - # via markdown-it-py -mlflow==3.10.1+rhaiv.3 - # via th06-cpu-universal-image (pyproject.toml) -mlflow-skinny==3.10.1+rhaiv.3 - # via mlflow -mlflow-tracing==3.10.1+rhaiv.3 - # via mlflow -model-registry==0.3.7 - # via th06-cpu-universal-image (pyproject.toml) -mpmath==1.3.0 - # via - # sympy - # training-hub -multidict==6.7.1 - # via - # aiobotocore - # aiohttp - # yarl -multiprocess==0.70.16 - # via - # datasets - # training-hub -nest-asyncio2==1.7.2 - # via model-registry -networkx==3.6.1 - # via - # torch - # training-hub -ninja==1.11.1.4 - # via rhai-innovation-mini-trainer -numba==0.65.0 - # via - # th06-cpu-universal-image (pyproject.toml) - # instructlab-training - # rhai-innovation-mini-trainer - # training-hub -numpy==2.4.4 - # via - # th06-cpu-universal-image (pyproject.toml) - # accelerate - # contourpy - # datasets - # instructlab-training - # matplotlib - # mlflow - # numba - # pandas - # peft - # pyspark-connect - # rhai-innovation-mini-trainer - # scikit-learn - # scipy - # skops - # tensorboard - # training-hub - # transformers -oauthlib==3.3.1 - # via requests-oauthlib -opentelemetry-api==1.42.1 - # via - # mlflow-skinny - # mlflow-tracing - # opentelemetry-sdk - # opentelemetry-semantic-conventions -opentelemetry-proto==1.42.1 - # via - # mlflow-skinny - # mlflow-tracing -opentelemetry-sdk==1.42.1 - # via - # mlflow-skinny - # mlflow-tracing -opentelemetry-semantic-conventions==0.63b1 - # via opentelemetry-sdk -packaging==26.2 - # via - # accelerate - # datasets - # gunicorn - # huggingface-hub - # instructlab-training - # matplotlib - # mlflow-skinny - # mlflow-tracing - # peft - # pytest - # skops - # tensorboard - # training-hub - # transformers - # wheel -pandas==2.3.3 - # via - # datasets - # mlflow - # pyspark-connect - # training-hub -peft==0.18.1 - # via - # th06-cpu-universal-image (pyproject.toml) - # instructlab-training - # training-hub -pillow==12.3.0 - # via - # -c (workspace) - # matplotlib - # tensorboard -pluggy==1.6.0 - # via pytest -prettytable==3.17.0 - # via skops -propcache==0.4.1 - # via - # aiohttp - # yarl -protobuf==6.33.6 - # via - # th06-cpu-universal-image (pyproject.toml) - # databricks-sdk - # googleapis-common-protos - # grpcio-status - # mlflow-skinny - # mlflow-tracing - # opentelemetry-proto - # tensorboard -psutil==7.2.2 - # via - # accelerate - # peft - # training-hub -py-cpuinfo==9.0.0 - # via - # th06-cpu-universal-image (pyproject.toml) - # instructlab-training -py4j==0.10.9.9 - # via pyspark -pyarrow==23.0.1 - # via - # datasets - # mlflow - # pyspark-connect -pyasn1==0.6.4 - # via - # -c (workspace) - # pyasn1-modules -pyasn1-modules==0.4.2 - # via google-auth -pycparser==3.0 - # via cffi -pydantic==2.12.5 - # via - # th06-cpu-universal-image (pyproject.toml) - # fastapi - # instructlab-training - # kubeflow - # kubeflow-katib-api - # kubeflow-spark-api - # kubeflow-trainer-api - # mlflow-skinny - # mlflow-tracing - # model-registry - # training-hub -pydantic-core==2.41.5 - # via pydantic -pygments==2.20.0 - # via - # pytest - # rich -pyparsing==3.3.2 - # via - # matplotlib - # training-hub -pyspark==4.0.1 - # via pyspark-connect -pyspark-connect==4.0.1 - # via th06-cpu-universal-image (pyproject.toml) -pytest==9.0.3 - # via training-hub -python-dateutil==2.9.0.post0 - # via - # aiobotocore - # botocore - # graphene - # kubernetes - # matplotlib - # model-registry - # pandas -python-dotenv==1.2.2 - # via mlflow-skinny -pytz==2026.2 - # via pandas -pyyaml==6.0.3 - # via - # accelerate - # datasets - # huggingface-hub - # instructlab-training - # kubernetes - # mlflow-skinny - # peft - # transformers -regex==2026.4.4 - # via - # training-hub - # transformers -requests==2.34.2 - # via - # databricks-sdk - # datasets - # docker - # kubernetes - # mlflow-skinny - # requests-oauthlib - # training-hub -requests-oauthlib==2.0.0 - # via kubernetes -rhai-innovation-mini-trainer==0.6.1 - # via - # th06-cpu-universal-image (pyproject.toml) - # training-hub -rich==15.0.0 - # via - # th06-cpu-universal-image (pyproject.toml) - # instructlab-training - # rhai-innovation-mini-trainer - # training-hub - # typer -s3fs==2025.9.0 - # via th06-cpu-universal-image (pyproject.toml) -safetensors==0.8.0 - # via - # th06-cpu-universal-image (pyproject.toml) - # accelerate - # peft - # transformers -scikit-learn==1.8.0 - # via - # mlflow - # skops -scipy==1.17.1 - # via - # mlflow - # scikit-learn - # skops -sentencepiece==0.2.1 - # via th06-cpu-universal-image (pyproject.toml) -setuptools==80.10.2 - # via - # tensorboard - # torch - # training-hub -shellingham==1.5.4 - # via typer -simpleeval==1.0.7 - # via th06-cpu-universal-image (pyproject.toml) -six==1.17.0 - # via - # kubernetes - # python-dateutil -skops==0.14.0 - # via mlflow -smmap==5.0.3 - # via gitdb -sqlalchemy==2.0.49 - # via - # alembic - # mlflow -sqlparse==0.5.5 - # via mlflow-skinny -starlette==1.3.1 - # via - # -c (workspace) - # fastapi -sympy==1.14.0 - # via - # torch - # training-hub -tensorboard==2.20.0 - # via th06-cpu-universal-image (pyproject.toml) -tensorboard-data-server==0.7.2 - # via tensorboard -threadpoolctl==3.6.0 - # via scikit-learn -tokenizers==0.22.2 - # via - # th06-cpu-universal-image (pyproject.toml) - # transformers -torch==2.10.0 - # via - # th06-cpu-universal-image (pyproject.toml) - # accelerate - # instructlab-training - # peft - # rhai-innovation-mini-trainer - # training-hub -tqdm==4.68.2 - # via - # th06-cpu-universal-image (pyproject.toml) - # datasets - # huggingface-hub - # peft - # transformers -training-hub==0.6.0 - # via th06-cpu-universal-image (pyproject.toml) -transformers==5.5.4 - # via - # th06-cpu-universal-image (pyproject.toml) - # instructlab-training - # peft - # rhai-innovation-mini-trainer - # training-hub - # trl -triton==3.6.0 - # via - # th06-cpu-universal-image (pyproject.toml) - # torch -trl==0.24.0 - # via - # th06-cpu-universal-image (pyproject.toml) - # instructlab-training -typer==0.26.7 - # via - # huggingface-hub - # rhai-innovation-mini-trainer - # transformers -typing-extensions==4.15.0 - # via - # aiohttp - # aiosignal - # alembic - # anyio - # fastapi - # graphene - # grpcio - # huggingface-hub - # mlflow-skinny - # model-registry - # opentelemetry-api - # opentelemetry-sdk - # opentelemetry-semantic-conventions - # pydantic - # pydantic-core - # sqlalchemy - # starlette - # torch - # typing-inspection -typing-inspection==0.4.2 - # via - # fastapi - # pydantic -tzdata==2026.2 - # via pandas -urllib3==2.7.0 - # via - # botocore - # databricks-sdk - # docker - # kubernetes - # requests - # training-hub -uvicorn==0.49.0 - # via mlflow-skinny -wcwidth==0.8.1 - # via prettytable -websocket-client==1.9.0 - # via kubernetes -werkzeug==3.1.8 - # via - # flask - # flask-cors - # tensorboard -wheel==0.47.0 - # via - # instructlab-training - # training-hub -wrapt==1.17.3 - # via - # aiobotocore - # deprecated -xxhash==3.6.0 - # via - # datasets - # training-hub -yarl==1.23.0 - # via aiohttp -zipp==4.1.0 - # via importlib-metadata diff --git a/images/universal/training/th06-cuda130-torch210-py312/Dockerfile b/images/universal/training/th06-cuda130-torch210-py312/Dockerfile deleted file mode 100644 index 464a8dfbe..000000000 --- a/images/universal/training/th06-cuda130-torch210-py312/Dockerfile +++ /dev/null @@ -1,137 +0,0 @@ -# Universal Image Dockerfile -# -# FIPS-friendly Features: -# - Build tools are isolated in intermediate stage -# - Final image contains only runtime dependencies -# - OpenSSL FIPS mode supported via base image -# - Uses pip install (additive) to preserve base image packages -# -# Build Modes: -# - Midstream (default): DOWNSTREAM=false - installs system packages and sets env vars -# - Downstream: DOWNSTREAM=true - skips midstream-only sections (base image has them) - -################################################################################ -# Build Arguments -################################################################################ -ARG BASE_IMAGE=quay.io/opendatahub/odh-workbench-jupyter-minimal-cuda-py312-ubi9:3.4-v1.43 -ARG PYTHON_VERSION=3.12 -ARG DOWNSTREAM=false - -################################################################################ -# Build Stage - Install Python Dependencies -################################################################################ -FROM ${BASE_IMAGE} AS builder - -USER 0 -WORKDIR /tmp/deps - -# Copy requirements files -COPY --chown=1001:0 pyproject.toml requirements.txt ./ - -# Switch to user 1001 for pip installations -USER 1001 -WORKDIR /opt/app-root/src - -# Install dependencies from AIPCC GA index -RUN uv pip install --no-cache-dir \ - --index-strategy=unsafe-best-match \ - --index-url=https://console.redhat.com/api/pypi/public-rhai/rhoai/3.4/cuda13.0-ubi9/simple/ \ - -r /tmp/deps/requirements.txt - -# Fix permissions for OpenShift -ARG PYTHON_VERSION -USER 0 -RUN chmod -R g+w /opt/app-root/lib/python${PYTHON_VERSION}/site-packages \ - && fix-permissions /opt/app-root -P - -# Clean up -RUN rm -rf /tmp/deps - -################################################################################ -# Final Stage - FIPS-friendly Runtime -################################################################################ -FROM ${BASE_IMAGE} AS final - -LABEL name="universal:th06-cuda130-py312-torch210" \ - summary="TH06 CUDA 13.0 Python 3.12 image with PyTorch 2.10.0" \ - description="Universal image combining minimal Jupyter workbench and runtime ML stack (CUDA 13.0, PyTorch 2.10.0, FlashAttention 2.8.3) on UBI9" \ - io.k8s.display-name="TH06 CUDA 13.0 Python 3.12 (Workbench + Runtime)" \ - io.k8s.description="Universal image: Jupyter workbench by default; runtime when command provided." - -USER 0 -WORKDIR /opt/app-root/src - -################################################################################ -# MIDSTREAM ONLY: Environment variables and system packages -# Controlled by ARG DOWNSTREAM (default: false) -# - DOWNSTREAM=false (midstream): Installs CUDA dev tools, RDMA packages, sets env vars -# - DOWNSTREAM=true: Skips this section (AIPCC base image has everything pre-configured) -################################################################################ -ARG DOWNSTREAM - -# Environment variables for NVIDIA and CUDA -# These are safe to set in both modes - they define standard paths -# In downstream, the base image may override these appropriately -ENV NVIDIA_VISIBLE_DEVICES=all \ - NVIDIA_DRIVER_CAPABILITIES=compute,utility \ - CUDA_HOME=/usr/local/cuda \ - PATH=/usr/local/cuda/bin:${PATH} \ - LD_LIBRARY_PATH=/usr/local/cuda/lib64:${LD_LIBRARY_PATH} \ - CPATH=/usr/local/cuda/include:${CPATH} \ - TRITON_PTXAS_PATH=/usr/local/cuda/bin/ptxas \ - TRITON_CUOBJDUMP_PATH=/usr/local/cuda/bin/cuobjdump \ - TRITON_NVDISASM_PATH=/usr/local/cuda/bin/nvdisasm \ - TORCH_CUDA_ARCH_LIST="8.0;8.6;8.9;9.0" \ - XLA_FLAGS=--xla_gpu_cuda_data_dir=/usr/local/cuda - -# System packages (MIDSTREAM ONLY - skipped when DOWNSTREAM=true) -# Repo files for CUDA and RDMA packages -COPY cuda.repo mellanox.repo /etc/yum.repos.d/ - -RUN if [ "${DOWNSTREAM}" != "true" ]; then \ - echo "MIDSTREAM BUILD: Installing system packages..." && \ - dnf install -y --setopt=install_weak_deps=False \ - perl \ - mesa-libGL \ - skopeo \ - libibverbs-utils \ - infiniband-diags \ - libibumad \ - librdmacm \ - librdmacm-utils \ - rdma-core \ - protobuf \ - cuda-cudart-devel-13-0 \ - cuda-nvcc-13-0 && \ - dnf clean all && rm -rf /var/cache/dnf/*; \ -else \ - echo "DOWNSTREAM BUILD: Skipping system packages (provided by base image)"; \ -fi -################################################################################ -# END MIDSTREAM ONLY -################################################################################ - -# Copy Python site-packages and CLI entry points from builder stage -# This excludes any build artifacts (FIPS friendly) -ARG PYTHON_VERSION -COPY --from=builder /opt/app-root/lib/python${PYTHON_VERSION}/site-packages /opt/app-root/lib/python${PYTHON_VERSION}/site-packages -COPY --from=builder /opt/app-root/bin /opt/app-root/bin - -# Remove uv from final image (inherited from base image, not needed at runtime) -RUN rm -f /opt/app-root/bin/uv - -# Copy license file -COPY LICENSE.md /licenses/cuda-license.md - -# Copy entrypoint -COPY --chmod=0755 entrypoint-universal.sh /usr/local/bin/entrypoint-universal.sh - -# Fix permissions for OpenShift (final stage) -RUN fix-permissions /opt/app-root -P \ - && chmod -R g+w /opt/app-root/lib/python${PYTHON_VERSION}/site-packages - -USER 1001 -WORKDIR /opt/app-root/src - -ENTRYPOINT ["/usr/local/bin/entrypoint-universal.sh"] -CMD ["start-notebook.sh"] diff --git a/images/universal/training/th06-cuda130-torch210-py312/LICENSE.md b/images/universal/training/th06-cuda130-torch210-py312/LICENSE.md deleted file mode 100644 index b9fd73e57..000000000 --- a/images/universal/training/th06-cuda130-torch210-py312/LICENSE.md +++ /dev/null @@ -1,285 +0,0 @@ -NVIDIA DEEP LEARNING CONTAINER LICENSE - -This license is a legal agreement between you and NVIDIA Corporation ("NVIDIA") -and governs the use of the NVIDIA container and all its contents (“CONTAINER”). - -This license can be accepted only by an adult of legal age of majority in the -country in which the CONTAINER is used. If you are under the legal age of -majority, you must ask your parent or legal guardian to consent to this license. -If you are entering this license on behalf of a company or other legal entity, -you represent that you have legal authority and “you” will mean the entity you -represent. - -By using the CONTAINER, you affirm that you have reached the legal age of -majority, you accept the terms of this license, and you take legal and financial -responsibility for the actions of your permitted users. - -You agree to use the CONTAINER only for purposes that are permitted by (a) this -license, and (b) any applicable law, regulation or generally accepted practices -or guidelines in the relevant jurisdictions. - -1. LICENSE. Subject to the terms of this license, NVIDIA hereby grants you a -non-exclusive, non-transferable license, without the right to sublicense (except -as expressly provided in this license) to: - -a. Install and use copies of the CONTAINER, and modify and create derivative -works of samples or example source code delivered in the CONTAINER (if -applicable), to develop and test services and applications, - -b. Deploy the CONTAINER on infrastructure you own or lease to offer a service to -third parties, without distributing the CONTAINER or exposing the NVIDIA APIs in -the CONTAINER directly to such service users, and - -c. Develop and extend the CONTAINER to create a Compatible (as defined below) -derived CONTAINER that includes the entire CONTAINER plus other software with -primary functionality, to develop and compile applications, and distribute such -derived CONTAINER to run applications, subject to the distribution requirements -indicated in this license. As used in this section, “Compatible” means that -extensions to the CONTAINER must not adversely affect the functionality of the -other components in the CONTAINER. - -2. DISTRIBUTION REQUIREMENTS. For purposes of this Section 2, the term -“distribution” also means the deployment of CONTAINERS in a service or an -application for third parties to access over the internet. These are the -distribution requirements for you to exercise the grants above: - -a. A service or an application must have material additional functionality, -beyond the included portions of the CONTAINER. - -b. The following notice shall be included in modifications and derivative works -of source code distributed: “This software contains source code provided by -NVIDIA Corporation.” - -c. You agree to distribute the CONTAINER subject to the terms at least as -protective as the terms of this license, including (without limitation) terms -relating to the license grant, license restrictions and protection of NVIDIA’s -intellectual property rights. Additionally, you agree that you will protect the -privacy, security and legal rights of your application users. - -d. You agree to notify NVIDIA in writing of any known or suspected distribution -or use of the CONTAINER not in compliance with the requirements of this license, -and to enforce the terms of your agreements with respect to the distributed -CONTAINER. - -3. AUTHORIZED USERS. You may allow employees and contractors of your entity or -of your subsidiary(ies) to access and use the CONTAINER from your secure network -to perform work on your behalf. If you are an academic institution you may allow -users enrolled or employed by the academic institution to access and use the -CONTAINER from your secure network. You are responsible for the compliance with -the terms of this license by your authorized users. - -4. LIMITATIONS. Your license to use the CONTAINER is restricted as follows: - -a. The CONTAINER may run on any computing system with or without NVIDIA GPUs, -except for the NVIDIA proprietary software (such as CUDA and TensorRT software) -in the CONTAINER which is licensed only to run on systems with NVIDIA GPUs. The -NVIDIA proprietary software in the CONTAINER may be present on systems without -NVIDIA GPUs, as long as it is not running on such systems. For components -governed by open source software licenses, see the information in the -“Components Under Other Licenses” section below. - -b. You may not reverse engineer, decompile or disassemble, or remove copyright -or other proprietary notices from any portion of the CONTAINER or copies of the -CONTAINER. - -c. Except as expressly provided in this license, you may not copy, sell, rent, -sublicense, transfer, distribute, modify, or create derivative works of any -portion of the CONTAINER. For clarity, you may not distribute or sublicense the -CONTAINER as a stand-alone product. - -d. Unless you have an agreement with NVIDIA for this purpose, you may not -indicate that a service or an application created with the CONTAINER is -sponsored or endorsed by NVIDIA. - -e. You may not bypass, disable, or circumvent any technical limitation, -encryption, security, digital rights management or authentication mechanism in -the CONTAINER. - -f. You may not replace any NVIDIA software components in the CONTAINER that are -governed by this license with other software that implements NVIDIA APIs. - -g. You may not use the CONTAINER in any manner that would cause it to become -subject to an open source software license. As examples, licenses that require -as a condition of use, modification, and/or distribution that the CONTAINER be: -(i) disclosed or distributed in source code form; (ii) licensed for the purpose -of making derivative works; or (iii) redistributable at no charge. - -h. You acknowledge that the CONTAINER as delivered is not tested or certified by -NVIDIA for use in connection with the design, construction, maintenance, and/or -operation of any system where the use or failure of such system could result in -a situation that threatens the safety of human life or results in catastrophic -damages (each, a “Critical Application”). Examples of Critical Applications -include use in avionics, navigation, autonomous vehicle applications, ai -solutions for automotive products, military, medical, life support or other life -critical applications. NVIDIA shall not be liable to you or any third party, in -whole or in part, for any claims or damages arising from such uses. You are -solely responsible for ensuring that any product or service developed with the -CONTAINER as a whole includes sufficient features to comply with all applicable -legal and regulatory standards and requirements. - -i. You agree to defend, indemnify and hold harmless NVIDIA and its affiliates, -and their respective employees, contractors, agents, officers and directors, -from and against any and all claims, damages, obligations, losses, liabilities, -costs or debt, fines, restitutions and expenses (including but not limited to -attorney’s fees and costs incident to establishing the right of indemnification) -arising out of or related to products or services that use the CONTAINER in or -for Critical Applications, and for use of the CONTAINER outside of the scope of -this license or not in compliance with its terms. - -j. You may not reverse engineer, decompile or disassemble any portion of the -output generated using the NVIDIA proprietary software (such as CUDA and -TensorRT software) in the CONTAINER for the purpose of translating such output -artifacts to target a non-NVIDIA platform. - -5. UPDATES. NVIDIA may, at its option, make available patches, workarounds or -other updates to this CONTAINER. Unless the updates are provided with their -separate governing terms, they are deemed part of the CONTAINER licensed to you -as provided in this license. You agree that the form and content of the -CONTAINER that NVIDIA provides may change without prior notice to you. While -NVIDIA generally maintains compatibility between versions, NVIDIA may in some -cases make changes that introduce incompatibilities in future versions of the -CONTAINER. - -6. PRE-RELEASE VERSIONS. CONTAINER versions identified as alpha, beta, preview, -early access or otherwise as pre-release may not be fully functional, may -contain errors or design flaws, and may have reduced or different security, -privacy, availability, and reliability standards relative to commercial versions -of NVIDIA software and materials. You may use a pre- release CONTAINER version -at your own risk, understanding that these versions are not intended for use in -production or business-critical systems. NVIDIA may choose not to make available -a commercial version of any pre-release CONTAINER. NVIDIA may also choose to -abandon development and terminate the availability of a pre-release CONTAINER at -any time without liability. - -7. COMPONENTS UNDER OTHER LICENSES. The CONTAINER may include NVIDIA or -third-party components with separate legal notices or terms as may be described -in proprietary notices accompanying the CONTAINER. If and to the extent there is -a conflict between the terms in this license and the license terms associated -with the component, the license terms associated with the components control -only to the extent necessary to resolve the conflict. For example, some Triton -components (such as the Triton Inference Server) are governed by open source -software licenses. - -You acknowledge and agree that it is your sole responsibility to obtain any -additional third-party licenses required to make, have made, use, have used, -sell, import, and offer for sale your products or services that include or -incorporate any third- party software and content relating to audio and/or video -encoders and decoders from, including but not limited to, Microsoft, Thomson, -Fraunhofer IIS, Sisvel S.p.A., MPEG-LA, and Coding Technologies. NVIDIA does not -grant to you under this license any necessary patent or other rights with -respect to any audio and/or video encoders and decoders. Subject to the other -terms of this license, you may use the CONTAINER to develop and test -applications released under Open Source Initiative (OSI) approved open source -software licenses. - -8. OWNERSHIP. - -8.1 NVIDIA reserves all rights, title and interest in and to the CONTAINER not -expressly granted to you under this license. NVIDIA and its suppliers hold all -rights, title and interest in and to the CONTAINER, including their respective -intellectual property rights. The CONTAINER is copyrighted and protected by the -laws of the United States and other countries, and international treaty -provisions. - -8.2 Subject to the rights of NVIDIA and its suppliers in the CONTAINER, you hold -all rights, title and interest in and to your services, applications and your -derivative works of the sample source code delivered in the CONTAINER including -their respective intellectual property rights. - -9. FEEDBACK. You may, but are not obligated to, provide to NVIDIA suggestions, -fixes, modifications, feature requests or other feedback regarding the CONTAINER -(“Feedback”). Feedback, even if designated as confidential by you, shall not -create any confidentiality obligation for NVIDIA. NVIDIA and its designees have -a perpetual, non-exclusive, worldwide, irrevocable license to use, reproduce, -publicly display, modify, create derivative works of, license, sublicense, and -otherwise distribute and exploit Feedback as NVIDIA sees fit without payment and -without obligation or restriction of any kind on account of intellectual -property rights or otherwise. - -10. NO WARRANTIES. THE CONTAINER IS PROVIDED AS-IS. TO THE MAXIMUM EXTENT -PERMITTED BY APPLICABLE LAW NVIDIA AND ITS AFFILIATES EXPRESSLY DISCLAIM ALL -WARRANTIES OF ANY KIND OR NATURE, WHETHER EXPRESS, IMPLIED OR STATUTORY, -INCLUDING, BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY, NON-INFRINGEMENT, -OR FITNESS FOR A PARTICULAR PURPOSE. NVIDIA DOES NOT WARRANT THAT THE CONTAINER -WILL MEET YOUR REQUIREMENTS OR THAT THE OPERATION THEREOF WILL BE UNINTERRUPTED -OR ERROR-FREE, OR THAT ALL ERRORS WILL BE CORRECTED. - -11. LIMITATIONS OF LIABILITY. TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW -NVIDIA AND ITS AFFILIATES SHALL NOT BE LIABLE FOR ANY SPECIAL, INCIDENTAL, -PUNITIVE OR CONSEQUENTIAL DAMAGES, OR FOR ANY LOST PROFITS, PROJECT DELAYS, LOSS -OF USE, LOSS OF DATA OR LOSS OF GOODWILL, OR THE COSTS OF PROCURING SUBSTITUTE -PRODUCTS, ARISING OUT OF OR IN CONNECTION WITH THIS LICENSE OR THE USE OR -PERFORMANCE OF THE CONTAINER, WHETHER SUCH LIABILITY ARISES FROM ANY CLAIM BASED -UPON BREACH OF CONTRACT, BREACH OF WARRANTY, TORT (INCLUDING NEGLIGENCE), -PRODUCT LIABILITY OR ANY OTHER CAUSE OF ACTION OR THEORY OF LIABILITY, EVEN IF -NVIDIA HAS PREVIOUSLY BEEN ADVISED OF, OR COULD REASONABLY HAVE FORESEEN, THE -POSSIBILITY OF SUCH DAMAGES. IN NO EVENT WILL NVIDIA’S AND ITS AFFILIATES TOTAL -CUMULATIVE LIABILITY UNDER OR ARISING OUT OF THIS LICENSE EXCEED US$10.00. THE -NATURE OF THE LIABILITY OR THE NUMBER OF CLAIMS OR SUITS SHALL NOT ENLARGE OR -EXTEND THIS LIMIT. - -12. TERMINATION. Your rights under this license will terminate automatically -without notice from NVIDIA if you fail to comply with any term and condition of -this license or if you commence or participate in any legal proceeding against -NVIDIA with respect to the CONTAINER. NVIDIA may terminate this license with -advance written notice to you, if NVIDIA decides to no longer provide the -CONTAINER in a country or, in NVIDIA’s sole discretion, the continued use of it -is no longer commercially viable. Upon any termination of this license, you -agree to promptly discontinue use of the CONTAINER and destroy all copies in -your possession or control. Your prior distributions in accordance with this -license are not affected by the termination of this license. All provisions of -this license will survive termination, except for the license granted to you. - -13. APPLICABLE LAW. This license will be governed in all respects by the laws of -the United States and of the State of Delaware, without regard to the conflicts -of laws principles. The United Nations Convention on Contracts for the -International Sale of Goods is specifically disclaimed. You agree to all terms -of this license in the English language. The state or federal courts residing in -Santa Clara County, California shall have exclusive jurisdiction over any -dispute or claim arising out of this license. Notwithstanding this, you agree -that NVIDIA shall still be allowed to apply for injunctive remedies or urgent -legal relief in any jurisdiction. - -14. NO ASSIGNMENT. This license and your rights and obligations thereunder may -not be assigned by you by any means or operation of law without NVIDIA’s -permission. Any attempted assignment not approved by NVIDIA in writing shall be -void and of no effect. NVIDIA may assign, delegate or transfer this license and -its rights and obligations, and if to a non-affiliate you will be notified. - -15. EXPORT. The CONTAINER is subject to United States export laws and -regulations. You agree to comply with all applicable U.S. and international -export laws, including the Export Administration Regulations (EAR) administered -by the U.S. Department of Commerce and economic sanctions administered by the -U.S. Department of Treasury’s Office of Foreign Assets Control (OFAC). These -laws include restrictions on destinations, end-users and end-use. By accepting -this license, you confirm that you are not currently residing in a country or -region currently embargoed by the U.S. and that you are not otherwise prohibited -from receiving the CONTAINER. - -16. GOVERNMENT USE. The CONTAINER is, and shall be treated as being, “Commercial -Items” as that term is defined at 48 CFR § 2.101, consisting of “commercial -computer software” and “commercial computer software documentation”, -respectively, as such terms are used in, respectively, 48 CFR § 12.212 and 48 -CFR §§ 227.7202 & 252.227-7014(a)(1). Use, duplication or disclosure by the U.S. -Government or a U.S. Government subcontractor is subject to the restrictions in -this license pursuant to 48 CFR § 12.212 or 48 CFR § 227.7202. In no event shall -the US Government user acquire rights in the CONTAINER beyond those specified in -48 C.F.R. 52.227-19(b)(1)-(2). - -17. NOTICES. Please direct your legal notices or other correspondence to NVIDIA -Corporation, 2788 San Tomas Expressway, Santa Clara, California 95051, United -States of America, Attention: Legal Department. 18. ENTIRE AGREEMENT. This -license is the final, complete and exclusive agreement between the parties -relating to the subject matter of this license and supersedes all prior or -contemporaneous understandings and agreements relating to this subject matter, -whether oral or written. If any court of competent jurisdiction determines that -any provision of this license is illegal, invalid or unenforceable, the -remaining provisions will remain in full force and effect. Any amendment or -waiver under this license shall be in writing and signed by representatives of -both parties. - -19. LICENSING. If the distribution terms in this license are not suitable for -your organization, or for any questions regarding this license, please contact -NVIDIA at nvidia-compute-license-questions@nvidia.com. - -(v. September 14, 2021) \ No newline at end of file diff --git a/images/universal/training/th06-cuda130-torch210-py312/cuda.repo b/images/universal/training/th06-cuda130-torch210-py312/cuda.repo deleted file mode 100644 index bb993de72..000000000 --- a/images/universal/training/th06-cuda130-torch210-py312/cuda.repo +++ /dev/null @@ -1,7 +0,0 @@ -[cuda-rhel9-x86_64] -name=CUDA Repository for RHEL9 x86_64 -baseurl=https://developer.download.nvidia.com/compute/cuda/repos/rhel9/x86_64 -enabled=1 -gpgcheck=1 -gpgkey=https://developer.download.nvidia.com/compute/cuda/repos/rhel9/x86_64/D42D0685.pub - diff --git a/images/universal/training/th06-cuda130-torch210-py312/entrypoint-universal.sh b/images/universal/training/th06-cuda130-torch210-py312/entrypoint-universal.sh deleted file mode 100644 index a8c9ac840..000000000 --- a/images/universal/training/th06-cuda130-torch210-py312/entrypoint-universal.sh +++ /dev/null @@ -1,18 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail -# Universal entrypoint for workbench mode -# -# Workbench (OpenShift): NOTEBOOK_ARGS env var is set → starts Jupyter notebook -# Training jobs: Controller overrides entrypoint entirely, this script is not used -# -# Fallback: If no NOTEBOOK_ARGS and a command is provided, run that command - -if [ -n "${NOTEBOOK_ARGS:-}" ]; then - # Workbench mode: NOTEBOOK_ARGS is set (OpenShift injects this) - # Note: NOTEBOOK_ARGS is trusted platform input (set by OpenShift workbench controller) - # and requires word splitting for multiple arguments - exec sh -lc 'exec start-notebook.sh ${NOTEBOOK_ARGS}' -fi - -# Fallback: run provided command (e.g., from CMD or manual override) -exec "${@:-start-notebook.sh}" diff --git a/images/universal/training/th06-cuda130-torch210-py312/mellanox.repo b/images/universal/training/th06-cuda130-torch210-py312/mellanox.repo deleted file mode 100644 index 4cb2b7d7c..000000000 --- a/images/universal/training/th06-cuda130-torch210-py312/mellanox.repo +++ /dev/null @@ -1,7 +0,0 @@ -[mlnx_ofed_24.10-1.1.4.0_base] -name=Mellanox OFED Repository 24.10-1.1.4.0 -baseurl=https://linux.mellanox.com/public/repo/mlnx_ofed/24.10-1.1.4.0/rhel9.5/x86_64 -enabled=1 -gpgcheck=1 -gpgkey=https://www.mellanox.com/downloads/ofed/RPM-GPG-KEY-Mellanox - diff --git a/images/universal/training/th06-cuda130-torch210-py312/pyproject.toml b/images/universal/training/th06-cuda130-torch210-py312/pyproject.toml deleted file mode 100644 index 9a031f21b..000000000 --- a/images/universal/training/th06-cuda130-torch210-py312/pyproject.toml +++ /dev/null @@ -1,110 +0,0 @@ -# TH06 CUDA Universal Image Python Dependencies -# -# To regenerate requirements.txt: -# uv pip compile --python-platform=linux --python-version=3.12 \ -# --index-strategy=unsafe-best-match \ -# --index-url=https://console.redhat.com/api/pypi/public-rhai/rhoai/3.4/cuda13.0-ubi9/simple/ \ -# -o requirements.txt pyproject.toml - -[project] -name = "th06-cuda-universal-image" -version = "0.1.0" -requires-python = "==3.12.*" - -dependencies = [ - # =================================================================== - # ML/AI DEPENDENCIES (added on top of base image) - # Base image deps are NOT listed here - pip install is additive - # Strict AIPCC-only: all packages must be available in AIPCC index - # =================================================================== - - # PyTorch with CUDA 13.0 - "torch==2.10.0", - - # Triton (GPU kernel compiler) - "triton==3.6.0", - - # xformers (efficient transformers) - "xformers==0.0.35", - - # ML Training and Inference Libraries - "accelerate==1.12.0", - "transformers~=5.5.0", - "peft==0.18.1", - "datasets==4.3.0", - - # Core Dependencies - "tqdm>=4.67.1", - "pydantic>=2.11.7", - "aiofiles==25.1.0", - "deprecated>=1.2.18", - "typer>=0.19.2", - "protobuf>=3.20.0", - "simpleeval>=0.9.13", - "safetensors==0.8.0", - "py-cpuinfo>=9.0.0", - - # Deep Learning Utilities - "numba>=0.61.2", - "numpy>=2.0.0", - "rich>=13.9.4", - "tensorboard==2.20.0", - "bitsandbytes>=0.48.1", - "liger-kernel>=0.6.2", - "einops>=0.8.1", - "kernels>=0.10.3", - - # Tokenization - "sentencepiece>=0.1.99", - "tokenizers>=0.22.0", - - # Training Libraries - "trl==0.24.0", - "deepspeed>=0.18.4", - - # Networking - "async-timeout==5.0.1", - - # HuggingFace - "hf-xet>=1.1.8", - "huggingface-hub>=0.34.4", - "mlflow==3.10.1+rhaiv.3", - - # Storage - "s3fs==2025.9.0", - - # Training Frameworks - "training_hub[lora]==0.6.0", - "instructlab-training==0.14.2", - "rhai-innovation-mini-trainer==0.6.1", - "unsloth~=2026.4.5", - - # Kubeflow SDK - "kubeflow==0.3.0+rhaiv.2", - "kubeflow_spark_api==2.4.0", - "pyspark_connect==4.0.1", - - # Model Management - "model_registry==0.3.7", - - # Flash Attention (pre-built wheel from AIPCC) - "flash-attn==2.8.3", - - # Mamba dependencies (pre-built wheels from AIPCC) - "causal-conv1d>=1.5.3", - "mamba-ssm>=2.2.6", -] - -[tool.uv] -environments = [ - "sys_platform == 'linux' and implementation_name == 'cpython'", -] -index-strategy = "unsafe-best-match" -index-url = "https://console.redhat.com/api/pypi/public-rhai/rhoai/3.4/cuda13.0-ubi9/simple/" -constraint-dependencies = [ - "aiohttp>=3.14.0", - "gitpython>=3.1.50", - "pillow>=12.3.0", - "starlette>=1.3.1", - "pyasn1>=0.6.4", -] diff --git a/images/universal/training/th06-cuda130-torch210-py312/requirements.txt b/images/universal/training/th06-cuda130-torch210-py312/requirements.txt deleted file mode 100644 index 38811daf1..000000000 --- a/images/universal/training/th06-cuda130-torch210-py312/requirements.txt +++ /dev/null @@ -1,790 +0,0 @@ ---index-url=https://console.redhat.com/api/pypi/public-rhai/rhoai/3.4/cuda13.0-ubi9/simple/ -# This file was autogenerated by uv via the following command: -# uv pip compile --python-platform=linux --python-version=3.12 --index-strategy=unsafe-best-match -o requirements.txt pyproject.toml -absl-py==2.4.0 - # via tensorboard -accelerate==1.12.0 - # via - # th06-cuda-universal-image (pyproject.toml) - # peft - # training-hub - # trl - # unsloth - # unsloth-zoo -aiobotocore==2.26.0 - # via s3fs -aiofiles==25.1.0 - # via - # th06-cuda-universal-image (pyproject.toml) - # instructlab-training - # rhai-innovation-mini-trainer - # training-hub -aiohappyeyeballs==2.6.1 - # via aiohttp -aiohttp==3.14.1 - # via - # -c (workspace) - # aiobotocore - # aiohttp-retry - # fsspec - # model-registry - # s3fs - # training-hub -aiohttp-retry==2.9.1 - # via model-registry -aioitertools==0.13.0 - # via aiobotocore -aiosignal==1.4.0 - # via aiohttp -alembic==1.18.4 - # via mlflow -annotated-doc==0.0.4 - # via - # fastapi - # typer -annotated-types==0.7.0 - # via pydantic -anyio==4.13.0 - # via - # httpx - # starlette -async-timeout==5.0.1 - # via th06-cuda-universal-image (pyproject.toml) -attr==0.3.2 - # via training-hub -attrs==26.1.0 - # via aiohttp -bitsandbytes==0.49.2 - # via - # th06-cuda-universal-image (pyproject.toml) - # unsloth -blinker==1.9.0 - # via flask -botocore==1.41.5 - # via aiobotocore -cachetools==7.0.5 - # via - # mlflow-skinny - # mlflow-tracing -causal-conv1d==1.6.1 - # via th06-cuda-universal-image (pyproject.toml) -certifi==2026.2.25 - # via - # httpcore - # httpx - # kubernetes - # requests -cffi==2.0.0 - # via cryptography -charset-normalizer==3.4.7 - # via requests -click==8.3.2 - # via - # flask - # mlflow-skinny - # typer - # uvicorn -cloudpickle==3.1.2 - # via mlflow-skinny -contourpy==1.3.3 - # via matplotlib -cryptography==46.0.7 - # via - # google-auth - # mlflow -cut-cross-entropy==25.1.1 - # via unsloth-zoo -cycler==0.12.1 - # via matplotlib -databricks-sdk==0.102.0 - # via - # mlflow-skinny - # mlflow-tracing -datasets==4.3.0 - # via - # th06-cuda-universal-image (pyproject.toml) - # instructlab-training - # rhai-innovation-mini-trainer - # training-hub - # trl - # unsloth - # unsloth-zoo -deepspeed==0.18.9 - # via th06-cuda-universal-image (pyproject.toml) -deprecated==1.3.1 - # via - # th06-cuda-universal-image (pyproject.toml) - # rhai-innovation-mini-trainer -diffusers==0.38.0 - # via unsloth -dill==0.4.0 - # via - # datasets - # multiprocess -docker==7.1.0 - # via mlflow -docstring-parser==0.18.0 - # via tyro -durationpy==0.10 - # via kubernetes -einops==0.8.2 - # via - # th06-cuda-universal-image (pyproject.toml) - # deepspeed - # flash-attn - # mamba-ssm -fastapi==0.135.3 - # via mlflow-skinny -filelock==3.28.0 - # via - # datasets - # diffusers - # huggingface-hub - # torch - # training-hub - # unsloth-zoo -flash-attn==2.8.3 - # via th06-cuda-universal-image (pyproject.toml) -flask==3.1.3 - # via - # flask-cors - # mlflow -flask-cors==6.0.2 - # via mlflow -fonttools==4.62.1 - # via matplotlib -frozenlist==1.8.0 - # via - # aiohttp - # aiosignal - # training-hub -fsspec==2025.9.0 - # via - # datasets - # huggingface-hub - # s3fs - # torch - # training-hub -gitdb==4.0.12 - # via gitpython -gitpython==3.1.50 - # via - # -c (workspace) - # mlflow-skinny -google-auth==2.49.2 - # via databricks-sdk -googleapis-common-protos==1.74.0 - # via - # grpcio-status - # pyspark-connect -graphene==3.4.3 - # via mlflow -graphql-core==3.2.8 - # via - # graphene - # graphql-relay -graphql-relay==3.2.0 - # via graphene -greenlet==3.4.0 - # via sqlalchemy -grpcio==1.80.0 - # via - # grpcio-status - # pyspark-connect - # tensorboard -grpcio-status==1.80.0 - # via pyspark-connect -gunicorn==25.3.0 - # via mlflow -h11==0.16.0 - # via - # httpcore - # uvicorn -hf-transfer==0.1.9 - # via - # unsloth - # unsloth-zoo -hf-xet==1.4.3 - # via - # th06-cuda-universal-image (pyproject.toml) - # huggingface-hub -hjson==3.1.0 - # via deepspeed -httpcore==1.0.9 - # via httpx -httpx==0.28.1 - # via - # datasets - # diffusers - # huggingface-hub -huey==2.6.0 - # via mlflow -huggingface-hub==1.10.2 - # via - # th06-cuda-universal-image (pyproject.toml) - # accelerate - # datasets - # diffusers - # kernels - # peft - # tokenizers - # transformers - # unsloth - # unsloth-zoo -idna==3.17 - # via - # anyio - # httpx - # requests - # yarl -importlib-metadata==8.7.1 - # via - # diffusers - # mlflow-skinny - # opentelemetry-api -iniconfig==2.3.0 - # via pytest -instructlab-training==0.14.2 - # via - # th06-cuda-universal-image (pyproject.toml) - # training-hub -itsdangerous==2.2.0 - # via flask -jinja2==3.1.6 - # via - # flask - # torch - # training-hub -jmespath==1.1.0 - # via - # aiobotocore - # botocore -joblib==1.5.3 - # via scikit-learn -kernels==0.13.0 - # via th06-cuda-universal-image (pyproject.toml) -kiwisolver==1.5.0 - # via matplotlib -kubeflow==0.3.0+rhaiv.2 - # via th06-cuda-universal-image (pyproject.toml) -kubeflow-katib-api==0.19.0 - # via kubeflow -kubeflow-spark-api==2.4.0 - # via th06-cuda-universal-image (pyproject.toml) -kubeflow-trainer-api==2.1.0 - # via kubeflow -kubernetes==35.0.0 - # via kubeflow -liger-kernel==0.7.0 - # via th06-cuda-universal-image (pyproject.toml) -llvmlite==0.47.0 - # via - # numba - # training-hub -mako==1.3.11 - # via alembic -mamba-ssm==2.3.1 - # via th06-cuda-universal-image (pyproject.toml) -markdown==3.10.2 - # via tensorboard -markdown-it-py==4.0.0 - # via rich -markupsafe==3.0.3 - # via - # flask - # jinja2 - # mako - # werkzeug -matplotlib==3.10.8 - # via - # mlflow - # training-hub -mdurl==0.1.2 - # via markdown-it-py -mlflow==3.10.1+rhaiv.3 - # via th06-cuda-universal-image (pyproject.toml) -mlflow-skinny==3.10.1+rhaiv.3 - # via mlflow -mlflow-tracing==3.10.1+rhaiv.3 - # via mlflow -model-registry==0.3.7 - # via th06-cuda-universal-image (pyproject.toml) -mpmath==1.3.0 - # via - # sympy - # training-hub -msgpack==1.1.2 - # via deepspeed -msgspec==0.21.1 - # via unsloth-zoo -multidict==6.7.1 - # via - # aiobotocore - # aiohttp - # yarl -multiprocess==0.70.16 - # via - # datasets - # training-hub -nest-asyncio==1.6.0 - # via unsloth -nest-asyncio2==1.7.2 - # via model-registry -networkx==3.6.1 - # via - # torch - # training-hub -ninja==1.11.1.4 - # via - # causal-conv1d - # deepspeed - # mamba-ssm - # rhai-innovation-mini-trainer -numba==0.65.0 - # via - # th06-cuda-universal-image (pyproject.toml) - # instructlab-training - # rhai-innovation-mini-trainer - # training-hub -numpy==2.4.4 - # via - # th06-cuda-universal-image (pyproject.toml) - # accelerate - # bitsandbytes - # contourpy - # datasets - # deepspeed - # diffusers - # instructlab-training - # matplotlib - # mlflow - # numba - # pandas - # peft - # pyspark-connect - # rhai-innovation-mini-trainer - # scikit-learn - # scipy - # skops - # tensorboard - # torchvision - # training-hub - # transformers - # unsloth - # unsloth-zoo - # xformers -oauthlib==3.3.1 - # via requests-oauthlib -opentelemetry-api==1.41.0 - # via - # mlflow-skinny - # mlflow-tracing - # opentelemetry-sdk - # opentelemetry-semantic-conventions -opentelemetry-proto==1.41.0 - # via - # mlflow-skinny - # mlflow-tracing -opentelemetry-sdk==1.41.0 - # via - # mlflow-skinny - # mlflow-tracing -opentelemetry-semantic-conventions==0.62b0 - # via opentelemetry-sdk -packaging==26.1 - # via - # accelerate - # bitsandbytes - # causal-conv1d - # datasets - # deepspeed - # gunicorn - # huggingface-hub - # instructlab-training - # kernels - # mamba-ssm - # matplotlib - # mlflow-skinny - # mlflow-tracing - # peft - # pytest - # skops - # tensorboard - # training-hub - # transformers - # unsloth - # unsloth-zoo - # wheel -pandas==2.3.3 - # via - # datasets - # mlflow - # pyspark-connect - # training-hub -peft==0.18.1 - # via - # th06-cuda-universal-image (pyproject.toml) - # instructlab-training - # training-hub - # unsloth - # unsloth-zoo -pillow==12.3.0 - # via - # -c (workspace) - # diffusers - # matplotlib - # tensorboard - # torchvision - # unsloth-zoo -pluggy==1.6.0 - # via pytest -prettytable==3.17.0 - # via skops -propcache==0.4.1 - # via - # aiohttp - # yarl -protobuf==6.33.6 - # via - # th06-cuda-universal-image (pyproject.toml) - # databricks-sdk - # googleapis-common-protos - # grpcio-status - # mlflow-skinny - # mlflow-tracing - # opentelemetry-proto - # tensorboard - # unsloth - # unsloth-zoo -psutil==7.2.2 - # via - # accelerate - # deepspeed - # peft - # training-hub - # unsloth - # unsloth-zoo -py-cpuinfo==9.0.0 - # via - # th06-cuda-universal-image (pyproject.toml) - # deepspeed - # instructlab-training -py4j==0.10.9.9 - # via pyspark -pyarrow==23.0.1 - # via - # datasets - # mlflow - # pyspark-connect -pyasn1==0.6.4 - # via - # -c (workspace) - # pyasn1-modules -pyasn1-modules==0.4.2 - # via google-auth -pycparser==3.0 - # via cffi -pydantic==2.12.5 - # via - # th06-cuda-universal-image (pyproject.toml) - # deepspeed - # fastapi - # instructlab-training - # kubeflow - # kubeflow-katib-api - # kubeflow-spark-api - # kubeflow-trainer-api - # mlflow-skinny - # mlflow-tracing - # model-registry - # training-hub - # unsloth -pydantic-core==2.41.5 - # via pydantic -pygments==2.20.0 - # via - # pytest - # rich -pyparsing==3.3.2 - # via - # matplotlib - # training-hub -pyspark==4.0.1 - # via pyspark-connect -pyspark-connect==4.0.1 - # via th06-cuda-universal-image (pyproject.toml) -pytest==9.0.3 - # via training-hub -python-dateutil==2.9.0.post0 - # via - # aiobotocore - # botocore - # graphene - # kubernetes - # matplotlib - # model-registry - # pandas -python-dotenv==1.2.2 - # via mlflow-skinny -pytz==2026.1.post1 - # via pandas -pyyaml==6.0.3 - # via - # accelerate - # datasets - # huggingface-hub - # instructlab-training - # kernels - # kubernetes - # mlflow-skinny - # peft - # transformers - # unsloth -regex==2026.4.4 - # via - # diffusers - # training-hub - # transformers - # unsloth-zoo -requests==2.33.1 - # via - # databricks-sdk - # datasets - # diffusers - # docker - # kubernetes - # mlflow-skinny - # requests-oauthlib - # training-hub -requests-oauthlib==2.0.0 - # via kubernetes -rhai-innovation-mini-trainer==0.6.1 - # via - # th06-cuda-universal-image (pyproject.toml) - # training-hub -rich==15.0.0 - # via - # th06-cuda-universal-image (pyproject.toml) - # instructlab-training - # rhai-innovation-mini-trainer - # training-hub - # typer -s3fs==2025.9.0 - # via th06-cuda-universal-image (pyproject.toml) -safetensors==0.8.0 - # via - # th06-cuda-universal-image (pyproject.toml) - # accelerate - # diffusers - # peft - # transformers -scikit-learn==1.8.0 - # via - # mlflow - # skops -scipy==1.17.1 - # via - # mlflow - # scikit-learn - # skops -sentencepiece==0.2.1 - # via - # th06-cuda-universal-image (pyproject.toml) - # unsloth - # unsloth-zoo -setuptools==80.10.2 - # via - # mamba-ssm - # tensorboard - # torch - # training-hub -shellingham==1.5.4 - # via typer -simpleeval==1.0.7 - # via th06-cuda-universal-image (pyproject.toml) -six==1.17.0 - # via - # kubernetes - # python-dateutil -skops==0.13.0 - # via mlflow -smmap==5.0.3 - # via gitdb -sqlalchemy==2.0.49 - # via - # alembic - # mlflow -sqlparse==0.5.5 - # via mlflow-skinny -starlette==1.3.1 - # via - # -c (workspace) - # fastapi -sympy==1.14.0 - # via - # torch - # training-hub -tensorboard==2.20.0 - # via th06-cuda-universal-image (pyproject.toml) -tensorboard-data-server==0.7.2 - # via tensorboard -threadpoolctl==3.6.0 - # via scikit-learn -tokenizers==0.22.2 - # via - # th06-cuda-universal-image (pyproject.toml) - # transformers -tomlkit==0.14.0 - # via kernels -torch==2.10.0 - # via - # th06-cuda-universal-image (pyproject.toml) - # accelerate - # bitsandbytes - # causal-conv1d - # cut-cross-entropy - # deepspeed - # flash-attn - # instructlab-training - # liger-kernel - # mamba-ssm - # peft - # rhai-innovation-mini-trainer - # torchvision - # training-hub - # unsloth - # unsloth-zoo - # xformers -torchao==0.17.0+git - # via unsloth-zoo -torchvision==0.25.0 - # via unsloth -tqdm==4.67.3 - # via - # th06-cuda-universal-image (pyproject.toml) - # datasets - # deepspeed - # huggingface-hub - # peft - # transformers - # unsloth - # unsloth-zoo -training-hub==0.6.0 - # via th06-cuda-universal-image (pyproject.toml) -transformers==5.5.0 - # via - # th06-cuda-universal-image (pyproject.toml) - # instructlab-training - # mamba-ssm - # peft - # rhai-innovation-mini-trainer - # training-hub - # trl - # unsloth - # unsloth-zoo -triton==3.6.0 - # via - # th06-cuda-universal-image (pyproject.toml) - # cut-cross-entropy - # liger-kernel - # mamba-ssm - # torch - # unsloth - # unsloth-zoo -trl==0.24.0 - # via - # th06-cuda-universal-image (pyproject.toml) - # instructlab-training - # training-hub - # unsloth - # unsloth-zoo -typeguard==4.5.1 - # via tyro -typer==0.24.1 - # via - # th06-cuda-universal-image (pyproject.toml) - # huggingface-hub - # rhai-innovation-mini-trainer - # transformers - # unsloth -typing-extensions==4.15.0 - # via - # aiohttp - # aiosignal - # alembic - # anyio - # fastapi - # graphene - # grpcio - # huggingface-hub - # mlflow-skinny - # model-registry - # opentelemetry-api - # opentelemetry-sdk - # opentelemetry-semantic-conventions - # pydantic - # pydantic-core - # sqlalchemy - # starlette - # torch - # typeguard - # typing-inspection - # tyro - # unsloth-zoo -typing-inspection==0.4.2 - # via - # fastapi - # pydantic -tyro==1.0.13 - # via - # unsloth - # unsloth-zoo -tzdata==2026.1 - # via pandas -unsloth==2026.4.5 - # via - # th06-cuda-universal-image (pyproject.toml) - # training-hub -unsloth-zoo==2026.4.7 - # via unsloth -urllib3==2.7.0 - # via - # botocore - # docker - # kubernetes - # requests - # training-hub -uvicorn==0.44.0 - # via mlflow-skinny -wcwidth==0.6.0 - # via prettytable -websocket-client==1.9.0 - # via kubernetes -werkzeug==3.1.8 - # via - # flask - # flask-cors - # tensorboard -wheel==0.46.3 - # via - # instructlab-training - # training-hub - # unsloth - # unsloth-zoo -wrapt==1.17.3 - # via - # aiobotocore - # deprecated -xformers==0.0.35 - # via - # th06-cuda-universal-image (pyproject.toml) - # training-hub - # unsloth -xxhash==3.6.0 - # via - # datasets - # training-hub -yarl==1.23.0 - # via aiohttp -zipp==3.23.1 - # via importlib-metadata diff --git a/images/universal/training/th06-rocm64-torch291-py312/Dockerfile b/images/universal/training/th06-rocm64-torch291-py312/Dockerfile deleted file mode 100644 index 87751447a..000000000 --- a/images/universal/training/th06-rocm64-torch291-py312/Dockerfile +++ /dev/null @@ -1,137 +0,0 @@ -# ROCm Image Dockerfile -# -# FIPS-friendly Features: -# - Build tools are isolated in intermediate stage -# - Final image contains only runtime dependencies -# - Uses pip install (additive) to preserve base image packages -# -# Build Modes: -# - Midstream (default): DOWNSTREAM=false - installs system packages and sets env vars -# - Downstream: DOWNSTREAM=true - skips midstream-only sections (base image has them) - -################################################################################ -# Build Arguments -################################################################################ -ARG BASE_IMAGE=quay.io/opendatahub/odh-workbench-jupyter-minimal-rocm-py312-ubi9:3.4-v1.43 -ARG PYTHON_VERSION=3.12 -ARG DOWNSTREAM=false - -################################################################################ -# Build Stage - Install Python Dependencies -################################################################################ -FROM ${BASE_IMAGE} AS builder - -USER 0 -WORKDIR /tmp/deps - -# Copy requirements files -COPY --chown=1001:0 pyproject.toml requirements.txt ./ - -# Switch to user 1001 for pip installations -USER 1001 -WORKDIR /opt/app-root/src - -# Install dependencies from AIPCC GA index -RUN uv pip install --no-cache-dir \ - --index-strategy=unsafe-best-match \ - --index-url=https://console.redhat.com/api/pypi/public-rhai/rhoai/3.4/rocm6.4-ubi9/simple/ \ - -r /tmp/deps/requirements.txt - -# Fix permissions for OpenShift -ARG PYTHON_VERSION -USER 0 -RUN chmod -R g+w /opt/app-root/lib/python${PYTHON_VERSION}/site-packages \ - && fix-permissions /opt/app-root -P - -# Clean up -RUN rm -rf /tmp/deps - -################################################################################ -# Final Stage - FIPS-friendly Runtime -################################################################################ -FROM ${BASE_IMAGE} AS final - -LABEL name="universal:th06-rocm64-py312-torch291" \ - summary="TH06 ROCm 6.4 Python 3.12 image with PyTorch 2.9.1" \ - description="Universal ROCm image combining minimal Jupyter workbench and runtime ML stack (ROCm 6.4, PyTorch 2.9.1) on UBI9" \ - io.k8s.display-name="TH06 ROCm 6.4 Python 3.12 (Workbench + Runtime)" \ - io.k8s.description="Universal ROCm image: Jupyter workbench by default; runtime when command provided." - -USER 0 -WORKDIR /opt/app-root/src - -################################################################################ -# MIDSTREAM ONLY: Environment variables and system packages -# Controlled by ARG DOWNSTREAM (default: false) -# - DOWNSTREAM=false (midstream): Installs ROCm dev tools, RDMA packages, sets env vars -# - DOWNSTREAM=true: Skips this section (AIPCC base image has everything pre-configured) -################################################################################ -ARG DOWNSTREAM - -# Environment variables for ROCm/HIP -# These are safe to set in both modes - they define standard paths -# In downstream, the base image may override these appropriately -ENV ROCM_HOME=/opt/rocm \ - HIP_PATH=/opt/rocm \ - PATH=/opt/rocm/bin:${PATH} \ - LD_LIBRARY_PATH=/opt/rocm/lib:${LD_LIBRARY_PATH} \ - CPATH=/opt/rocm/include:${CPATH} - -# System packages (MIDSTREAM ONLY - skipped when DOWNSTREAM=true) -# Repo files for ROCm and RDMA packages -COPY rocm.repo mellanox.repo /etc/yum.repos.d/ - -RUN if [ "${DOWNSTREAM}" != "true" ]; then \ - echo "MIDSTREAM BUILD: Installing system packages..." && \ - dnf install -y --setopt=install_weak_deps=False \ - perl \ - mesa-libGL \ - skopeo \ - libibverbs-utils \ - infiniband-diags \ - libibumad \ - librdmacm \ - librdmacm-utils \ - rdma-core \ - rocm-llvm \ - hipcc \ - hip-devel \ - hip-runtime-amd \ - rocm-device-libs \ - protobuf && \ - dnf clean all && rm -rf /var/cache/dnf/* && \ - # Fix /opt/rocm symlink if needed - if [ -L /opt/rocm ] && [ "$(readlink /opt/rocm)" != "/opt/rocm-6.4.3" ]; then \ - rm -f /opt/rocm && ln -sf /opt/rocm-6.4.3 /opt/rocm; \ - fi; \ -else \ - echo "DOWNSTREAM BUILD: Skipping system packages (provided by base image)"; \ -fi -################################################################################ -# END MIDSTREAM ONLY -################################################################################ - -# Copy Python site-packages and CLI entry points from builder stage -# This excludes any build artifacts (FIPS friendly) -ARG PYTHON_VERSION -COPY --from=builder /opt/app-root/lib/python${PYTHON_VERSION}/site-packages /opt/app-root/lib/python${PYTHON_VERSION}/site-packages -COPY --from=builder /opt/app-root/bin /opt/app-root/bin - -# Remove uv from final image (inherited from base image, not needed at runtime) -RUN rm -f /opt/app-root/bin/uv - -# Copy license file -COPY LICENSE.md /licenses/rocm-license.md - -# Copy entrypoint -COPY --chmod=0755 entrypoint-universal.sh /usr/local/bin/entrypoint-universal.sh - -# Fix permissions for OpenShift (final stage) -RUN fix-permissions /opt/app-root -P \ - && chmod -R g+w /opt/app-root/lib/python${PYTHON_VERSION}/site-packages - -USER 1001 -WORKDIR /opt/app-root/src - -ENTRYPOINT ["/usr/local/bin/entrypoint-universal.sh"] -CMD ["start-notebook.sh"] diff --git a/images/universal/training/th06-rocm64-torch291-py312/LICENSE.md b/images/universal/training/th06-rocm64-torch291-py312/LICENSE.md deleted file mode 100644 index 4ba3abcf0..000000000 --- a/images/universal/training/th06-rocm64-torch291-py312/LICENSE.md +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2023 - 2025 Advanced Micro Devices, Inc. All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. \ No newline at end of file diff --git a/images/universal/training/th06-rocm64-torch291-py312/entrypoint-universal.sh b/images/universal/training/th06-rocm64-torch291-py312/entrypoint-universal.sh deleted file mode 100644 index a8c9ac840..000000000 --- a/images/universal/training/th06-rocm64-torch291-py312/entrypoint-universal.sh +++ /dev/null @@ -1,18 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail -# Universal entrypoint for workbench mode -# -# Workbench (OpenShift): NOTEBOOK_ARGS env var is set → starts Jupyter notebook -# Training jobs: Controller overrides entrypoint entirely, this script is not used -# -# Fallback: If no NOTEBOOK_ARGS and a command is provided, run that command - -if [ -n "${NOTEBOOK_ARGS:-}" ]; then - # Workbench mode: NOTEBOOK_ARGS is set (OpenShift injects this) - # Note: NOTEBOOK_ARGS is trusted platform input (set by OpenShift workbench controller) - # and requires word splitting for multiple arguments - exec sh -lc 'exec start-notebook.sh ${NOTEBOOK_ARGS}' -fi - -# Fallback: run provided command (e.g., from CMD or manual override) -exec "${@:-start-notebook.sh}" diff --git a/images/universal/training/th06-rocm64-torch291-py312/mellanox.repo b/images/universal/training/th06-rocm64-torch291-py312/mellanox.repo deleted file mode 100644 index 4cb2b7d7c..000000000 --- a/images/universal/training/th06-rocm64-torch291-py312/mellanox.repo +++ /dev/null @@ -1,7 +0,0 @@ -[mlnx_ofed_24.10-1.1.4.0_base] -name=Mellanox OFED Repository 24.10-1.1.4.0 -baseurl=https://linux.mellanox.com/public/repo/mlnx_ofed/24.10-1.1.4.0/rhel9.5/x86_64 -enabled=1 -gpgcheck=1 -gpgkey=https://www.mellanox.com/downloads/ofed/RPM-GPG-KEY-Mellanox - diff --git a/images/universal/training/th06-rocm64-torch291-py312/pyproject.toml b/images/universal/training/th06-rocm64-torch291-py312/pyproject.toml deleted file mode 100644 index 683062b03..000000000 --- a/images/universal/training/th06-rocm64-torch291-py312/pyproject.toml +++ /dev/null @@ -1,97 +0,0 @@ -# TH06 ROCm Universal Image Python Dependencies -# -# Strict AIPCC-only builds - ensures consistency with downstream hermetic builds. -# If a package is missing from AIPCC, request it be added rather than using fallback indexes. -# -# To regenerate requirements.txt: -# uv pip compile --python-platform=linux --python-version=3.12 \ -# --index-strategy=unsafe-best-match \ -# --index-url=https://console.redhat.com/api/pypi/public-rhai/rhoai/3.4/rocm6.4-ubi9/simple/ \ -# -o requirements.txt pyproject.toml - -[project] -name = "th06-rocm-universal-image" -version = "0.1.0" -requires-python = "==3.12.*" - -dependencies = [ - # =================================================================== - # ML/AI DEPENDENCIES (added on top of base image) - # Base image deps are NOT listed here - pip install is additive - # =================================================================== - - # PyTorch - "torch==2.9.1", - - # Triton (GPU kernel compiler) - "triton==3.5.1", - - # xformers (efficient transformers) - "xformers==0.0.33.post2", - - # ML Training and Inference Libraries - "peft==0.18.1", - "datasets==4.3.0", - "transformers~=5.5.0", - "accelerate==1.12.0", - "trl==0.24.0", - - # Deep Learning Utilities - "einops>=0.8", - "numba>=0.61.2", - "deepspeed>=0.18.4", - "kernels==0.12.1", - "liger-kernel==0.7.0", - - # Tokenization - "sentencepiece>=0.1.99,<0.3", - "tokenizers>=0.22.0", - - # Core Dependencies - "numpy>=2.0.0", - "tqdm>=4.67.1", - "pydantic>=2.11.7", - "protobuf>=3.20.0", - "simpleeval>=0.9.13", - "safetensors==0.8.0", - "py-cpuinfo==9.0.0", - "rich>=13.9.4", - "aiofiles==25.1.0", - "async-timeout==5.0.1", - "tensorboard==2.20.0", - - # Storage - "s3fs==2025.9.0", - "mlflow==3.10.1+rhaiv.3", - - # Training Frameworks - "training_hub[lora]==0.6.0", - "instructlab-training==0.14.2", - "rhai-innovation-mini-trainer==0.6.1", - "unsloth~=2026.4.5", - - # Kubeflow SDK - "kubeflow==0.3.0+rhaiv.2", - "kubeflow_spark_api==2.4.0", - "pyspark_connect==4.0.1", - - # Model Management - "model_registry==0.3.7", - - # Flash Attention (pre-built wheel from AIPCC) - "flash-attn==2.8.3", -] - -[tool.uv] -environments = [ - "sys_platform == 'linux' and implementation_name == 'cpython'", -] -index-strategy = "unsafe-best-match" -index-url = "https://console.redhat.com/api/pypi/public-rhai/rhoai/3.4/rocm6.4-ubi9/simple/" -constraint-dependencies = [ - "aiohttp>=3.14.0", - "gitpython>=3.1.50", - "pillow>=12.3.0", - "starlette>=1.3.1", - "pyasn1>=0.6.4", -] diff --git a/images/universal/training/th06-rocm64-torch291-py312/requirements.txt b/images/universal/training/th06-rocm64-torch291-py312/requirements.txt deleted file mode 100644 index e61bdeba3..000000000 --- a/images/universal/training/th06-rocm64-torch291-py312/requirements.txt +++ /dev/null @@ -1,765 +0,0 @@ ---index-url=https://console.redhat.com/api/pypi/public-rhai/rhoai/3.4/rocm6.4-ubi9/simple/ -# This file was autogenerated by uv via the following command: -# uv pip compile --python-platform=linux --python-version=3.12 --index-strategy=unsafe-best-match -o requirements.txt pyproject.toml -absl-py==2.4.0 - # via tensorboard -accelerate==1.12.0 - # via - # th06-rocm-universal-image (pyproject.toml) - # peft - # training-hub - # trl - # unsloth - # unsloth-zoo -aiobotocore==2.26.0 - # via s3fs -aiofiles==25.1.0 - # via - # th06-rocm-universal-image (pyproject.toml) - # instructlab-training - # rhai-innovation-mini-trainer - # training-hub -aiohappyeyeballs==2.6.1 - # via aiohttp -aiohttp==3.14.1 - # via - # -c (workspace) - # aiobotocore - # aiohttp-retry - # fsspec - # model-registry - # s3fs - # training-hub -aiohttp-retry==2.9.1 - # via model-registry -aioitertools==0.13.0 - # via aiobotocore -aiosignal==1.4.0 - # via aiohttp -alembic==1.18.4 - # via mlflow -annotated-doc==0.0.4 - # via - # fastapi - # typer -annotated-types==0.7.0 - # via pydantic -anyio==4.13.0 - # via - # httpx - # starlette -async-timeout==5.0.1 - # via th06-rocm-universal-image (pyproject.toml) -attr==0.3.2 - # via training-hub -attrs==26.1.0 - # via aiohttp -bitsandbytes==0.49.2 - # via unsloth -blinker==1.9.0 - # via flask -botocore==1.41.5 - # via aiobotocore -cachetools==7.0.5 - # via - # mlflow-skinny - # mlflow-tracing -certifi==2026.2.25 - # via - # httpcore - # httpx - # kubernetes - # requests -cffi==2.0.0 - # via cryptography -charset-normalizer==3.4.7 - # via requests -click==8.3.2 - # via - # flask - # mlflow-skinny - # typer - # uvicorn -cloudpickle==3.1.2 - # via mlflow-skinny -contourpy==1.3.3 - # via matplotlib -cryptography==46.0.7 - # via - # google-auth - # mlflow -cut-cross-entropy==25.1.1 - # via unsloth-zoo -cycler==0.12.1 - # via matplotlib -databricks-sdk==0.102.0 - # via - # mlflow-skinny - # mlflow-tracing -datasets==4.3.0 - # via - # th06-rocm-universal-image (pyproject.toml) - # instructlab-training - # rhai-innovation-mini-trainer - # training-hub - # trl - # unsloth - # unsloth-zoo -deepspeed==0.18.9 - # via th06-rocm-universal-image (pyproject.toml) -deprecated==1.3.1 - # via rhai-innovation-mini-trainer -diffusers==0.38.0 - # via unsloth -dill==0.4.0 - # via - # datasets - # multiprocess -docker==7.1.0 - # via mlflow -docstring-parser==0.18.0 - # via tyro -durationpy==0.10 - # via kubernetes -einops==0.8.2 - # via - # th06-rocm-universal-image (pyproject.toml) - # deepspeed - # flash-attn -fastapi==0.135.3 - # via mlflow-skinny -filelock==3.28.0 - # via - # datasets - # diffusers - # huggingface-hub - # torch - # training-hub - # unsloth-zoo -flash-attn==2.8.3 - # via th06-rocm-universal-image (pyproject.toml) -flask==3.1.3 - # via - # flask-cors - # mlflow -flask-cors==6.0.2 - # via mlflow -fonttools==4.62.1 - # via matplotlib -frozenlist==1.8.0 - # via - # aiohttp - # aiosignal - # training-hub -fsspec==2025.9.0 - # via - # datasets - # huggingface-hub - # s3fs - # torch - # training-hub -gitdb==4.0.12 - # via gitpython -gitpython==3.1.50 - # via - # -c (workspace) - # mlflow-skinny -google-auth==2.49.2 - # via databricks-sdk -googleapis-common-protos==1.74.0 - # via - # grpcio-status - # pyspark-connect -graphene==3.4.3 - # via mlflow -graphql-core==3.2.8 - # via - # graphene - # graphql-relay -graphql-relay==3.2.0 - # via graphene -greenlet==3.4.0 - # via sqlalchemy -grpcio==1.80.0 - # via - # grpcio-status - # pyspark-connect - # tensorboard -grpcio-status==1.80.0 - # via pyspark-connect -gunicorn==25.3.0 - # via mlflow -h11==0.16.0 - # via - # httpcore - # uvicorn -hf-transfer==0.1.9 - # via - # unsloth - # unsloth-zoo -hf-xet==1.4.3 - # via huggingface-hub -hjson==3.1.0 - # via deepspeed -httpcore==1.0.9 - # via httpx -httpx==0.28.1 - # via - # datasets - # diffusers - # huggingface-hub -huey==2.6.0 - # via mlflow -huggingface-hub==1.10.2 - # via - # accelerate - # datasets - # diffusers - # kernels - # peft - # tokenizers - # transformers - # unsloth - # unsloth-zoo -idna==3.17 - # via - # anyio - # httpx - # requests - # yarl -importlib-metadata==8.7.1 - # via - # diffusers - # mlflow-skinny - # opentelemetry-api -iniconfig==2.3.0 - # via pytest -instructlab-training==0.14.2 - # via - # th06-rocm-universal-image (pyproject.toml) - # training-hub -itsdangerous==2.2.0 - # via flask -jinja2==3.1.6 - # via - # flask - # torch - # training-hub -jmespath==1.1.0 - # via - # aiobotocore - # botocore -joblib==1.5.3 - # via scikit-learn -kernels==0.12.1 - # via th06-rocm-universal-image (pyproject.toml) -kiwisolver==1.5.0 - # via matplotlib -kubeflow==0.3.0+rhaiv.2 - # via th06-rocm-universal-image (pyproject.toml) -kubeflow-katib-api==0.19.0 - # via kubeflow -kubeflow-spark-api==2.4.0 - # via th06-rocm-universal-image (pyproject.toml) -kubeflow-trainer-api==2.1.0 - # via kubeflow -kubernetes==35.0.0 - # via kubeflow -liger-kernel==0.7.0 - # via th06-rocm-universal-image (pyproject.toml) -llvmlite==0.47.0 - # via - # numba - # training-hub -mako==1.3.11 - # via alembic -markdown==3.10.2 - # via tensorboard -markdown-it-py==4.0.0 - # via rich -markupsafe==3.0.3 - # via - # flask - # jinja2 - # mako - # werkzeug -matplotlib==3.10.8 - # via - # mlflow - # training-hub -mdurl==0.1.2 - # via markdown-it-py -mlflow==3.10.1+rhaiv.3 - # via th06-rocm-universal-image (pyproject.toml) -mlflow-skinny==3.10.1+rhaiv.3 - # via mlflow -mlflow-tracing==3.10.1+rhaiv.3 - # via mlflow -model-registry==0.3.7 - # via th06-rocm-universal-image (pyproject.toml) -mpmath==1.3.0 - # via - # sympy - # training-hub -msgpack==1.1.2 - # via deepspeed -msgspec==0.21.1 - # via unsloth-zoo -multidict==6.7.1 - # via - # aiobotocore - # aiohttp - # yarl -multiprocess==0.70.16 - # via - # datasets - # training-hub -nest-asyncio==1.6.0 - # via unsloth -nest-asyncio2==1.7.2 - # via model-registry -networkx==3.6.1 - # via - # torch - # training-hub -ninja==1.11.1.4 - # via - # deepspeed - # rhai-innovation-mini-trainer -numba==0.65.0 - # via - # th06-rocm-universal-image (pyproject.toml) - # instructlab-training - # rhai-innovation-mini-trainer - # training-hub -numpy==2.4.4 - # via - # th06-rocm-universal-image (pyproject.toml) - # accelerate - # bitsandbytes - # contourpy - # datasets - # deepspeed - # diffusers - # instructlab-training - # matplotlib - # mlflow - # numba - # pandas - # peft - # pyspark-connect - # rhai-innovation-mini-trainer - # scikit-learn - # scipy - # skops - # tensorboard - # torchvision - # training-hub - # transformers - # unsloth - # unsloth-zoo - # xformers -oauthlib==3.3.1 - # via requests-oauthlib -opentelemetry-api==1.41.0 - # via - # mlflow-skinny - # mlflow-tracing - # opentelemetry-sdk - # opentelemetry-semantic-conventions -opentelemetry-proto==1.41.0 - # via - # mlflow-skinny - # mlflow-tracing -opentelemetry-sdk==1.41.0 - # via - # mlflow-skinny - # mlflow-tracing -opentelemetry-semantic-conventions==0.62b0 - # via opentelemetry-sdk -packaging==26.1 - # via - # accelerate - # bitsandbytes - # datasets - # deepspeed - # gunicorn - # huggingface-hub - # instructlab-training - # kernels - # matplotlib - # mlflow-skinny - # mlflow-tracing - # peft - # pytest - # skops - # tensorboard - # training-hub - # transformers - # unsloth - # unsloth-zoo - # wheel -pandas==2.3.3 - # via - # datasets - # mlflow - # pyspark-connect - # training-hub -peft==0.18.1 - # via - # th06-rocm-universal-image (pyproject.toml) - # instructlab-training - # training-hub - # unsloth - # unsloth-zoo -pillow==12.3.0 - # via - # -c (workspace) - # diffusers - # matplotlib - # tensorboard - # torchvision - # unsloth-zoo -pluggy==1.6.0 - # via pytest -prettytable==3.17.0 - # via skops -propcache==0.4.1 - # via - # aiohttp - # yarl -protobuf==6.33.6 - # via - # th06-rocm-universal-image (pyproject.toml) - # databricks-sdk - # googleapis-common-protos - # grpcio-status - # mlflow-skinny - # mlflow-tracing - # opentelemetry-proto - # tensorboard - # unsloth - # unsloth-zoo -psutil==7.2.2 - # via - # accelerate - # deepspeed - # peft - # training-hub - # unsloth - # unsloth-zoo -py-cpuinfo==9.0.0 - # via - # th06-rocm-universal-image (pyproject.toml) - # deepspeed - # instructlab-training -py4j==0.10.9.9 - # via pyspark -pyarrow==23.0.1 - # via - # datasets - # mlflow - # pyspark-connect -pyasn1==0.6.4 - # via - # -c (workspace) - # pyasn1-modules -pyasn1-modules==0.4.2 - # via google-auth -pycparser==3.0 - # via cffi -pydantic==2.12.5 - # via - # th06-rocm-universal-image (pyproject.toml) - # deepspeed - # fastapi - # instructlab-training - # kubeflow - # kubeflow-katib-api - # kubeflow-spark-api - # kubeflow-trainer-api - # mlflow-skinny - # mlflow-tracing - # model-registry - # training-hub - # unsloth -pydantic-core==2.41.5 - # via pydantic -pygments==2.20.0 - # via - # pytest - # rich -pyparsing==3.3.2 - # via - # matplotlib - # training-hub -pyspark==4.0.1 - # via pyspark-connect -pyspark-connect==4.0.1 - # via th06-rocm-universal-image (pyproject.toml) -pytest==9.0.3 - # via training-hub -python-dateutil==2.9.0.post0 - # via - # aiobotocore - # botocore - # graphene - # kubernetes - # matplotlib - # model-registry - # pandas -python-dotenv==1.2.2 - # via mlflow-skinny -pytz==2026.1.post1 - # via pandas -pyyaml==6.0.3 - # via - # accelerate - # datasets - # huggingface-hub - # instructlab-training - # kernels - # kubernetes - # mlflow-skinny - # peft - # transformers - # unsloth -regex==2026.4.4 - # via - # diffusers - # training-hub - # transformers - # unsloth-zoo -requests==2.33.1 - # via - # databricks-sdk - # datasets - # diffusers - # docker - # kubernetes - # mlflow-skinny - # requests-oauthlib - # training-hub -requests-oauthlib==2.0.0 - # via kubernetes -rhai-innovation-mini-trainer==0.6.1 - # via - # th06-rocm-universal-image (pyproject.toml) - # training-hub -rich==15.0.0 - # via - # th06-rocm-universal-image (pyproject.toml) - # instructlab-training - # rhai-innovation-mini-trainer - # training-hub - # typer -s3fs==2025.9.0 - # via th06-rocm-universal-image (pyproject.toml) -safetensors==0.8.0 - # via - # th06-rocm-universal-image (pyproject.toml) - # accelerate - # diffusers - # peft - # transformers -scikit-learn==1.8.0 - # via - # mlflow - # skops -scipy==1.17.1 - # via - # mlflow - # scikit-learn - # skops -sentencepiece==0.2.1 - # via - # th06-rocm-universal-image (pyproject.toml) - # unsloth - # unsloth-zoo -setuptools==80.10.2 - # via - # tensorboard - # torch - # training-hub -shellingham==1.5.4 - # via typer -simpleeval==1.0.7 - # via th06-rocm-universal-image (pyproject.toml) -six==1.17.0 - # via - # kubernetes - # python-dateutil -skops==0.13.0 - # via mlflow -smmap==5.0.3 - # via gitdb -sqlalchemy==2.0.49 - # via - # alembic - # mlflow -sqlparse==0.5.5 - # via mlflow-skinny -starlette==1.3.1 - # via - # -c (workspace) - # fastapi -sympy==1.14.0 - # via - # torch - # training-hub -tensorboard==2.20.0 - # via th06-rocm-universal-image (pyproject.toml) -tensorboard-data-server==0.7.2 - # via tensorboard -threadpoolctl==3.6.0 - # via scikit-learn -tokenizers==0.22.2 - # via - # th06-rocm-universal-image (pyproject.toml) - # transformers -torch==2.9.1 - # via - # th06-rocm-universal-image (pyproject.toml) - # accelerate - # bitsandbytes - # cut-cross-entropy - # deepspeed - # flash-attn - # instructlab-training - # peft - # rhai-innovation-mini-trainer - # torchvision - # training-hub - # unsloth - # unsloth-zoo - # xformers -torchao==0.17.0+git - # via unsloth-zoo -torchvision==0.24.1 - # via unsloth -tqdm==4.67.3 - # via - # th06-rocm-universal-image (pyproject.toml) - # datasets - # deepspeed - # huggingface-hub - # peft - # transformers - # unsloth - # unsloth-zoo -training-hub==0.6.0 - # via th06-rocm-universal-image (pyproject.toml) -transformers==5.5.0 - # via - # th06-rocm-universal-image (pyproject.toml) - # instructlab-training - # peft - # rhai-innovation-mini-trainer - # training-hub - # trl - # unsloth - # unsloth-zoo -triton==3.5.1 - # via - # th06-rocm-universal-image (pyproject.toml) - # cut-cross-entropy - # liger-kernel - # torch - # unsloth - # unsloth-zoo -trl==0.24.0 - # via - # th06-rocm-universal-image (pyproject.toml) - # instructlab-training - # training-hub - # unsloth - # unsloth-zoo -typeguard==4.5.1 - # via tyro -typer==0.24.1 - # via - # huggingface-hub - # rhai-innovation-mini-trainer - # transformers - # unsloth -typing-extensions==4.15.0 - # via - # aiohttp - # aiosignal - # alembic - # anyio - # fastapi - # graphene - # grpcio - # huggingface-hub - # mlflow-skinny - # model-registry - # opentelemetry-api - # opentelemetry-sdk - # opentelemetry-semantic-conventions - # pydantic - # pydantic-core - # sqlalchemy - # starlette - # torch - # typeguard - # typing-inspection - # tyro - # unsloth-zoo -typing-inspection==0.4.2 - # via - # fastapi - # pydantic -tyro==1.0.13 - # via - # unsloth - # unsloth-zoo -tzdata==2026.1 - # via pandas -unsloth==2026.4.5 - # via - # th06-rocm-universal-image (pyproject.toml) - # training-hub -unsloth-zoo==2026.4.7 - # via unsloth -urllib3==2.7.0 - # via - # botocore - # docker - # kubernetes - # requests - # training-hub -uvicorn==0.44.0 - # via mlflow-skinny -wcwidth==0.6.0 - # via prettytable -websocket-client==1.9.0 - # via kubernetes -werkzeug==3.1.8 - # via - # flask - # flask-cors - # tensorboard -wheel==0.46.3 - # via - # instructlab-training - # training-hub - # unsloth - # unsloth-zoo -wrapt==1.17.3 - # via - # aiobotocore - # deprecated -xformers==0.0.33.post2 - # via - # th06-rocm-universal-image (pyproject.toml) - # training-hub - # unsloth -xxhash==3.6.0 - # via - # datasets - # training-hub -yarl==1.23.0 - # via aiohttp -zipp==3.23.1 - # via importlib-metadata diff --git a/images/universal/training/th06-rocm64-torch291-py312/rocm.repo b/images/universal/training/th06-rocm64-torch291-py312/rocm.repo deleted file mode 100644 index 35bc03212..000000000 --- a/images/universal/training/th06-rocm64-torch291-py312/rocm.repo +++ /dev/null @@ -1,16 +0,0 @@ -[amdgpu] -name=amdgpu -baseurl=https://repo.radeon.com/amdgpu/6.4.3/rhel/9.4/main/x86_64/ -enabled=1 -priority=50 -gpgcheck=1 -gpgkey=https://repo.radeon.com/rocm/rocm.gpg.key - -[ROCm-6.4.3] -name=ROCm6.4.3 -baseurl=https://repo.radeon.com/rocm/rhel9/6.4.3/main -enabled=1 -priority=50 -gpgcheck=1 -gpgkey=https://repo.radeon.com/rocm/rocm.gpg.key -