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

4.5 KiB

mirage

mirage is the user-facing UX — a command-line tool and an optional web dashboard — for the 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.

$ 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. 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

# 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:

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:

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 for the full guide, including building rocjitsu and the dashboard.

Testing

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:

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