Files
TheRock/rocm-systems/emulation/mirage/README.md
T
derek.holloway 7502bf64a4
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
Flatten subprojects into a single base monorepo
2026-09-02 16:34:47 -07:00

115 lines
4.5 KiB
Markdown

# mirage
**mirage** is the user-facing UX — a command-line tool and an optional web
dashboard — for the [`rocjitsu`][rocjitsu] GPU emulator and other emulator
backends. It lets you run real ROCm applications on top of an emulated GPU
without changing the application, and inspect, script, and recover from the
emulation as easily as you read a file.
```sh
$ mirage profile create cdna4 --emulator rocjitsu --agent MI350X
$ mirage run --profile cdna4 -- ./my-rocm-app --flag
```
## Why mirage
* **All state lives on disk** in standard [XDG locations][xdg]. There is no
required background daemon to keep state alive: the CLI and the per-session
host processes coordinate exclusively through well-defined files. You can
inspect everything with `ls`, `cat`, and `tail -f`.
* **Easy to script.** Every list/show command accepts `--json` for
machine-readable output, and exit codes are predictable.
* **Crash-resilient.** Because state is on disk, a crashed CLI or host can be
restarted and pick up where it left off.
* **A drop-in for `rocjitsu`.** `mirage --config cfg.json -- ./app` works just
like the upstream `rocjitsu` CLI, so existing scripts keep running.
## Core concepts
| Concept | What it is |
| ------------ | -------------------------------------------------------------------------- |
| **Emulator** | A backend that runs GPU code (`rocjitsu`, `rocjitsu-dbt`, `hotswap`, `noop`). |
| **Agent** | A hardware GPU definition (e.g. `MI300X`, `MI350X`, `MI450X`). |
| **Topology** | A rack/node/GPU layout that references an agent. |
| **Profile** | A reusable preset binding an emulator + topology + options. |
| **Session** | A long-lived context (one host process) that hosts an emulator and runs execs. |
| **Exec** | A single command invocation inside a session, with fully redirected stdio. |
A typical flow is: pick or create a **profile**, start a **session** from it,
and run one or more **execs** in that session. The `mirage run` shortcut does
all three (create → run → clean up) in a single command.
## Quick start
```sh
# See which emulator backends are available on this machine.
mirage emulators
# Create a profile targeting an MI350X with the rocjitsu emulator.
mirage profile create cdna4 --emulator rocjitsu --agent MI350X
# One-shot: create a transient session, run a command, attach, clean up.
mirage run --profile cdna4 -- ./my-rocm-app --flag
# Or manage the lifecycle yourself:
sid=$(mirage session start --profile cdna4)
mirage exec start "$sid" -- ./my-rocm-app
mirage session stop "$sid"
```
If you have no GPU and just want to exercise the tooling, use the `noop`
emulator, which runs commands directly with no emulation:
```sh
mirage profile create local --emulator noop
mirage run --profile local -- echo "hello from mirage"
```
## Building
mirage is a single Cargo workspace. One build produces the unified `mirage`
binary:
```sh
cd emulation/mirage
cargo build --workspace # debug build -> target/debug/mirage
./target/debug/mirage --help
```
By default the `rocjitsu` backend is compiled in. Backends are selected with
Cargo features, and the optional web dashboard needs **Node.js 20.19+**. See
[`docs/building.md`](docs/building.md) for the full guide, including building
`rocjitsu` and the dashboard.
## Testing
```sh
cargo test --workspace
```
The end-to-end tests in `tests/` drive the full lifecycle (create session →
start exec → attach → signal → stop) through the public CLI and HTTP surfaces.
The rocjitsu-backed e2e tests require a working rocjitsu runtime; without it
they are expected to fail with a "KMD preload library not found" message.
## Web dashboard (optional)
mirage ships an optional cross-session HTTP/WebSocket dashboard:
```sh
cargo build --workspace --features webui
mirage webui # serve on 127.0.0.1:5174 by default
mirage webui install # register it as a systemd user service
```
## Documentation
* [`docs/cli.md`](docs/cli.md) — complete CLI reference.
* [`docs/architecture.md`](docs/architecture.md) — design and crate overview.
* [`docs/building.md`](docs/building.md) — building mirage, the dashboard, and rocjitsu.
* [`docs/host.md`](docs/host.md) — what the per-session host does and how to extend it.
* [`docs/state-layout.md`](docs/state-layout.md) — authoritative on-disk layout reference.
[rocjitsu]: ../rocjitsu/
[xdg]: https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html