ROCm Deployment Health Check (RDHC)
Overview
RDHC is a comprehensive health check tool for ROCm deployments. It validates GPU presence, driver status, kernel parameters, library dependencies, and tests installed ROCm components.
Features
- Cross-Platform Support: Works on Ubuntu, RHEL, and SLES distributions
- Comprehensive Testing: GPU validation, driver checks, library dependencies, kernel parameters, and component-specific tests
- Dynamic Component Detection: Automatically identifies installed ROCm components
- Flexible Reporting: Pretty table output and JSON export options
- Configurable Verbosity: Support for verbose, normal, and silent modes
- Optional check control: Skip cluster-only or environment-limited tests; relax kernel parameter strictness (see [Optional CLI behavior])
Test Categories
Default Tests (Quick Mode)
- GPU Presence - Detects AMD GPUs in the system
- AMDGPU Driver - Validates driver installation and initialization
- Kernel Parameters - Checks ROCm-related kernel settings
- rocminfo - Validates ROCm information utility
- rocm_agent_enumerator - Checks GPU agent enumeration
- amd-smi - Tests AMD System Management Interface
- Library Dependencies - Validates ROCm library dependencies
- Environment Variables - Checks ROCm-related environment settings
- Multinode Cluster Readiness - Validates network and MPI configuration
- Atomic Operations - Checks if atomic operations are enabled on GPUs
Tests 9 and 10 can be skipped when not relevant (single-node systems, containers without full PCI/RDMA). Kernel parameter checks (3) can optionally be reported as warnings only instead of failures.
Component Tests (--all mode)
Tests installed ROCm components by compiling and executing example programs:
- HIP (hipcc, hip-runtime-amd)
- Math Libraries (hipBLAS, hipFFT, rocBLAS, rocFFT, etc.)
- Primitives (hipCUB, rocPRIM, rocThrust)
- Solvers (hipSOLVER, rocSOLVER, rocSPARSE)
- Deep Learning (MIOpen)
- Applications (from rocm-examples repository)
Output
The tool provides three types of output:
- Console Output - Real-time test progress and results
- Summary Tables - Formatted tables showing:
- General system information
- GPU device information
- Firmware version information
- Test results with status and details
- JSON Export - Detailed results in JSON format for further analysis
Install dependency pip packages
sudo pip3 install -r requirements.txt
Usage
./rdhc.py -h
usage: ./rdhc.py [options]
ROCm Deployment Health Check Tool
optional arguments:
-h, --help show this help message and exit
--quick Run quick tests only (default)
--all Default tests + Compile and executes simple program for each component.
-v, --verbose Enable verbose output
-s, --silent Silent mode (errors only)
-j FILE, --json FILE Export results to JSON file
-d DIR, --dir DIR Directory path for temporary files (must not exist; created with mode 0700)
--cleanup Remove auto-generated temp directory after tests complete
--rocm-install-prefix DIR ROCm installation prefix. If set, this path is used; otherwise `ROCM_PATH` env or `/opt/rocm` is used.
--skip-multinode-readiness Skip multinode cluster readiness test (e.g. single-node or no RDMA stack)
--skip-atomic-operations Skip PCIe atomic operations test (e.g. containers or limited lspci)
--skip-optional-cluster-checks Same as `--skip-multinode-readiness` and `--skip-atomic-operations` together
--kernel-params-warnings-only Treat kernel parameter check failures as warnings instead of errors
Usage examples
# Run quick test (default tests only)
./rdhc.py
# Run all tests including compile and execute the rocm-example program for each component
./rdhc.py --all
# Run all tests with verbose output
./rdhc.py --all -v
# Enable verbose output
./rdhc.py -v
# Run in silent mode (only errors shown)
./rdhc.py -s
# Export results to a specific JSON file
./rdhc.py --all --json rdhc-results.json
# Specify a directory for temp files (directory must not exist)
./rdhc.py --all -d /home/user/rdhc-run1/
# Auto-generate temp directory and clean it up after tests
./rdhc.py --all --cleanup
# Custom install prefix
./rdhc.py --rocm-install-prefix /usr/local/rocm
# Custom prefix and run all tests
./rdhc.py --rocm-install-prefix /usr/local/rocm --all -v
# Skip multinode + atomic checks (single-node or container-friendly)
./rdhc.py --skip-optional-cluster-checks
# Or skip only one of them
./rdhc.py --skip-multinode-readiness
./rdhc.py --skip-atomic-operations
# Kernel cmdline/sysctl checks: mismatches count as warnings, not FAIL
./rdhc.py --kernel-params-warnings-only
# Combine with other options
./rdhc.py --all --skip-optional-cluster-checks --kernel-params-warnings-only -v
Note on privileges: Most checks run without elevated privileges. Some checks (e.g., lspci -vvv for atomic operations) may require root access. Run as root when necessary, or use --skip-atomic-operations if running unprivileged.
Optional CLI behavior
These options improve usability when some checks are not applicable or cannot run reliably:
| Option | Purpose |
|---|---|
--skip-multinode-readiness |
Skips the Multinode Cluster Readiness test (MPI, NIC drivers, RDMA modules). Use on single-node hosts or systems without an InfiniBand/RDMA stack. |
--skip-atomic-operations |
Skips the Atomic Operations test (lspci-based). Use in containers or hosts where PCIe capability details are not visible without full access. |
--skip-optional-cluster-checks |
Equivalent to passing both --skip-multinode-readiness and --skip-atomic-operations. |
--kernel-params-warnings-only |
For the Kernel Parameters test, entries that would normally count as errors are treated as warnings so the overall check does not FAIL solely on kernel/cmdline tuning differences. |
Skipped tests are recorded with status NOT TESTED and a short reason in the report/JSON.
RDHC Environment VARIABLES
RDHC tool will use the following ENV variables and act accordingly if they are set.
# ROCm installation path can be set by the below ENV variable. Default is "/opt/rocm/"
export ROCM_PATH="/opt/rocm"
# For library dependency validation, the lib search depth can be set by the below ENV.
# Default is full depth. It checks for all the lib files in ROCM_PATH/lib/ folder recursively.
export LIBDIR_MAX_DEPTH=""
# if you want to check the libs only from the ROCM_PATH/lib/ folder set the depth as 1.
export LIBDIR_MAX_DEPTH=1
Troubleshooting
Python Package Installation Issues (Ubuntu 24.04)
If sudo pip3 install fails with an "externally-managed-environment" error (common in Ubuntu 24.04), use a Python virtual environment instead:
# Create a virtual environment (one-time setup)
python3 -m venv ~/rdhc-venv
# Activate the virtual environment
source ~/rdhc-venv/bin/activate
# Install required packages
pip3 install -r requirements.txt
# Run the tool (virtual environment activated)
./rdhc.py
./rdhc.py --all
Temporary Directory Behavior
When using --all mode, RDHC clones and builds rocm-examples:
- Without
-dflag: A secure temporary directory is auto-generated in/tmp(e.g.,/tmp/rdhc-abc123/) with mode0700. By default, this directory persists after the run. Use--cleanupto remove it automatically. - With
-dflag: The specified directory is created with mode0700. The directory must not already exist (for security reasons). If you need to reuse a directory, remove it first:rm -rf /path/to/dir
Example workflow for repeated runs:
# Auto-generated temp dir (persists)
./rdhc.py --all
# Creates /tmp/rdhc-abc123/ (check logs or report for actual path)
# Auto-generated temp dir with automatic cleanup
./rdhc.py --all --cleanup
# Creates and removes temp dir after tests complete
# Custom directory (must not exist)
./rdhc.py --all -d /tmp/my-rdhc-run1/ # First run with this path
rm -rf /tmp/my-rdhc-run1/ # Clean up before next run
./rdhc.py --all -d /tmp/my-rdhc-run1/ # Can reuse after cleanup
# Note: --cleanup has no effect when -d is specified
The tool is designed to be easily extended with additional component tests by adding new test methods following the naming convention test_check_component_name().