CLI Reference
tt-fabric-manager-cli is a thin client over the controller’s
FabricManagerService.
tt-fabric-manager-cli [OPTIONS] <command> [COMMAND_ARGS]
Running CLI in Docker
Currently the most convenient way to obtain a pre-built FM CLI is via the official FM image. For example:
alias tt-fabric-manager-cli='docker run --rm --net=host \
-e FABRIC_MANAGER_ENDPOINT=ttfm.example.com:80 \
-v $(pwd):$(pwd) \
-w $(pwd) \
ghcr.io/tenstorrent/tt-fabric-manager:latest-cli tt-fabric-manager-cli'
Connecting to a controller
The endpoint is resolved from the following sources, highest priority first:
--endpoint <addr>FABRIC_MANAGER_ENDPOINTenvironment variable/etc/fabric-manager/config.yaml(controller.listen_addressorcontroller.endpoint)~/.fabric-manager/config/etc/fabric-manager/client.confBuilt-in default,
localhost:50051
Config files are YAML. A lightweight client-only file needs just two keys:
endpoint: localhost:50052
timeout_seconds: 30
The full server config is also accepted, in which case the endpoint is read from
controller.endpoint or controller.listen_address and the timeout from
controller.timeout_seconds.
Global options
Option |
Default |
Description |
|---|---|---|
|
|
Controller address |
|
|
gRPC deadline applied to each individual RPC |
|
off |
Diagnostics to stderr, prefixed |
|
Print usage and exit |
--timeout used to default to 600 seconds because a placement on a large fabric
can run for minutes and the CLI waited for it in a single call. It no longer does:
placement runs as an operation on the controller and the CLI polls it, so every
RPC returns promptly and the deadline only has to cover the heaviest single query.
Use --placement-budget to bound how long the CLI waits for a placement, and
--sync if you need the old single-call behaviour back.
Several options are shared by more than one command: --host-id <id> (repeatable,
filters by host), --output <path> / -o (write payload to a file instead of
inlining it in the JSON), and --source <psd|fsd> (see
topology sources).
Commands
query-physical-topology
Fetches the aggregated PhysicalSystemDescriptor via QueryPhysicalTopology.
Option |
Description |
|---|---|
|
Restrict to these hosts (repeatable) |
|
Connectivity source. Default |
|
Write the descriptor as textproto to |
# Whole fabric, as JSON
tt-fabric-manager-cli query-physical-topology
# Two hosts, golden-state wiring, saved as textproto
tt-fabric-manager-cli query-physical-topology \
--host-id host-a --host-id host-b --source fsd -o topology.textproto
Exits non-zero if the query fails. The trim_links_outside_filter request field
is not exposed by the CLI; use the HTTP API or the SDK for that.
query-factory-descriptor
Fetches the controller’s configured FSD files via
QueryFactorySystemDescriptor.
Option |
Description |
|---|---|
|
Filter the FSD to these hostnames (repeatable) |
|
Write the serialized FSD to a file. With multiple files, they are suffixed |
Requires the controller to be configured with
controller.factory_system_descriptor_search_path.
get-valid-placements-mgd
Maps a Mesh Graph Descriptor onto the fabric, and can emit launcher configuration for a chosen placement.
By default this starts a placement operation
on the controller and polls it to completion, printing the same JSON as before
plus the operation_id and operation_state it ran as. Ctrl-C cancels the
operation on the controller rather than merely walking away from it, and exits
130. Progress goes to stderr when it is a terminal, or with --verbose.
Option |
Default |
Description |
|---|---|---|
|
required |
MGD in textproto form |
|
Restrict placement to these hosts (repeatable) |
|
|
|
Connectivity source |
|
|
How long to wait. |
|
controller’s maximum |
Budget requested for the operation on the controller, clamped down to that maximum |
|
derived from the request |
Makes retrying safe: a retry with the same key joins the running operation instead of starting a second solve |
|
off |
Start the placement, print its operation id, and exit without waiting |
|
off |
Use the single blocking |
|
|
Which returned placement the launcher outputs describe |
|
Also write a rank bindings YAML ( |
|
|
Also write an OpenMPI rankfile |
|
|
value of |
Value written to the rank bindings file’s |
tt-fabric-manager-cli get-valid-placements-mgd \
--mgd-file examples/mgd.2x4.textproto \
--rank-bindings-out rank_bindings.yaml \
--rankfile-out rankfile
The command exits non-zero unless the status is PLACEMENT_MGD_SUCCESS, so it
can gate a job launch directly. When the wait ends without a placement — cancelled,
out of budget on the controller, or interrupted — status carries the operation’s
state instead of a placement status, placements is empty, and operation_id
identifies the operation to follow up on.
Against a controller too old to know about placement operations, the command falls
back to the blocking call automatically (visible with --verbose), in which case
--timeout has to cover the solve again.
Warning
Only textproto MGDs are accepted — the file must end in .textproto or .txt.
Binary .pb files are rejected with a message pointing at protoc; convert
first. (The built-in --help text still claims .pb is supported.)
placement-operation
Shows one placement operation, and optionally waits for it. The counterpart to
--async: start a placement in one job step and collect it in another, without
either holding a connection open for the duration.
Option |
Default |
Description |
|---|---|---|
|
required |
Operation to show |
|
off |
Poll until the operation finishes, then print it with its result |
|
|
How long to wait when using |
OP=$(tt-fabric-manager-cli get-valid-placements-mgd --mgd-file mesh.textproto --async | jq -r .operation_id)
tt-fabric-manager-cli placement-operation --operation-id "$OP" --wait
Exits zero whenever the operation could be read, including while it is still
running: state and result.status carry the outcome. An id the controller does
not know is an error with error_code: NOT_FOUND, which also covers results past
their retention window and ids from a previous controller process.
cancel-placement-operation
Stops a placement operation on the controller. Cancellation is cooperative, so the
reported state may still be SOLVING and reach CANCELLED shortly after.
Cancelling an operation that already finished changes nothing and keeps its
result.
Option |
Default |
Description |
|---|---|---|
|
required |
Operation to stop |
list-placement-operations
Lists the placements the controller is running or still retains results for, most recently created first — including those started by other clients and by the web UI. Useful for answering “what is this controller busy with?”.
Option |
Default |
Description |
|---|---|---|
|
off |
Attach each finished operation’s placement |
show-topology
The one human-oriented command: renders an ASCII summary of hosts and cross-host
connectivity from QueryTopologySummary. Output width follows the terminal, or
COLUMNS when it cannot be detected. Errors go to stderr.
Option |
Description |
|---|---|
|
Build the view from the discovered PSD (default), the FSD, or the union of both. |
|
Ask the controller to diff PSD against FSD and report missing and unexpected cross-host links per host. Requires a configured FSD |
tt-fabric-manager-cli show-topology --source combined --validate