Skip to main content

Hardware Onboarding

Private Stack Exposure

Remote benchmark workers must reach the Metrum Insights control plane over a public URL. When you run a private or local stack, expose PostgREST before launch and use the public HTTPS URL for METRUM_PUBLIC_API_URL, INSIGHTS_API_URL, and INSIGHTS_CONTROL_PLANE_URL:

cloudflared tunnel --url http://localhost:${POSTGREST_PORT:-3000}
export METRUM_PUBLIC_API_URL="https://<cloudflared-host>.trycloudflare.com"
export INSIGHTS_API_URL="$METRUM_PUBLIC_API_URL"
export INSIGHTS_CONTROL_PLANE_URL="$METRUM_PUBLIC_API_URL"
curl -fsS "$METRUM_PUBLIC_API_URL/" >/dev/null

Do not give a remote worker localhost, 127.0.0.1, host.docker.internal, or a private-only DNS name. Keep the tunnel alive through onboarding, polling, result upload, and teardown; expose any private package/WebUI endpoint through a public URL too when the worker downloads artifacts from that stack.

The WebUI origin must also be publicly reachable when using generated onboarding commands. Set INSIGHTS_PUBLIC_URL or INSIGHTS_FRONTEND_PUBLIC_URL to that public WebUI URL so the target server can fetch /api/onboarding/install-script/<token>, /api/packages, and /api/scripts/worker-startup.sh.

Use this flow for manually registered remote hosts. For SSH-accessible hardware where Metrum Insights should set up the worker and model server before running the benchmark, see Bring Your Own Hardware. For managed Shadeform validation, prefer the WebUI-managed cloud onboarding flow in Cloud Benchmark Execution.

Set these environment variables for the examples:

export METRUM_API_URL="https://api.<control-plane-domain>"
export METRUM_WEBUI_URL="https://<control-plane-host-or-dns>"
export METRUM_JWT_TOKEN="<12-hour-db-minted-postgrest-jwt>"
export METRUM_ORG_ID="<org-uuid>"

List Servers

Lists known server instances.

curl -fsS -X POST "$METRUM_API_URL/rpc/list_server_config_instances" \
-H "Authorization: Bearer $METRUM_JWT_TOKEN" \
-H "Content-Type: application/json" \
-d "{\"p_org_id\":\"$METRUM_ORG_ID\"}" | jq

Parameters:

NameRequiredDescription
p_org_idYesOrganization UUID.
p_status_codeNoOptional availability/status filter.

Register Server

Registers a server configuration, GPU metadata, and an addressable server instance. This is a sequence of API calls.

curl -fsS -X POST "$METRUM_API_URL/rpc/create_server_config" \
-H "Authorization: Bearer $METRUM_JWT_TOKEN" \
-H "Content-Type: application/json" \
-d "{
\"p_org_id\":\"$METRUM_ORG_ID\",
\"p_config_name\":\"Shadeform 1xH200\",
\"p_config_code\":\"shadeform-h200\",
\"p_config_type_code\":\"cloud-instance\"
}" | jq

curl -fsS -X POST "$METRUM_API_URL/rpc/create_server_config_gpu" \
-H "Authorization: Bearer $METRUM_JWT_TOKEN" \
-H "Content-Type: application/json" \
-d "{
\"p_org_id\":\"$METRUM_ORG_ID\",
\"p_config_code\":\"shadeform-h200\",
\"p_vendor_code\":\"NV\",
\"p_model_code\":\"h200\",
\"p_gpu_count\":1
}" | jq

curl -fsS -X POST "$METRUM_API_URL/rpc/create_server_config_instance" \
-H "Authorization: Bearer $METRUM_JWT_TOKEN" \
-H "Content-Type: application/json" \
-d "{
\"p_org_id\":\"$METRUM_ORG_ID\",
\"p_config_code\":\"shadeform-h200\",
\"p_hostname\":\"shadeform-h200-001\",
\"p_availability_code\":\"available\",
\"p_ip_address\":\"203.0.113.10\"
}" | jq

Important parameters:

NameRequiredDescription
p_config_codeYesStable server config code.
p_hostnameYesHostname that the worker will report.
p_config_type_codeYesServer config type, for example cloud-instance.
p_vendor_codeNoGPU vendor code, for example NV.
p_model_codeNoGPU model, for example h200 or rtx6000pro.
p_gpu_countNoNumber of GPUs.
p_ip_addressNoPublic or private address for operator reference.

Generate Onboarding Command

Generate the worker onboarding command from the new Web UI server page. The Web UI creates a short-lived bootstrap script, downloads worker artifacts from the control plane, and joins the worker to the registered server instance.

Hosted deployments include the agent package bundle. In local self-hosted development, build it before generating bootstrap commands:

make build-agent-wheels

In current new Web UI builds, /api/onboarding/bootstrap is browser-session authenticated. Do not call it with a PostgREST bearer token. For CLI-only workflows, use the cli_join_command returned by create_server_config_instance after installing insights-cli on the host. Treat bootstrap URLs, install commands, onboarding tokens, and join commands as short-lived credentials.

Run the generated install command exactly on the target server:

curl -sSL "$INSTALL_SCRIPT_URL" | bash

For a Shadeform or other provider smoke test, the provider launch script should only invoke that generated command. Do not replace it with a custom worker-startup sequence; otherwise the test bypasses the WebUI bootstrap, package delivery, one-use script token, and agent join path that users rely on. The default script-token TTL is 10 minutes; for providers that may queue longer than that before running launch scripts, set ONBOARDING_SCRIPT_TOKEN_TTL_SECONDS on the WebUI process for the smoke test or wait until the host is reachable and then run a freshly generated command.

Check Server Readiness

Checks whether the worker has registered, heartbeated, and is ready to run.

curl -fsS -X POST "$METRUM_API_URL/rpc/validate_server_readiness" \
-H "Authorization: Bearer $METRUM_JWT_TOKEN" \
-H "Content-Type: application/json" \
-d '{"p_server_hostname":"shadeform-h200-001"}' | jq

Parameters:

NameRequiredDescription
p_server_hostnameYesHostname used during registration/onboarding.

Poll readiness with a bound. A typical validation wait is at most 20 attempts with a 15-second sleep between attempts.

Query Server Status

Lists current server status and heartbeat state.

curl -fsS "$METRUM_API_URL/v_server_current_status?limit=50" \
-H "Authorization: Bearer $METRUM_JWT_TOKEN" | jq

Query parameters:

NameRequiredDescription
limitNoMaximum status rows to return.