Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

mlperf-sysinfo

A tool that automatically captures the system description of a benchmarking machine, built on top of the mlc-scripts and mlcflow automation.

Documentation: https://anandhu-eng.github.io/mlperf-sysinfo/

pip install mlperf-sysinfo

Quick Run

The steps below capture a system description for a CPU-only system, using only the machine you run them on. No other node is contacted.

Step 1 -- create a starter config

mlperf-sysinfo init endpoints
Sample output
$ mlperf-sysinfo init endpoints

  Written template sysinfo.yaml to path: /home/user/sysinfo.yaml

  profile: endpoints

  Edit the template sysinfo.yaml before running the actual capture command.

Step 2 -- edit sysinfo.yaml

Fill in a system name, your organisation, a contact email, and the model being served. nodes.include_local is already true with an empty ssh list, so leave that section alone. For a CPU-only capture, set accelerator: none and drop the serving: block entirely -- both fields are optional here, and skipping them is a warning, not an error.

profile: endpoints

output:
  dir: results/sysinfo

system:
  name: devbox1
  category: datacenter
  availability: available
  accelerator: none

nodes:
  include_local: true
  ssh: []

submission:
  submitter: MyOrg
  contact: mlperf@myorg.example
  division: standardized
  model:
    name: Llama-3.1-8B-Instruct

Step 3 -- check the config

mlperf-sysinfo check -c sysinfo.yaml
Sample output
$ mlperf-sysinfo check -c sysinfo.yaml

  profile    endpoints (v6.0 rules)
  output     results/sysinfo/system_desc.json

NODES
  ✓ this machine   included

REQUIRED BY PROFILE 'ENDPOINTS'
  ✓ 7 fields set

WORTH FILLING IN
  ! serving.url                  empty   Enables framework and version detection from the live endpoint
  ! serving.node                 empty   Enables parallelism and batch settings to be read from the startup log
  ! submission.model.precision   empty   Reviewers ask for this almost every round
  ! submission.dataset.name      empty   Identifies what the system was serving

  Ready to capture.

The warnings above are expected for a config with no live endpoint -- they don't block anything. capture always runs this check first, with no flag to skip it; a missing required field or an unreachable node is what would stop the run.

Step 4 -- capture

mlperf-sysinfo capture -c sysinfo.yaml
Sample output
$ mlperf-sysinfo capture -c sysinfo.yaml

  ✓ pre-flight check     passed -- 1 node(s), profile endpoints (v6.0 rules)
  ✓ collection           1 of 1 node(s) returned hardware

  1 node(s) - profile endpoints

  Written  results/sysinfo/system_desc.json

  Next: mlperf-sysinfo show results/sysinfo/system_desc.json

Step 5 -- validate

mlperf-sysinfo validate results/sysinfo/system_desc.json
Sample output
$ mlperf-sysinfo validate results/sysinfo/system_desc.json

  file       results/sysinfo/system_desc.json
  profile    endpoints (v6.0 rules)

  Valid. 7 required field(s) present.

The config

Grouped by who owns the answer, not by which environment variable it sets.

profile: endpoints

output:
  dir: results/h100_run1

system:
  name: H100x8_vLLM
  category: datacenter
  availability: available
  accelerator: cuda

nodes:
  include_local: false
  ssh:
    - root@node1
    - root@node2:2222

serving:
  url: http://node1:8000
  node: root@node1
  log: /tmp/serving.log

submission:
  submitter: MyOrg
  contact: mlperf@myorg.example
  division: standardized
  model:
    name: Llama-3.1-8B-Instruct
    precision: fp8

Three rules worth knowing:

  • Anything detectable is never a config field. CPU, memory, accelerators, node counts and framework version are probed. If they appear here at all, they are overrides.
  • ${VAR} reads from the environment. BMC and API credentials are referenced, never written down.
  • The same file works embedded. Drop it under a system_info: key in a benchmark config and it validates identically.

Use extends: ~/.mlperf/org.yaml to share submitter details across configs.

Profiles

A profile says which fields are required, which extra collection steps to run, and what the output looks like.

Profile Output Notes
endpoints grouped, keeps node_types Probes the endpoint and parses the serving log
inference flat, matches the submission checker Hardware lifted to the top level

mlperf-sysinfo profiles lists them. All profiles live in this repo and ship with the package. A config may also point at a file -- profile: ./my-profile.yaml -- for building one before it is upstreamed.

Profiles always track the current MLPerf round; there is no version to pin. The round that applied is stamped into every output file, so a captured file records the rules that produced it.

Embedding

from mlperf_sysinfo import load_config, capture

config = load_config("sysinfo.yaml")
result = capture(config)

result.output_path   # where the file landed
result.nodes         # per-node status
result.complete      # False if any node did not answer

capture() raises CheckFailed when pre-flight does not pass. Call mlperf_sysinfo.check(config) on its own to run the same validation early -- at the start of a benchmark rather than at the end of one.

Exit codes

check is meant to be scriptable, so the codes are a contract:

Code Meaning
0 All good
1 The run found problems (missing fields, unreachable nodes, invalid file)
2 The command or the config was wrong

Where files land

The deliverable is the only thing written to output.dir. Everything the automation produces -- the raw intermediate, per-node files, and its log -- goes into output.dir/.mlperf-sysinfo/. Pass --verbose to see the automation log on the terminal instead of in that directory.

Two caveats worth knowing:

  • Credentials can be echoed by the collection layer. Keeping them in ${VAR} keeps them out of your config file and out of git, but the underlying automation prints its own command lines, so a Redfish password may appear in automation.log. Treat that directory as sensitive.
  • Remote scratch files are not confined. When collecting over SSH, the automation writes its own temporary files on each remote node (under $HOME and /tmp there). This package cannot redirect those.

Partial captures

An unreachable node stops the run. --allow-partial proceeds anyway, and the output records complete: false along with how many nodes answered. validate then refuses the file, so a partial capture cannot be mistaken for a whole one.

Development

uv venv && uv pip install -e ".[dev]"
uv run pytest
uv run ruff check .

License

Apache-2.0

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mlperf_sysinfo-1.0.0a1.tar.gz (43.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mlperf_sysinfo-1.0.0a1-py3-none-any.whl (42.1 kB view details)

Uploaded Python 3

File details

Details for the file mlperf_sysinfo-1.0.0a1.tar.gz.

File metadata

  • Download URL: mlperf_sysinfo-1.0.0a1.tar.gz
  • Upload date:
  • Size: 43.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for mlperf_sysinfo-1.0.0a1.tar.gz
Algorithm Hash digest
SHA256 6f11c212cb8fdb38c2916fda9284bdb4378e269f249ecfd9693b01444705e56d
MD5 3ae41441feceb8839799eb3f05ff2355
BLAKE2b-256 de2882d30a2ca69b66ffd73d66f904f6c12272b65ac25f530cae4b7e25600cbf

See more details on using hashes here.

File details

Details for the file mlperf_sysinfo-1.0.0a1-py3-none-any.whl.

File metadata

File hashes

Hashes for mlperf_sysinfo-1.0.0a1-py3-none-any.whl
Algorithm Hash digest
SHA256 71114c6dd4eaa82b74a7d499ff25832015ca08771f99e8106ba988d0c0125289
MD5 1dc4f822d3666fee73ed7c0659d3fe42
BLAKE2b-256 f16868330d5cf607ff4a70e984ae53dfbea3b131b81fb11442515dd24e821908

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

1.0.0a1 This release

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page