2
0
Ficheiros
rocm-systems/projects/rocprofiler-compute/tools/config_management/README.md
T
2025-10-22 15:17:43 -04:00

501 linhas
14 KiB
Markdown

Este ficheiro contém caracteres Unicode ambíguos
Este ficheiro contém caracteres Unicode que podem ser confundidos com outros caracteres. Se acha que é intencional, pode ignorar este aviso com segurança. Use o botão Revelar para os mostrar.
# Architecture Configuration Workflow
This document explains the master workflow system for managing architecture-specific metric configurations.
## Overview
The workflow system manages changes to architecture configurations located in `src/rocprof_compute_soc/analysis_configs/gfx<arch>/`. It handles:
- **Metric changes** (additions, deletions, modifications)
- **Metric description changes** (plain text + RST documentation)
- **New architecture additions**
- **Template updates**
- **Config delta generation** for version control
## Files Overview
### Core Scripts
1. **`master_config_workflow_script.py`** - Main orchestrator script
2. **`hash_manager.py`** - Tracks file changes via MD5 hashes
3. **`metric_description_manager.py`** - Syncs metric descriptions across files
4. **`config_workflow.yaml`** - Configuration file
5. **`parse_config_template.py`** - Parses base config template from latest arch
6. **`generate_config_deltas.py`** - Generates config deltas between two archs
7. **`apply_config_deltas.py`** - Applies config deltas to genearte new arch configs
8. **`verify_against_config_template.py`** - Validates configs against template
## Quick Start
### Initial Setup (not needed following first commit)
1. Create the hash database:
```bash
python hash_manager.py --compute-all src/rocprof_compute_soc/analysis_configs
```
2. Ensure `analysis_config_template.yaml` has metadata:
```yaml
latest_arch: gfx950
panels:
- file: top_stats.yaml
panel_id: 0
...
```
### Making Changes
Simply run the master workflow after making any changes:
```bash
python master_config_workflow_script.py
```
The script will:
- Detect what changed
- Prompt you for confirmation
- Apply changes
- Validate results
- Update all necessary files
### Dry Run Mode
To see what would happen without making changes:
```bash
python master_config_workflow_script.py --dry-run
```
## Usage Scenarios
### Scenario A: Add Metrics to Latest Arch (gfx950)
**Method 1: Direct Edit**
1. Edit `src/rocprof_compute_soc/analysis_configs/gfx950/0700_wavefront.yaml`
2. Add your metric to the appropriate table
3. Add description to `metrics_description` section
4. Run: `python master_config_workflow_script.py`
5. Answer prompts
**Method 2: Using Delta**
1. Create `src/rocprof_compute_soc/analysis_configs/gfx950/config_delta/gfx955_diff.yaml`:
```yaml
Addition:
- Panel Config:
id: 700
title: Wavefront
metric_tables:
- metric_table:
id: 701
title: Wavefront Launch Stats
metrics:
- New Metric:
avg: AVG(something)
unit: Units
metric_descriptions:
New Metric:
plain: Description text
rst: |- # Optional
Description with :ref:`RST markup <link>`
Deletion:
[]
Modification:
[]
```
2. Run: `python master_config_workflow_script.py`
**What Happens:**
- Changes applied to gfx950
- Template updated
- Deltas regenerated for all previous archs (gfx940, gfx941, etc.)
- Metric descriptions synced to:
- `tools/per_arch_metric_definitions/gfx950_metrics_description.yaml`
- `docs/data/metrics_description.yaml`
- All archs validated
- Hashes updated
### Scenario B: Modify Metrics in Older Arch (gfx940)
**Method 1: Direct Edit**
1. Edit `src/rocprof_compute_soc/analysis_configs/gfx940/0700_wavefront.yaml`
2. Make your changes
3. Run: `python master_config_workflow_script.py`
**Method 2: Using Delta**
1. Create `src/rocprof_compute_soc/analysis_configs/gfx940/config_delta/gfx950_diff.yaml`
2. Run: `python master_config_workflow_script.py`
**What Happens:**
- Changes applied to gfx940 only
- Validated against template (must still match structure)
- Metric descriptions synced to `tools/per_arch_metric_definitions/gfx940_metrics_description.yaml`
- Hashes updated for gfx940 only
### Scenario C: Add New Architecture (gfx955)
**Method 1: Create Directory with YAMLs**
1. Create `src/rocprof_compute_soc/analysis_configs/gfx955/`
2. Copy/create YAML files
3. Run: `python master_config_workflow_script.py`
4. Confirm this is the new latest arch
**Method 2: Using Delta from Latest**
1. Create delta showing differences from gfx950
2. Place in `src/rocprof_compute_soc/analysis_configs/gfx955/config_delta/gfx955_diff.yaml`
3. Run: `python master_config_workflow_script.py`
4. Confirm this is the new latest arch
**What Happens:**
- gfx955 becomes new latest arch
- Template updated with gfx955 as source
- Deltas generated: gfx955 → gfx950, gfx955 → gfx940, etc.
- All archs validated
- Metric descriptions synced
- Hashes updated
### Scenario D: Update Metric Descriptions Only
1. Edit description in config YAML:
```yaml
metrics_description:
Grid Size: "Updated description text"
```
2. Run: `python master_config_workflow_script.py`
**What Happens:**
- Same workflow as metric changes
- Plain text stored in config YAMLs
- RST version generated and stored in docs/tools files
## Delta YAML Structure
### Complete Example
```yaml
Addition:
- Panel Config:
id: 1100
title: Compute Units - Compute Pipeline
metric_tables:
- metric_table:
id: 1103
title: Arithmetic Operations
metrics:
- F8 OPs:
avg: AVG(((512 * SQ_INSTS_VALU_MFMA_MOPS_F8) / $denom))
min: MIN(((512 * SQ_INSTS_VALU_MFMA_MOPS_F8) / $denom))
max: MAX(((512 * SQ_INSTS_VALU_MFMA_MOPS_F8) / $denom))
unit: (OPs + $normUnit)
metric_descriptions:
F8 OPs:
plain: Number of 8-bit floating point operations
rst: |-
Number of 8-bit floating point operations per :ref:`normalization unit <normalization-units>`"
Deletion:
- Panel Config:
id: 1100
title: Compute Units - Compute Pipeline
metric_tables:
- metric_table:
id: 1103
title: Arithmetic Operations
metrics:
- Old Metric:
avg: AVG(something)
metric_descriptions:
Old Metric:
plain: "Old description"
Modification:
- Panel Config:
id: 1100
title: Compute Units - Compute Pipeline
metric_tables:
- metric_table:
id: 1103
title: Arithmetic Operations
metrics:
- Existing Metric:
avg: AVG(new_formula) # Changed field only
metric_descriptions:
Existing Metric:
plain: Updated description
rst: |-
Updated description with **RST**"
```
### Rules for Deltas
1. **Must have all three sections**: Addition, Deletion, Modification (can be empty lists)
2. **Metric descriptions**:
- `plain` field is required
- `rst` field is optional (defaults to copy of plain)
3. **Delta filename**: Must be `<target_arch>_diff.yaml`
4. **Location**: `src/rocprof_compute_soc/analysis_configs/gfx<arch>/config_delta/`
## Standalone Tool Usage
### Hash Manager
```bash
# Compute hashes for all archs
python hash_manager.py --compute-all src/rocprof_compute_soc/analysis_configs
# Detect changes
python hash_manager.py --detect-changes src/rocprof_compute_soc/analysis_configs
# Update hashes for specific arch
python hash_manager.py --update gfx950 src/rocprof_compute_soc/analysis_configs
```
### Metric Description Manager
```bash
# Sync descriptions for specific arch
python metric_description_manager.py --sync-arch gfx950 src/rocprof_compute_soc/analysis_configs --latest-arch gfx950
# Sync all archs
python metric_description_manager.py --sync-all src/rocprof_compute_soc/analysis_configs --latest-arch gfx950
# Validate descriptions
python metric_description_manager.py --validate gfx950 src/rocprof_compute_soc/analysis_configs
```
### Parse Config Template
```bash
# Generate template with metadata
python parse_config_template.py src/rocprof_compute_soc/analysis_configs/gfx950 \
tools/config_management/analysis_config_template.yaml \
--latest-arch gfx950
```
### Generate Delta
```bash
# Generate delta from current arch to previous arch
python generate_config_deltas.py \
src/rocprof_compute_soc/analysis_configs/gfx950 \
src/rocprof_compute_soc/analysis_configs/gfx940
```
### Apply Delta
```bash
# Apply delta to base arch
python apply_config_deltas.py \
src/rocprof_compute_soc/analysis_configs/gfx940 \
src/rocprof_compute_soc/analysis_configs/gfx940/config_delta/gfx950_diff.yaml \
output_dir
```
### Verify Against Template
```bash
# Validate all archs
python verify_against_config_template.py \
src/rocprof_compute_soc/analysis_configs \
tools/config_management/analysis_config_template.yaml
```
## File Structure
```
.
├── src/rocprof_compute_soc/analysis_configs/
│ ├── gfx940/
│ │ ├── 0700_wavefront.yaml # Config with plain descriptions
│ │ └── config_delta/
│ │ └── gfx950_diff.yaml # Delta to apply changes
│ ├── gfx941/
│ └── gfx950/ # Latest arch
│ ├── 0700_wavefront.yaml
│ └── config_delta/
│ └── gfx950_diff.yaml # Optional delta for modifications
├── tools/
│ ├── config_management/
│ │ ├── .config_hashes.json # Hash database (auto-generated)
│ │ ├── analysis_config_template.yaml # Template with metadata
│ │ ├── hash_manager.py
│ │ ├── metric_description_manager.py
│ │ ├── parse_config_template.py
│ │ ├── generate_config_deltas.py
│ │ ├── apply_config_deltas.py
│ │ ├── verify_against_config_template.py
│ │ ├── master_config_workflow_script.py
│ │ └── config_workflow.yaml
│ │
│ └── per_arch_metric_definitions/
│ ├── gfx940_metrics_description.yaml # RST only
│ ├── gfx941_metrics_description.yaml
│ └── gfx950_metrics_description.yaml
├── docs/data/
│ └── metrics_description.yaml # RST only, latest arch only
└── .backups/ # Auto-generated backups
└── 20250115_143022/ # Timestamped backup
```
## Configuration
Edit `config_workflow.yaml` to customize paths and behavior:
```yaml
paths:
template: tools/config_management/analysis_config_template.yaml
configs_root: src/rocprof_compute_soc/analysis_configs
backups: .backups
hashes: tools/config_management/.config_hashes.json
per_arch_metrics: tools/per_arch_metric_definitions
docs_metrics: docs/data/metrics_description.yaml
validation:
strict_mode: true # Fail on warnings
verify_after_changes: true # Validate after operations
behavior:
require_confirmation: true # Prompt before changes
```
## Error Handling
### Validation Failures
If validation fails:
1. All changes are automatically reverted
2. Backup is restored
3. Detailed error report is printed
4. Fix the issue and run again
### Hash Mismatches
If hashes are out of sync:
```bash
# Recompute all hashes
python hash_manager.py --compute-all src/rocprof_compute_soc/analysis_configs
```
### Description Validation Errors
Common issues:
- **Missing descriptions**: Warning only (won't fail)
- **Invalid RST syntax**: Error (will fail and revert)
- **Missing plain text**: Error (plain is required)
## Best Practices
1. **Always use master_config_workflow_script.py** - Don't run individual scripts manually unless debugging
2. **Test with --dry-run first** - See what will happen before committing
3. **Use deltas for complex changes** - Easier to review and version control
4. **Keep descriptions updated** - Plain text in configs, RST in docs
5. **One change at a time** - If multiple archs need updates, do them sequentially
6. **Check validation output** - Review warnings even if they don't fail
## Troubleshooting
### "No changes detected"
- Check that files were actually modified
- Ensure you're in the correct directory
- Verify hash database exists: `tools/config_management/.config_hashes.json`
### "Validation failed"
- Review the error output carefully
- Check that new metrics match template structure
- Ensure panel IDs are correct
- Verify data source ordering
### "Failed to sync metric descriptions"
- Check RST syntax in descriptions
- Ensure all metrics have descriptions
- Verify section_panel_map includes your table ID
### Changes not detected after manual edit
```bash
# Force recompute hashes
python hash_manager.py --compute-all src/rocprof_compute_soc/analysis_configs
# Then run workflow
python master_config_workflow_script.py
```
## Development Notes
### Adding New Architecture Support
When adding a completely new architecture line:
1. Ensure table IDs are in `metric_description_manager.py`'s `SECTION_PANEL_MAP`
2. Follow existing naming conventions (gfxXXX)
3. Create complete YAML set (don't start with partial configs)
### Modifying the Workflow
If you need to modify the workflow behavior:
1. Edit `config_workflow.yaml` for path/behavior changes
2. Edit `master_config_workflow_script.py` for workflow logic changes
3. Test with `--dry-run` extensively
4. Update this README
# Pre-commit: Hash Consistency Check
We ship a lightweight pre-commit hook that catches inconsistent hash updates across config YAMLs and deltas.
## What it enforces (per arch)
* Latest panels changed → latest delta must change (if there are older archs).
* Latest delta changed → latest panels must change or a new arch must be added.
* Older arch panels changed → that archs delta must change.
* Older arch delta changed → either latest panels or that archs panels must have changed.
## Setup
Install and enable pre-commit:
```bash
pip install pre-commit
pre-commit install
```
Our .pre-commit-config.yaml includes a local hook that runs the checker.
```yaml
- repo: local
hooks:
- id: hash-check
name: Hash consistency check
entry: bash -lc 'cd projects/rocprofiler-compute && python3 tools/config_management/hash_checker.py'
language: system
pass_filenames: false
stages: [pre-commit]
```
## Run manually
```bash
# from super-repo root
pre-commit run --all-files
# or directly in the subproject
cd projects/rocprofiler-compute
python3 tools/config_management/hash_checker.py
```