| name | check-inference | |||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| description | Probe a model inference WebSocket server (e.g. `serve_policy`) and validate the response — using the `geniesim benchmark check-inference` CLI verb, which wraps the benchmark package's `check_inference.py`. Trigger: When the user asks to "check inference", "校验模型推理", "test inference server", "verify policy server", "ping the model", or provides an IP/port and wants to confirm a serve_policy / WebSocket inference server is working before running benchmarks. | |||||||||||||||||||||||
| license | MPL-2.0 | |||||||||||||||||||||||
| metadata |
|
|||||||||||||||||||||||
| prerequisites |
|
|||||||||||||||||||||||
| inputs |
|
|||||||||||||||||||||||
| outputs |
|
- Sanity-check whether a running inference server actually accepts requests and returns valid actions, before launching a full task.
- User provides
ip:portand a payload, and asks to verify connectivity / output validity. - Quick smoke test in CI / pre-deploy.
- Diagnosing "the benchmark hangs / outputs garbage" — this probe surfaces protocol mismatches and NaN/Inf in actions before you sink time into a full simulator launch.
Do not use for:
- Running the benchmark itself → use the
run-benchmarkskill. - Submitting jobs to the Challenge platform →
challenge-submit-job.
Sends a saved corobot .pkl payload to ws://<HOST>:<PORT> and validates the reply:
- Loads the payload.
- Connects to the WebSocket server using msgpack-numpy.
- Sends one request, receives one action chunk.
- Validates: schema (key presence), per-dim min/max/mean/std, NaN/Inf flags, out-of-range checks (kind-aware: JOINT_ABS in radians, EEF_ABS in meters+quat, gripper in [0,1]), large jumps from the input state.
The payload is a corobot JSON-RPC envelope — {"method": "infer", "params": {...}} — and the server replies with {"result": {"left_arm": …, "right_arm": …, …}} (or {"error": …}).
The user must provide:
HOST— server IP (e.g.127.0.0.1).PORT— server port (e.g.8999).
PAYLOAD is optional — it defaults to the bundled corobot_payload.pkl. Pass a
path only to override it (see Generating a payload below). If host/port are
missing, ask the user before running.
# Bundled payload — just point it at the server
geniesim benchmark check-inference --infer-host=<HOST>:<PORT>
# Override with your own payload (positional)
geniesim benchmark check-inference debug_preview/debug_0001.pkl \
--host <HOST> --port <PORT>If geniesim isn't on $PATH (the launcher wasn't installed), substitute
python3 -m geniesim_cli benchmark check-inference … — same args, same behaviour.
| Flag | Effect |
|---|---|
--iters N |
Send N consecutive requests (default 1). Use 5–10 to catch flakiness. |
--max-dims N |
Max idx rows printed per array (default 64). |
A canonical corobot_payload.pkl ships next to the script and is used by
default, so you usually don't need to supply one. To probe with a fresh /
task-specific observation, run a benchmark task with the corobot policy's debug
dump enabled — it writes debug_preview/debug_NNNN.pkl (a {"payload": …, "obs": …} wrapper the probe unwraps automatically) — then pass that path.
The script prints structured sections:
| Section | What it tells you |
|---|---|
📦 Payload |
Payload loaded and recognised as corobot. |
🔌 Connecting |
Connected to ws server (or refused). |
📡 …response |
Server returned a reply, schema check. |
📊 <key> |
Per-dim min/max/mean/std + flags, per output (left_arm/right_arm/…). |
⏱ latency |
Round-trip latency. |
| Outcome | Meaning |
|---|---|
✅ PASS — … |
Server is up and returning sane actions. |
❌ Connection refused / timed out |
Server isn't listening on that host:port. Verify it's running and the firewall is open. |
❌ … NaN / Inf … |
Server responded but model output is broken. Check the policy checkpoint and normalization stats — not a network problem. |
❌ response missing 'result' dict |
Server schema mismatch — it isn't speaking the corobot JSON-RPC protocol the probe expects. |
❌ server error: … |
The server returned a JSON-RPC error; read the message. |
⚠️ OOB[…] flags |
Action is finite but outside the kind's expected range. Could be a units bug (radians vs degrees) or an unnormalized output. |
The script needs (in the Python env that runs python3):
msgpacknumpywebsockets
It does not need Isaac Sim — pure-Python deps only. The CLI deliberately uses python3 instead of omni_python here so the probe is snappy.
- Script source:
source/geniesim_benchmark/src/geniesim_benchmark/scripts/check_inference.py(resolved via thegeniesim_benchmarkpackage) - CLI dispatcher:
source/geniesim_cli/src/geniesim_cli/commands/benchmark.py(_do_check_inference) - Payload dump hook:
source/geniesim_benchmark/src/geniesim_benchmark/benchmark/policy/corobotpolicy.py