Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
75 changes: 49 additions & 26 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ Implemented areas include:
- Python 3.12.10 runtime creation from embeddable Python plus full ZIP enrichment
- Per-instance Python environments
- AMD GPU detection with manual `--gfx` override
- Stable, preview, nightly, RDNA1, and RDNA2 channel manifests
- Stable, preview, nightly, legacy, and legacy-staging channel manifests
- ComfyUI Git mirror cache and per-instance clone
- Instance-local custom node install/update
- Generated `extra_model_paths.yaml`
Expand Down Expand Up @@ -173,11 +173,11 @@ Channels are defined in `source\manifests\channels.json`.

| Channel | ComfyUI ref | ROCm source | Default profile | Notes |
| --- | --- | --- | --- | --- |
| `stable` | `v0.26.0` | AMD ROCm 7.2.1 direct URLs | `stable` | Pinned ROCmRoll baseline; Python 3.12 required |
| `preview` | `master` | `https://rocm.nightlies.amd.com/v2/<rocmIndex>/` | `optimized` | Promoted nightly index |
| `nightly` | `master` | `https://rocm.nightlies.amd.com/v2-staging/<rocmIndex>/` | `optimized` | Cutting-edge staging index |
| `rdna1` | `v0.26.0` | `https://rocm.nightlies.amd.com/v2/<rocmIndex>/` | `stable` | Experimental RDNA 1 support |
| `rdna2` | `v0.26.0` | `https://rocm.nightlies.amd.com/v2-staging/<rocmIndex>/` | `stable` | Experimental RDNA 2 support |
| `stable` | `v0.27.0` | AMD ROCm 7.2.1 direct URLs | `stable` | Pinned ROCmRoll baseline; Python 3.12 required |
| `preview` | `master` | `https://rocm.nightlies.amd.com/whl-multi-arch/` | `optimized` | AMD's unified multi-arch wheel index (promoted) |
| `nightly` | `master` | `https://rocm.nightlies.amd.com/whl-staging-multi-arch/` | `optimized` | Staging multi-arch index; more volatile than preview |
| `legacy` | `master` | `https://rocm.nightlies.amd.com/v2/<rocmIndex>/` | `optimized` | Per-GPU-family v2 index (pre-multi-arch scheme) |
| `legacy-staging` | `master` | `https://rocm.nightlies.amd.com/v2-staging/<rocmIndex>/` | `optimized` | Per-GPU-family v2-staging index; serves gfx942/gfx950 |

Stable currently installs:

Expand All @@ -187,25 +187,31 @@ Stable currently installs:
- torchvision `0.24.1+rocm7.2.1`
- torchaudio `2.9.1+rocm7.2.1`

`preview` and `nightly` install `torch`, `torchvision`, `torchaudio`, and `rocm[libraries,devel]` from AMD ROCm indexes. `nightly` is more volatile because it uses the staging index.
`preview` and `nightly` install from AMD's unified multi-arch wheel indexes. Those are single flat package indexes covering every supported GPU rather than one folder per family, so package selection happens through pip extras keyed to the exact GPU chip instead of the index URL: `torch[device-gfx1100]`, `torchvision[device-gfx1100]`, `torchaudio`, `rocm[libraries,devel,device-gfx1100]`. ROCmRoll resolves the exact chip (not just the GPU family) automatically during detection - see "Supported GPU Families" below. `preview` uses the promoted index, `nightly` the staging index, mirroring the old `v2`/`v2-staging` split.

### RDNA 1 And RDNA 2
`legacy` and `legacy-staging` keep the older per-GPU-family index scheme (`v2`/`v2-staging` plus a `rocmIndex` folder such as `gfx110X-all`), installing generic `torch`, `torchvision`, `torchaudio`, and `rocm[libraries,devel]`. They exist as a fallback for GPUs not yet published on the multi-arch indexes and for anyone who needs the previous behavior.

RDNA 1 (`gfx101X`) and RDNA 2 (`gfx103X`) are experimental on Windows ROCm. AMD has no official Windows ROCm stable release wheels for these GPU families, so ROCmRoll uses dedicated index-based channels.
### Automatic Channel Switching

When `--channel stable` is selected and ROCmRoll detects RDNA 1 or RDNA 2, it automatically switches channels:
Channel switching is manifest-driven through two optional per-family flags in `source\manifests\rocm-architectures.json` (absent means supported):

| GPU family | Auto-selected channel |
| --- | --- |
| `gfx101X` | `rdna1` |
| `gfx103X` | `rdna2` |
| Flag | Families | Effect |
| --- | --- | --- |
| `stableSupported: false` | `gfx101X` (RDNA 1), `gfx103X` (RDNA 2) | `--channel stable` automatically switches to `preview`; AMD publishes no official Windows stable release wheels for these families |
| `multiArchSupported: false` | `gfx94X` (MI300/MI325), `gfx950` (MI350/MI355) | `--channel preview`/`nightly` automatically switches to `legacy-staging`; AMD does not publish multi-arch Windows wheels for these families yet |

You can also select them explicitly:
RDNA 1 and RDNA 2 are experimental on Windows ROCm and now install from the multi-arch `preview`/`nightly` channels like every other supported family. The former dedicated `rdna1`/`rdna2` channels were removed; instances installed with them are transparently treated as `preview` (see "Channel Migration" below).

```powershell
.\rocmroll.bat instance install --name my-rdna1 --channel rdna1
.\rocmroll.bat instance install --name my-rdna2 --channel rdna2
```
### Channel Migration

Instance state records the channel it was installed with. Removed channel names are aliased to their replacements at every lookup, so existing instances keep working without manual edits:

| Old channel | Now resolves to |
| --- | --- |
| `rdna1` | `preview` |
| `rdna2` | `preview` |

The canonical name is written back to instance state on the next full `instance install`/`instance update`.

## Profiles

Expand All @@ -215,9 +221,13 @@ Profiles live in `profiles\` by default. The folder is configurable through `roc

| Profile file | Profile | Default channel | Summary |
| --- | --- | --- | --- |
| `stable.json` | `stable` | `stable`, `rdna1`, `rdna2` | Baseline AMD profile with minimal env vars |
| `stable.json` | `stable` | `stable` | Baseline AMD profile with minimal env vars |
| `stable-dynamic-vram.json` | `stable-dynamic-vram` | none | Baseline plus `--enable-dynamic-vram` |
| `optimized.json` | `optimized` | `preview`, `nightly` | Flash-Attention Triton, MIOpen settings, SageAttention, dynamic VRAM |
| `optimized.json` | `optimized` | `preview`, `nightly`, `legacy`, `legacy-staging` | Flash-Attention Triton, MIOpen settings, SageAttention, dynamic VRAM |
| `flash-attention.json` | `flash-attention` | none | Flash-Attention Triton backend, MIOpen settings, dynamic VRAM; Triton autotuning disabled |
| `flash-attention-autotune.json` | `flash-attention-autotune` | none | Like `flash-attention` but with `FLASH_ATTENTION_TRITON_AMD_AUTOTUNE=TRUE` |
| `sage-attention.json` | `sage-attention` | none | SageAttention backend, MIOpen settings, dynamic VRAM; Triton autotuning disabled |
| `sage-attention-autotune.json` | `sage-attention-autotune` | none | Like `sage-attention` but with `FLASH_ATTENTION_TRITON_AMD_AUTOTUNE=TRUE` |
| `performance-autotune.json` | `performance-autotune` | none | Aggressive MIOpen and Triton autotuning |
| `experimental.json` | local experimental content | none | Check file contents before using; it currently contains an object named `optimized` |

Expand All @@ -242,10 +252,16 @@ Override a profile at launch time:
.\rocmroll.bat instance launch --name rocm-stable --profile performance-autotune
```

Regenerate launchers with a different default profile:
Apply a profile to an existing instance (regenerates launchers and updates ComfyUI Desktop):

```powershell
.\rocmroll.bat instance repair --name rocm-stable
.\rocmroll.bat profile apply --instance rocm-stable --profile flash-attention
```

Omit `--profile` to apply the channel default:

```powershell
.\rocmroll.bat profile apply --instance rocm-stable
```

Profile JSON shape:
Expand Down Expand Up @@ -298,6 +314,12 @@ Manual override example:
.\rocmroll.bat instance install --name rocm-stable --gfx gfx120X
```

### Exact GPU Chip Resolution (Multi-Arch Channels)

Each family above bundles one or more physical GPU chips (for example `gfx110X` covers `gfx1100`, `gfx1101`, `gfx1102`, and `gfx1103`). The `stable`/`legacy`/`legacy-staging` channels only need the family-level `rocmIndex` because AMD publishes one wheel index per family. The multi-arch indexes used by `preview` and `nightly` need the exact chip instead, since ROCm SDK device packages are published per chip, not per family.

Each family entry in `rocm-architectures.json` has a `chips` array mapping device names to exact chip ids. GPU detection resolves both the family (`gfx`/`rocmIndex`, used by the per-family channels) and the exact chip (`multiArchChip`, used by `preview` and `nightly`) from the same detected device name. When `--gfx` overrides to a family key instead of detecting hardware, ROCmRoll defaults `multiArchChip` to the first chip listed for that family.

## What Install Does

The full install command:
Expand Down Expand Up @@ -500,12 +522,12 @@ Common command-specific options:
| Option | Used by |
| --- | --- |
| `--workspace NAME` | Commands whose help explicitly lists workspace selection |
| `--channel stable\|preview\|nightly\|rdna1\|rdna2` | Instance install and list filtering |
| `--channel stable\|preview\|nightly\|legacy\|legacy-staging` | Instance install and list filtering |
| `--python VERSION` | Instance install; default `3.12.10` |
| `--name NAME` | Instance aggregate commands and workspace, environment, or profile commands |
| `--instance NAME` | Doctor, ROCm, ComfyUI, `profile apply`, and patch commands |
| `--environment`, `--rocm`, `--comfyui`, `--patches`, `--all` | Component scopes listed by instance info/update/repair/remove help |
| `--profile NAME` | Instance install and launch |
| `--profile NAME` | Instance install, launch, and `profile apply` |
| `--force` | Forced install/update/removal or stale install-lock override where listed |
| `--gfx ARCH`, `--port PORT`, `--url HOST`, `--patch-id ID`, `--shared-workflows` | Specialized commands shown in command help |

Expand Down Expand Up @@ -560,7 +582,7 @@ Per-instance environments are copied from the runtime and named like:
<instance>-py312
```

ROCm/PyTorch installation is selected by channel. Index-based installs can use wheels from `.cache\wheelhouse\<rocmIndex>\` through `--find-links` when that folder contains wheels.
ROCm/PyTorch installation is selected by channel. `index`-source installs (`legacy`, `legacy-staging`) can use wheels from `.cache\wheelhouse\<rocmIndex>\` through `--find-links` when that folder contains wheels; the `multiArch`-source channels (`preview`, `nightly`) use `.cache\wheelhouse\<multiArchChip>\` instead, keyed by the exact GPU chip.

Manual ROCm validation:

Expand Down Expand Up @@ -685,6 +707,7 @@ The Desktop integration:
- Reuses an existing Desktop ID on update
- Removes the Desktop entry during full removal and when ComfyUI or environment components are removed
- Stores the Desktop ID in instance state as `comfyDesktopId`
- `profile apply` refreshes the Desktop entry with the applied profile's `launchArgs` and `env`

## Troubleshooting

Expand Down
9 changes: 4 additions & 5 deletions TROUBLESHOOTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -131,17 +131,16 @@ ERROR ROCMROLL-ROCM-003: pip install failed for torch.

**Symptom:** Install completes (possibly with a warning that the GPU was not visible during validation), but `torch.cuda.is_available()` is `False` and ComfyUI runs on CPU. Affects RX 6000 series (RDNA 2, `gfx103X`) and RX 5000 series (RDNA 1, `gfx101X`).

**Cause:** AMD's official ROCm Windows release wheels (the stable channel's direct URLs) only support RDNA 3 and RDNA 4 GPUs. They install without error on RDNA 1/2 systems but never detect the GPU. Additionally, AMD's regular nightly index (`v2`) does not publish torch wheels for these families - they exist only on the staging nightly index (`v2-staging`).
**Cause:** AMD's official ROCm Windows release wheels (the stable channel's direct URLs) only support RDNA 3 and RDNA 4 GPUs. They install without error on RDNA 1/2 systems but never detect the GPU.

**Fix (automatic):** ROCmRoll routes `gfx103X` and `gfx101X` to the staging nightly index on both channels via the `sourceOverride` key in `source\manifests\rocm-architectures.json`. If your instance was installed before this fix, re-run the install (it converges) or repair the ROCm component:
**Fix (automatic):** RDNA 1/2 support ships through AMD's multi-arch nightly wheels. These families are marked `stableSupported: false` in `source\manifests\rocm-architectures.json`, so selecting `--channel stable` automatically switches the install to the `preview` channel (whl-multi-arch index with exact-chip packages such as `torch[device-gfx1030]`). If your instance was installed before this behavior existed - including with the removed `rdna1`/`rdna2` channels, which now resolve to `preview` - re-run the install (it converges) or repair the ROCm component:

```powershell
.\rocmroll.bat instance repair --name rocm-stable
.\rocmroll.bat instance repair --name rocm-stable
.\rocmroll.bat instance repair --name rocm-stable --rocm
.\rocmroll.bat rocm validate --instance rocm-stable
```

**Note:** Staging nightly wheels are pre-release builds and inherit nightly volatility, even on the stable channel. This is currently the only way to get GPU acceleration on RDNA 1/2 under Windows.
**Note:** Multi-arch nightly wheels are pre-release builds and inherit nightly volatility, even when the install started from the stable channel. This is currently the only way to get GPU acceleration on RDNA 1/2 under Windows.

---

Expand Down
Loading
Loading