Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
43 commits
Select commit Hold shift + click to select a range
67cd68a
fix: replace yaml.load with yaml.safe_load to prevent deserialization…
dholt Apr 27, 2026
742f923
Merge pull request #1343 from dholt/fix/psirt-yaml-deserialization
dholt Apr 27, 2026
e9bcfa4
chore(release): bump component versions for 26.05
dholt May 14, 2026
252dd33
docs: update Kubernetes inventory group names
dholt May 14, 2026
ff1d89d
chore(maas): update role dependency for Ansible 10
dholt May 14, 2026
ed9cda3
fix(nvidia): support Ubuntu open kernel modules
dholt May 15, 2026
56be783
fix(slurm): make controller setup rerunnable
dholt May 15, 2026
a5c9a97
fix(k8s): use mapping vars for NFS role include
dholt May 15, 2026
908555e
fix(k8s): update network operator role for current chart
dholt May 15, 2026
e6ae743
fix(k8s): run Helm installer with bash
dholt May 16, 2026
f091348
Fix MAAS requirements and document staged upgrades
dholt May 19, 2026
440dd0d
Merge pull request #1344 from NVIDIA/dholt/release-26.05-version-bumps
michael-balint May 26, 2026
8d47978
release: 26.05 notes and README tag
dholt May 26, 2026
8a5a1bc
Merge pull request #1345 from NVIDIA/dholt/release-26.05-notes
michael-balint May 26, 2026
e6bf1f6
feat(dgx): update DGX software stack role
dholt May 27, 2026
c8c74ed
fix(dgx): harden EL8 driver install
dholt May 27, 2026
03e19e9
Merge pull request #1346 from NVIDIA/dholt/dgx-stack-rhel8
dholt May 27, 2026
40d707f
feat: support Ubuntu 24.04 container toolkit
dholt May 28, 2026
a6242f6
Refresh DCGM exporter
dholt May 28, 2026
d4632fe
Refresh CUDA example images
dholt May 28, 2026
11e9b59
Merge pull request #1349 from NVIDIA/dholt/cuda-example-refresh
michael-balint May 28, 2026
e6553c4
Merge pull request #1348 from NVIDIA/dholt/dcgm-exporter-refresh
michael-balint May 28, 2026
975337f
Merge pull request #1347 from NVIDIA/dholt/ubuntu-24-doc-refresh
dholt May 28, 2026
617e72b
feat: support Red Hat container toolkit path
dholt May 28, 2026
ad241ba
Retire legacy PXE provisioning paths
dholt May 28, 2026
0df3a98
docs: clarify legacy CI and virtual lab status
dholt May 28, 2026
226aa8d
Merge pull request #1351 from NVIDIA/dholt/maas-provisioning-cleanup
michael-balint May 28, 2026
1e77de7
Merge pull request #1353 from NVIDIA/dholt/legacy-ci-doc-refresh
michael-balint May 28, 2026
b3f1510
Merge pull request #1350 from NVIDIA/dholt/container-toolkit-rhel
michael-balint May 28, 2026
d59fc62
Refresh Container Toolkit airgap guidance
dholt May 28, 2026
ab5f1e9
Merge pull request #1352 from NVIDIA/dholt/container-toolkit-doc-cleanup
michael-balint Jun 2, 2026
972c7a8
Clarify legacy OS support matrix
dholt May 28, 2026
8858399
Merge pull request #1354 from NVIDIA/dholt/os-matrix-doc-cleanup
michael-balint Jun 2, 2026
9db02ec
Refresh RAPIDS and RoCE examples
dholt May 28, 2026
ce10816
Refresh workload and registry examples
dholt May 29, 2026
2e08909
fix: handle non-dict parsed JSON in firmware version manifest parser
dholt Jul 1, 2026
01b332f
chore(release): bump component versions for 26.07
dholt Jul 2, 2026
3dfe40e
fix: derive DEEPOPS_VERSION for script debug output
dholt Jul 2, 2026
7821567
Merge pull request #1355 from NVIDIA/dholt/fix-parse-manifest-typeerr…
michael-balint Jul 2, 2026
9533349
Merge pull request #1356 from NVIDIA/dholt/example-roce-refresh
michael-balint Jul 2, 2026
fa1e345
Merge pull request #1357 from NVIDIA/dholt/release-26.07-version-bumps
michael-balint Jul 2, 2026
e806b5c
Clarify Kubernetes storage helper ownership
dholt May 29, 2026
78908da
Merge pull request #1358 from NVIDIA/dholt/k8s-storage-helper-refresh
michael-balint Jul 2, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 17 additions & 12 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,29 +28,34 @@ The DeepOps project encapsulates best practices in the deployment of GPU server
- An existing cluster that needs a resource manager / batch scheduler, where DeepOps is used to install Slurm or Kubernetes
- A single machine where no scheduler is desired, only NVIDIA drivers, Docker, and the NVIDIA Container Runtime

Latest release: [DeepOps 23.08 Release](https://github.com/NVIDIA/deepops/releases/tag/23.08)
Latest release: [DeepOps 26.05 Release](https://github.com/NVIDIA/deepops/releases/tag/26.05)

It is recommended to use the latest release branch for stable code (linked above). All development takes place on the master branch, which is generally [functional](docs/deepops/testing.md) but may change significantly between releases.

## Deployment Requirements

### Provisioning System

The provisioning system is used to orchestrate the running of all playbooks and one will be needed when instantiating Kubernetes or Slurm clusters. Supported operating systems which are tested and supported include:
The provisioning system is used to orchestrate the running of all playbooks and one will be needed when instantiating Kubernetes or Slurm clusters. Current release validation focuses on:

- NVIDIA DGX OS 4, 5
- Ubuntu 18.04 LTS, 20.04, 22.04 LTS
- CentOS 7, 8
- Ubuntu 22.04 LTS and 24.04 LTS
- NVIDIA DGX OS 6 and 7

DeepOps still retains legacy/community-maintained paths for older environments such as DGX OS 4/5, Ubuntu 18.04/20.04, and CentOS 7/8. Treat those paths as compatibility references unless your site validates them for the release you deploy.

### Cluster System

The cluster nodes will follow the requirements described by Slurm or Kubernetes. You may also use a cluster node as a provisioning system but it is not required.
The cluster nodes will follow the requirements described by Slurm or Kubernetes. You may also use a cluster node as a provisioning system but it is not required. Current release validation focuses on:

- Ubuntu 22.04 LTS and 24.04 LTS for generic Kubernetes and Slurm deployments
- NVIDIA DGX OS 6 and 7 for DGX systems
- Red Hat Enterprise Linux / Rocky Linux 8 and 9 for DGX platform software installation through the `nvidia-dgx` role

- NVIDIA DGX OS 4, 5
- Ubuntu 18.04 LTS, 20.04, 22.04 LTS
- CentOS 7, 8
DeepOps still retains legacy/community-maintained paths for older environments such as DGX OS 4/5, Ubuntu 18.04/20.04, CentOS 7/8, and the historical DGX EL7 stack. Treat those paths as compatibility references unless your site validates them for the release you deploy.

You may also install a supported operating system on all servers via a 3rd-party solution (i.e. [MAAS](https://maas.io/), [Foreman](https://www.theforeman.org/)) or utilize the provided [OS install container](docs/pxe/minimal-pxe-container.md).
You may also install a supported operating system on all servers via a 3rd-party solution such as [MAAS](https://maas.io/) or [Foreman](https://www.theforeman.org/), or via an existing site-standard automated installer.
For new Ubuntu 24.04 or DGX OS 7 deployments, prefer Ubuntu autoinstall/cloud-init or MAAS and then apply DeepOps roles after the OS is present.
For DGX platform software installation on top of vanilla Ubuntu or Red Hat family operating systems, see the [DGX software stack role guide](docs/deepops/dgx-software-stack.md).

### Kubernetes

Expand All @@ -77,11 +82,11 @@ For more information on Slurm in general, refer to the [official Slurm docs](htt
[NVIDIA Bright Cluster Manager](https://www.brightcomputing.com/brightclustermanager) is recommended as an enterprise solution which enables managing multiple workload managers within a single cluster, including Kubernetes, Slurm, Univa Grid Engine, and PBS Pro.

**DeepOps does not test or support a configuration where nodes have a heterogenous OS running.**
Additional modifications are needed if you plan to use unsupported operating systems such as RHEL.
The `nvidia-dgx` role can install NVIDIA DGX platform software on supported DGX systems running Red Hat Enterprise Linux / Rocky Linux 8 or 9; broader Kubernetes or Slurm cluster support on RHEL still requires site-specific validation.

### Virtual

To try DeepOps before deploying it on an actual cluster, a virtualized version of DeepOps may be deployed on a single node using Vagrant. This can be used for testing, adding new features, or configuring DeepOps to meet deployment-specific needs.
To try DeepOps before deploying it on an actual cluster, a virtualized version of DeepOps may be deployed on a single node using Vagrant. This path is useful for learning and local experimentation, but it is a legacy/community-supported lab path and should not be treated as release-grade validation for current GPU clusters.

Consult the [Virtual DeepOps Deployment Guide](virtual/README.md) to build a GPU-enabled virtual cluster with DeepOps.

Expand Down
4 changes: 4 additions & 0 deletions config.example/env.sh
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,7 @@
# See deepops/scripts/common.sh for implementation details

DEEPOPS_EXAMPLE_VAR=""

# DeepOps version reported in script debug output.
# Defaults to the checkout's git tag description; uncomment to override.
# DEEPOPS_VERSION=""
89 changes: 54 additions & 35 deletions config.example/files/k8s-cluster/dcgm-custom-metrics.csv
Original file line number Diff line number Diff line change
@@ -1,79 +1,98 @@
# Format,,
# If line starts with a '#' it is considered a comment,,
# Format
# If line starts with a '#' it is considered a comment
# DCGM FIELD, Prometheus metric type, help message

# Clocks,,
# Clocks
DCGM_FI_DEV_SM_CLOCK, gauge, SM clock frequency (in MHz).
DCGM_FI_DEV_MEM_CLOCK, gauge, Memory clock frequency (in MHz).

# Temperature,,
# Temperature
DCGM_FI_DEV_MEMORY_TEMP, gauge, Memory temperature (in C).
DCGM_FI_DEV_GPU_TEMP, gauge, GPU temperature (in C).

# Power,,
# Power
DCGM_FI_DEV_POWER_USAGE, gauge, Power draw (in W).
DCGM_FI_DEV_TOTAL_ENERGY_CONSUMPTION, counter, Total energy consumption since boot (in mJ).

# PCIE,,
DCGM_FI_DEV_PCIE_TX_THROUGHPUT, counter, Total number of bytes transmitted through PCIe TX (in KB) via NVML.
DCGM_FI_DEV_PCIE_RX_THROUGHPUT, counter, Total number of bytes received through PCIe RX (in KB) via NVML.
# PCIE
# DCGM_FI_PROF_PCIE_TX_BYTES, counter, Total number of bytes transmitted through PCIe TX via NVML.
# DCGM_FI_PROF_PCIE_RX_BYTES, counter, Total number of bytes received through PCIe RX via NVML.
DCGM_FI_DEV_PCIE_REPLAY_COUNTER, counter, Total number of PCIe retries.

# Utilization (the sample period varies depending on the product),,
# Utilization (the sample period varies depending on the product)
DCGM_FI_DEV_GPU_UTIL, gauge, GPU utilization (in %).
DCGM_FI_DEV_MEM_COPY_UTIL, gauge, Memory utilization (in %).
DCGM_FI_DEV_ENC_UTIL, gauge, Encoder utilization (in %).
DCGM_FI_DEV_DEC_UTIL , gauge, Decoder utilization (in %).

# Errors and violations,,
DCGM_FI_DEV_XID_ERRORS, gauge, Value of the last XID error encountered.
# DCGM_FI_DEV_POWER_VIOLATION, counter, Throttling duration due to power constraints (in us).
# DCGM_FI_DEV_THERMAL_VIOLATION, counter, Throttling duration due to thermal constraints (in us).
# DCGM_FI_DEV_SYNC_BOOST_VIOLATION, counter, Throttling duration due to sync-boost constraints (in us).
# DCGM_FI_DEV_BOARD_LIMIT_VIOLATION, counter, Throttling duration due to board limit constraints (in us).
# DCGM_FI_DEV_LOW_UTIL_VIOLATION, counter, Throttling duration due to low utilization (in us).
# DCGM_FI_DEV_RELIABILITY_VIOLATION, counter, Throttling duration due to reliability constraints (in us).
# Errors and violations
DCGM_FI_DEV_XID_ERRORS, gauge, Value of the last XID error encountered.
# DCGM_FI_DEV_POWER_VIOLATION, counter, Throttling duration due to power constraints (in ns).
# DCGM_FI_DEV_THERMAL_VIOLATION, counter, Throttling duration due to thermal constraints (in ns).
# DCGM_FI_DEV_SYNC_BOOST_VIOLATION, counter, Throttling duration due to sync-boost constraints (in ns).
# DCGM_FI_DEV_BOARD_LIMIT_VIOLATION, counter, Throttling duration due to board limit constraints (in ns).
# DCGM_FI_DEV_LOW_UTIL_VIOLATION, counter, Throttling duration due to low utilization (in ns).
# DCGM_FI_DEV_RELIABILITY_VIOLATION, counter, Throttling duration due to reliability constraints (in ns).

# Memory usage,,
# DCGM Exporter fields

# DCGM_EXP_CLOCK_EVENTS_COUNT, counter, reported clock events
# DCGM_EXP_XID_ERRORS_COUNT, counter, reported XIDs during last window
# DCGM_EXP_GPU_HEALTH_STATUS, counter, DCGM reported health status
# DCGM_EXP_P2P_STATUS, counter, P2P NvLink status

# Memory usage
DCGM_FI_DEV_FB_FREE, gauge, Framebuffer memory free (in MiB).
DCGM_FI_DEV_FB_USED, gauge, Framebuffer memory used (in MiB).
DCGM_FI_DEV_FB_RESERVED, gauge, Framebuffer memory reserved (in MiB).

# ECC,,
# ECC
# DCGM_FI_DEV_ECC_SBE_VOL_TOTAL, counter, Total number of single-bit volatile ECC errors.
# DCGM_FI_DEV_ECC_DBE_VOL_TOTAL, counter, Total number of double-bit volatile ECC errors.
# DCGM_FI_DEV_ECC_SBE_AGG_TOTAL, counter, Total number of single-bit persistent ECC errors.
# DCGM_FI_DEV_ECC_DBE_AGG_TOTAL, counter, Total number of double-bit persistent ECC errors.

# Retired pages,,
# Retired pages
# DCGM_FI_DEV_RETIRED_SBE, counter, Total number of retired pages due to single-bit errors.
# DCGM_FI_DEV_RETIRED_DBE, counter, Total number of retired pages due to double-bit errors.
# DCGM_FI_DEV_RETIRED_PENDING, counter, Total number of pages pending retirement.

# NVLink,,
# NVLink
# DCGM_FI_DEV_NVLINK_CRC_FLIT_ERROR_COUNT_TOTAL, counter, Total number of NVLink flow-control CRC errors.
# DCGM_FI_DEV_NVLINK_CRC_DATA_ERROR_COUNT_TOTAL, counter, Total number of NVLink data CRC errors.
# DCGM_FI_DEV_NVLINK_REPLAY_ERROR_COUNT_TOTAL, counter, Total number of NVLink retries.
# DCGM_FI_DEV_NVLINK_RECOVERY_ERROR_COUNT_TOTAL, counter, Total number of NVLink recovery errors.
DCGM_FI_DEV_NVLINK_BANDWIDTH_TOTAL, counter, Total number of NVLink bandwidth counters for all lanes.
# DCGM_FI_DEV_NVLINK_BANDWIDTH_L0, counter, The number of bytes of active NVLink rx or tx data including both header and payload.

# VGPU License status,,
# DCGM_FI_DEV_VGPU_LICENSE_STATUS, gauge, vGPU License status
# VGPU License status
DCGM_FI_DEV_VGPU_LICENSE_STATUS, gauge, vGPU License status

# Remapped rows,,
# Remapped rows
DCGM_FI_DEV_UNCORRECTABLE_REMAPPED_ROWS, counter, Number of remapped rows for uncorrectable errors
DCGM_FI_DEV_CORRECTABLE_REMAPPED_ROWS, counter, Number of remapped rows for correctable errors
DCGM_FI_DEV_ROW_REMAP_FAILURE, gauge, Whether remapping of rows has failed

# DCP metrics,,
DCGM_FI_PROF_GR_ENGINE_ACTIVE, gauge, Ratio of time the graphics engine is active (in %).
DCGM_FI_PROF_SM_ACTIVE, gauge, The ratio of cycles an SM has at least 1 warp assigned (in %).
DCGM_FI_PROF_SM_OCCUPANCY, gauge, The ratio of number of warps resident on an SM (in %).
DCGM_FI_PROF_PIPE_TENSOR_ACTIVE, gauge, Ratio of cycles the tensor (HMMA) pipe is active (in %).
DCGM_FI_PROF_DRAM_ACTIVE, gauge, Ratio of cycles the device memory interface is active sending or receiving data (in %).
DCGM_FI_PROF_PIPE_FP64_ACTIVE, gauge, Ratio of cycles the fp64 pipes are active (in %).
DCGM_FI_PROF_PIPE_FP32_ACTIVE, gauge, Ratio of cycles the fp32 pipes are active (in %).
DCGM_FI_PROF_PIPE_FP16_ACTIVE, gauge, Ratio of cycles the fp16 pipes are active (in %).
DCGM_FI_PROF_PCIE_TX_BYTES, counter, The number of bytes of active pcie tx data including both header and payload.
DCGM_FI_PROF_PCIE_RX_BYTES, counter, The number of bytes of active pcie rx data including both header and payload.
# Static configuration information. These appear as labels on the other metrics
DCGM_FI_DRIVER_VERSION, label, Driver Version
# DCGM_FI_NVML_VERSION, label, NVML Version
# DCGM_FI_DEV_BRAND, label, Device Brand
# DCGM_FI_DEV_SERIAL, label, Device Serial Number
# DCGM_FI_DEV_OEM_INFOROM_VER, label, OEM inforom version
# DCGM_FI_DEV_ECC_INFOROM_VER, label, ECC inforom version
# DCGM_FI_DEV_POWER_INFOROM_VER, label, Power management object inforom version
# DCGM_FI_DEV_INFOROM_IMAGE_VER, label, Inforom image version
# DCGM_FI_DEV_VBIOS_VERSION, label, VBIOS version of the device

# Datacenter Profiling (DCP) metrics
# NOTE: supported on Nvidia datacenter Volta GPUs and newer
DCGM_FI_PROF_GR_ENGINE_ACTIVE, gauge, Ratio of time the graphics engine is active.
# DCGM_FI_PROF_SM_ACTIVE, gauge, The ratio of cycles an SM has at least 1 warp assigned.
# DCGM_FI_PROF_SM_OCCUPANCY, gauge, The ratio of number of warps resident on an SM.
DCGM_FI_PROF_PIPE_TENSOR_ACTIVE, gauge, Ratio of cycles the tensor (HMMA) pipe is active.
DCGM_FI_PROF_DRAM_ACTIVE, gauge, Ratio of cycles the device memory interface is active sending or receiving data.
# DCGM_FI_PROF_PIPE_FP64_ACTIVE, gauge, Ratio of cycles the fp64 pipes are active.
# DCGM_FI_PROF_PIPE_FP32_ACTIVE, gauge, Ratio of cycles the fp32 pipes are active.
# DCGM_FI_PROF_PIPE_FP16_ACTIVE, gauge, Ratio of cycles the fp16 pipes are active.
DCGM_FI_PROF_PCIE_TX_BYTES, gauge, The rate of data transmitted over the PCIe bus - including both protocol headers and data payloads - in bytes per second.
DCGM_FI_PROF_PCIE_RX_BYTES, gauge, The rate of data received over the PCIe bus - including both protocol headers and data payloads - in bytes per second.
22 changes: 17 additions & 5 deletions config.example/group_vars/all.yml
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,10 @@ gpu_clock_lock: "1507,1507"

# Debugging var: force install NVIDIA driver even if GPU not detected
nvidia_driver_force_install: false
# Default NVIDIA driver branch for generic host driver installs.
nvidia_driver_branch: "580"
# Set true on Ubuntu systems that require NVIDIA open kernel modules.
nvidia_driver_ubuntu_use_open_kernel_modules: false


################################################################################
Expand Down Expand Up @@ -249,15 +253,24 @@ maas_adminusers:
maas_dns_domain: 'deepops.local'
maas_region_controller: '192.168.1.1'
maas_region_controller_url: 'http://{{ maas_region_controller }}:5240/MAAS'
maas_repo: 'ppa:maas/2.8'
# MAAS 3.7 is the current Ubuntu 24.04 line. Keep the 3.5 PPA when the MAAS
# controller itself still runs Ubuntu 22.04.
maas_repo: "{{ 'ppa:maas/3.7' if ansible_distribution_version is version('24.04', '>=') else 'ppa:maas/3.5' }}"

# Defines if maas user should generate ssh keys
# Usable for remote KVM/libvirt power actions
maas_setup_user: false

maas_single_node_install: true

maas_kvm: false
maas_kvm_management: false

# Avoid installing python-libmaas via pip: it shadows the packaged MAAS CLI
# with /usr/local/bin/maas, which breaks DeepOps' MAAS operational workflow.
maas_python_reqs:
- jinja2
- oauth
- pyyaml

################################################################################
# NVIDIA Datacenter GPU Manager #
Expand Down Expand Up @@ -303,6 +316,5 @@ standalone_container_registry_port: "5000"
# Configuration for NGC-Ready playbook #
################################################################################
ngc_ready_cuda_container: "nvcr.io/nvidia/cuda:12.4.1-base-ubuntu22.04"
ngc_ready_pytorch: "nvcr.io/nvidia/pytorch:24.04-py3"
ngc_ready_tensorflow: "nvcr.io/nvidia/tensorflow:24.04-tf2-py3"

ngc_ready_pytorch: "nvcr.io/nvidia/pytorch:26.04-py3"
ngc_ready_tensorflow: "nvcr.io/nvidia/tensorflow:25.02-tf2-py3"
4 changes: 3 additions & 1 deletion config.example/group_vars/k8s_cluster.yml
Original file line number Diff line number Diff line change
Expand Up @@ -46,8 +46,10 @@ dashboard_metrics_scraper_repo: "kubernetesui/metrics-scraper"
# Ensure hosts file generation only runs across k8s cluster
hosts_add_ansible_managed_hosts_groups: ["k8s_cluster"]

# NFS Client Provisioner
# NFS Client Provisioner
# Playbook: nfs-client-provisioner.yml
# This convenience default creates a non-HA NFS export on the first control-plane
# node. For production clusters, point this at site-owned storage or disable it.
k8s_nfs_client_provisioner: true
k8s_deploy_nfs_server: true
k8s_nfs_mkdir: true # Set to false if an export dir is already configured with proper permissions
Expand Down
Loading
Loading