Benchmarks / CPU and I/O (per commit) (push) Failing after 6m20s
Benchmarks / Frame budget (on demand) (push) Skipped
Build and test / Desktop (Linux) (push) Failing after 45s
Build and test / Layer separation (push) Successful in 26s
Traceability / Requirement traces (push) Failing after 46s
🐳 Android image / Build and push (push) Successful in 1s
Build and test / android-image (push) Successful in 1s
🐳 Windows image / Build and push (push) Successful in 1s
Build and test / windows-image (push) Successful in 1s
Build and test / Android (aarch64) (push) Failing after 2m19s
Build and test / Windows (x86_64, cross) (push) Failing after 3m2s
Measured on a Radeon RX 7900 XT against Arch's onnxruntime-rocm 1.29 (docs/inference.md §1.3): MIGraphX fp16 runs the detectors at 2.4–3.4 ms against 10–58 ms on the CPU provider, the inpainter at 8 ms against 514, with a 15–135 s compile per graph the first time and under a second from its cache after. A compiling rung on TensorRT's terms, wired the same way. The ROCm execution provider is gone (removed in ONNX Runtime 1.23), so the AMD ladder is MIGraphX then the CPU, with no non-compiling rung between. MIGraphX is registered through the runtime's generic key/value entry point rather than ort's builder: 1.29 reads the legacy options struct for its precision flags only, and the compiled-program cache directory (`migraphx_model_cache_dir`) only travels the generic way. The provider's cache key omits the precision, so f32 and fp16 programs get their own directories. The probe fingerprint now includes the provider libraries beside the runtime and the ROCm version, since a distribution's CPU and ROCm builds are the same file at the same path. `status().failed` reports only the rungs above the selection, so an AMD desktop's About line says why MIGraphX won rather than that the NVIDIA providers are not in the build. Two examples: `ep_probe` times each provider cold and from cache, and `ladder` drives `init` as the app does to watch the first-run sequence. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
53 lines
2.2 KiB
TOML
53 lines
2.2 KiB
TOML
[package]
|
|
name = "dr-inference-engine"
|
|
version.workspace = true
|
|
edition.workspace = true
|
|
rust-version.workspace = true
|
|
license.workspace = true
|
|
|
|
# The one crate that names a runtime, a provider, a vendor library or a
|
|
# device (docs/inference.md §8). `dr-face` and `dr-segment` ask it for a
|
|
# session by role and never see which of these answered.
|
|
|
|
[dependencies]
|
|
thiserror.workspace = true
|
|
log.workspace = true
|
|
serde.workspace = true
|
|
serde_json.workspace = true
|
|
|
|
# `ort` is the API; what supplies it is decided once per process (§3):
|
|
# `libonnxruntime` found on disk, or `tract`. Both are behind
|
|
# `alternative-backend`, so nothing here links C on any target.
|
|
ort = { workspace = true }
|
|
ort-tract = { workspace = true, optional = true }
|
|
# dlopen, and the C types of the table it fetches. Both pure Rust;
|
|
# `libloading` is already in the tree through wgpu.
|
|
libloading = { version = "0.8", optional = true }
|
|
ort-sys = { version = "2.0.0-rc.13", default-features = false, features = ["disable-linking"], optional = true }
|
|
|
|
# The NVIDIA rungs exist on the desktop only. These features add `ort`'s
|
|
# option builders and nothing else — no linking under `alternative-backend` —
|
|
# but an Android binary has no business carrying even the option names, and
|
|
# the packaging must never be tempted to (§2, §3.1). The AMD rung needs no
|
|
# feature: MIGraphX is registered through the runtime's generic key/value
|
|
# entry point (`session::migraphx`), because `ort`'s own builder cannot
|
|
# name the compiled-program cache.
|
|
[target.'cfg(not(target_os = "android"))'.dependencies]
|
|
ort = { workspace = true, features = ["cuda", "tensorrt"] }
|
|
|
|
[target.'cfg(target_os = "android")'.dependencies]
|
|
ort = { workspace = true, features = ["qnn"] }
|
|
|
|
[features]
|
|
# The floor: `tract` supplies the API table when no runtime file is found, or
|
|
# always, in a build without `native`. Tests want this and nothing else.
|
|
default = ["tract"]
|
|
tract = ["dep:ort-tract"]
|
|
# Look for `libonnxruntime` on disk and hand its table to `ort`.
|
|
native = ["dep:libloading", "dep:ort-sys"]
|
|
|
|
[dev-dependencies]
|
|
# The `ep_probe` example prints the provider's own diagnostics, which is most
|
|
# of what a failed rung tells you.
|
|
env_logger.workspace = true
|