CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
249 lines
9.0 KiB
Markdown
249 lines
9.0 KiB
Markdown
# RCCL Plugin Tests
|
|
|
|
## Description
|
|
|
|
This directory contains automated tests for RCCL (ROCm Communication Collectives Library) plugins:
|
|
|
|
1. **CSV Tuner Plugin**: Validates the functionality of the CSV-based tuning plugin across different collective operations (AllReduce, Broadcast, Reduce, AllGather, and ReduceScatter) and various configuration scenarios.
|
|
|
|
2. **Profiler Plugin**: Validates the profiler plugin that captures detailed runtime events for collective and P2P operations, including Group, Collective, P2P, ProxyOp, ProxyStep, and GPU kernel events.
|
|
|
|
3. **Inspector Plugin**: Validates the inspector plugin that produces structured JSONL output for collective operations. Tests cover schema correctness, per-rank output files, timing source validation, and verbose event trace fields across single-node and multi-node configurations.
|
|
|
|
The tests are written in Python using the pytest framework, making it easy to run, maintain, and extend the test coverage.
|
|
|
|
## Directory Structure
|
|
|
|
```
|
|
ext-plugins/
|
|
├── README.md # This file - documentation for the test suite
|
|
├── requirements.txt # Python dependencies required for testing
|
|
├── pytest.ini # Pytest configuration and test markers
|
|
├── .gitignore # Git ignore rules for Python/pytest artifacts
|
|
├── venv/ # Python virtual environment (created after setup)
|
|
├── logs/ # Test execution logs and output files
|
|
├── profiler_dumps/ # Profiler plugin output (JSON trace files)
|
|
├── inspector_dumps/ # Inspector plugin output (JSONL log files)
|
|
├── assets/ # Test configuration files and assets
|
|
│ └── csv_confs/ # CSV configuration files for testing
|
|
│ ├── incorrect_values_config.conf
|
|
│ ├── multinode_config.conf
|
|
│ ├── no_matching_config.conf
|
|
│ ├── singlenode_config.conf
|
|
│ ├── unsupported_algo_proto_config.conf
|
|
│ ├── valid_config_with_wildcards.conf
|
|
│ └── valid_config_without_wildcards.conf
|
|
└── tests/ # Test suite directory
|
|
├── conftest.py # Pytest fixtures and shared test configuration
|
|
├── ext-tuner/ # CSV Tuner Plugin tests (plugin sources at plugins/tuner/)
|
|
│ ├── test_allreduce.py
|
|
│ ├── test_broadcast.py
|
|
│ ├── test_reduce.py
|
|
│ ├── test_allgather.py
|
|
│ └── test_reducescatter.py
|
|
├── ext-profiler/ # Profiler Plugin tests (plugin sources at plugins/profiler/)
|
|
│ ├── test_allreduce.py
|
|
│ ├── test_broadcast.py
|
|
│ ├── test_reduce.py
|
|
│ ├── test_allgather.py
|
|
│ ├── test_alltoall.py
|
|
│ ├── test_reducescatter.py
|
|
│ └── test_sendrecv.py
|
|
└── ext-inspector/ # Inspector Plugin specific tests
|
|
├── conftest.py # Inspector-specific fixtures and validators
|
|
├── test_allreduce.py
|
|
├── test_allgather.py
|
|
├── test_broadcast.py
|
|
├── test_reduce.py
|
|
└── test_reducescatter.py
|
|
```
|
|
|
|
## Installation & Setup
|
|
|
|
### Prerequisites
|
|
|
|
- Python 3.6 or higher
|
|
- RCCL library installed
|
|
- ROCm environment configured
|
|
- **Important**: Set the following environment variables to match your environment:
|
|
|
|
```bash
|
|
export RCCL_INSTALL_DIR=/path/to/rccl # RCCL source root (contains plugins/profiler/, plugins/tuner/)
|
|
export OMPI_INSTALL_DIR=/path/to/ompi/install # OpenMPI installation directory
|
|
export RCCL_TESTS_DIR=/path/to/rccl-tests # rccl-tests build directory
|
|
```
|
|
|
|
These are read by `tests/conftest.py` at runtime. If not set (or if plugin libraries are missing), plugin-specific tests are skipped with a clear reason in pytest output.
|
|
|
|
### Building the RCCL Plugins
|
|
|
|
Before running the tests, you need to build the RCCL plugin libraries.
|
|
|
|
#### Building the CSV Tuner Plugin
|
|
|
|
The CSV tuner plugin is located in the `plugins/tuner/example` directory.
|
|
|
|
**Step 1: Navigate to the plugin directory**
|
|
|
|
```bash
|
|
cd rccl/plugins/tuner/example
|
|
```
|
|
|
|
**Step 2: Build the plugin**
|
|
|
|
```bash
|
|
make
|
|
```
|
|
|
|
This will compile the plugin and create `libnccl-tuner-example.so` in the same directory.
|
|
|
|
#### Building the Profiler Plugin
|
|
|
|
The profiler plugin is located in the `plugins/profiler/example` directory.
|
|
|
|
**Step 1: Navigate to the plugin directory**
|
|
|
|
```bash
|
|
cd rccl/plugins/profiler/example
|
|
```
|
|
|
|
**Step 2: Build the plugin**
|
|
|
|
```bash
|
|
make
|
|
```
|
|
|
|
This will compile the plugin and create `librccl-profiler-example.so` in the same directory. The profiler plugin captures detailed runtime events including:
|
|
- **Group events**: High-level operation grouping
|
|
- **Collective events**: AllReduce, Broadcast, Reduce, ReduceScatter operations
|
|
- **P2P events**: Send, Recv, AllGather, AllToAll operations
|
|
- **ProxyOp events**: Network proxy operations (ScheduleSend, ScheduleRecv, ProgressSend, ProgressRecv)
|
|
- **ProxyStep events**: Detailed network steps (SendWait, RecvWait, GPU waits)
|
|
- **ProxyCtrl events**: Proxy thread control (Append, Sleep)
|
|
- **GPU events**: Kernel channel execution
|
|
|
|
#### Building the Inspector Plugin
|
|
|
|
The inspector plugin is located in the `plugins/profiler/inspector` directory.
|
|
|
|
**Step 1: Navigate to the plugin directory**
|
|
|
|
```bash
|
|
cd rccl/plugins/profiler/inspector
|
|
```
|
|
|
|
**Step 2: Build the plugin**
|
|
|
|
```bash
|
|
make
|
|
```
|
|
|
|
This will compile the plugin and create `librccl-profiler-inspector.so` in the same directory. The inspector plugin produces structured JSONL output for collective operations, including:
|
|
- **Header**: Rank ID, total ranks, and node count
|
|
- **Metadata**: Output format version, recording mechanism, hostname, PID, and dump timestamp
|
|
- **Collective performance**: Operation type, sequence number, message size, execution time, timing source, algorithm bandwidth, and bus bandwidth
|
|
- **Verbose event trace** (optional): Per-kernel channel start/stop sequence numbers and timestamps
|
|
|
|
### Step 1: Create Virtual Environment
|
|
|
|
Create a Python virtual environment to isolate the test dependencies:
|
|
|
|
```bash
|
|
python3 -m venv venv
|
|
```
|
|
|
|
### Step 2: Activate Virtual Environment
|
|
|
|
Activate the virtual environment using the appropriate command for your shell:
|
|
|
|
**On Linux/Mac (bash/zsh):**
|
|
```bash
|
|
source venv/bin/activate
|
|
```
|
|
|
|
Once activated, you should see `(venv)` at the beginning of your command prompt.
|
|
|
|
### Step 3: Install Dependencies
|
|
|
|
Install the required Python packages:
|
|
|
|
```bash
|
|
pip install -r requirements.txt
|
|
```
|
|
|
|
## Running Tests
|
|
|
|
### Run All Tests
|
|
|
|
To run the entire test suite:
|
|
|
|
```bash
|
|
pytest --cache-clear
|
|
```
|
|
|
|
### Run Tests with Verbose Output
|
|
|
|
For more detailed test output:
|
|
|
|
```bash
|
|
pytest -v --cache-clear
|
|
```
|
|
|
|
### Run Tests by Marker
|
|
|
|
Tests are organized using pytest markers. You can run specific groups of tests:
|
|
|
|
**Run plugin-specific tests:**
|
|
```bash
|
|
pytest -m ext_tuner --cache-clear # CSV Tuner Plugin tests only
|
|
pytest -m ext_profiler --cache-clear # Profiler Plugin tests only
|
|
pytest -m ext_inspector --cache-clear # Inspector Plugin tests only
|
|
```
|
|
|
|
**Run tests for specific collective operations (across all plugins):**
|
|
```bash
|
|
pytest -m allreduce --cache-clear # AllReduce tests
|
|
pytest -m broadcast --cache-clear # Broadcast tests
|
|
pytest -m reduce --cache-clear # Reduce tests
|
|
pytest -m allgather --cache-clear # AllGather tests
|
|
pytest -m reducescatter --cache-clear # ReduceScatter tests
|
|
pytest -m alltoall --cache-clear # AllToAll tests (profiler only)
|
|
pytest -m sendrecv --cache-clear # SendRecv tests (profiler only)
|
|
```
|
|
|
|
**Combine markers to run specific tests:**
|
|
```bash
|
|
pytest -m "ext_profiler and allreduce" --cache-clear # Profiler AllReduce tests only
|
|
pytest -m "ext_tuner and broadcast" --cache-clear # Tuner Broadcast tests only
|
|
pytest -m "ext_inspector and allreduce" --cache-clear # Inspector AllReduce tests only
|
|
```
|
|
|
|
### Run Tests with Log Output
|
|
|
|
To see live log output during test execution:
|
|
|
|
```bash
|
|
pytest -v -s --cache-clear
|
|
```
|
|
|
|
### Generate Test Report
|
|
|
|
To generate a detailed test report:
|
|
|
|
```bash
|
|
pytest --verbose --tb=short
|
|
```
|
|
|
|
## Additional Notes
|
|
|
|
- **Deactivating Virtual Environment**: When you're done testing, deactivate the virtual environment by running:
|
|
```bash
|
|
deactivate
|
|
```
|
|
|
|
- **Log Files**: Test execution logs are stored in the `logs/` directory for later review and debugging.
|
|
|
|
- **Profiler Output**: Profiler plugin tests generate JSON trace files in the `profiler_dumps/` directory. These files contain detailed event traces that can be analyzed for debugging or performance analysis. The directory is automatically cleaned before each test session by the pytest fixture.
|
|
|
|
- **Inspector Output**: Inspector plugin tests generate JSONL log files in the `inspector_dumps/` directory, with one file per rank per test. Each line is a self-contained JSON record containing header, metadata, and collective performance data. The directory is automatically cleaned before each test session.
|