kubectl ome accelerator Unreleased: coming in v1.3
Show the accelerator class or policy that the engine and decoder of an InferenceService ask for, and the resource requests their pods start from.
kubectl ome accelerator shows the AcceleratorClass or selection policy that the engine and decoder of an InferenceService ask for, and the resource requests their pods start from. It can't show the class that OME picked, because OME doesn't record it in the status. This is a known bug. To see that class, check the node selector of the component's pods, as in Step 4 of Select accelerators. Select accelerators shows how to name a class or choose a policy.
kubectl ome accelerator SUBCOMMAND INFERENCESERVICE [flags]| Subcommand | What it does |
|---|---|
explain |
Shows each component's class or policy, and its base requests. |
explain¶
kubectl ome accelerator explain INFERENCESERVICE [flags]explain prints a row for the engine when spec.engine is set, and one for the decoder when spec.decoder is set. The router gets no row, because OME never picks a class for it.
In -o wide, STATUS_FRESHNESS reflects the observed generation of a component's workload, rather than whether the status is current. This is a known bug.
For a component with a class or policy, SEL and its issue depend on how the InferenceService runs:
| When | SEL | Issue |
|---|---|---|
| The InferenceService runs as a Deployment whose generation matches the InferenceService's. | Missing |
SelectionNotReported |
| The Deployment's generation is behind, for example after a change to the InferenceService that left the Deployment as it was. | Unavail |
StatusStale |
| The Deployment's generation is ahead, for example after an HPA or KEDA scaled it. | Invalid |
StatusInvalid |
| Every component has run on OMENative since the InferenceService was created. | Unavail |
StatusUnobserved |
| The CLI couldn't resolve the runtime in force, or the InferenceService uses VirtualDeployment. | Unavail |
ActiveConfigurationUnavailable |
A component with no class or policy shows None. The report shows a declared class or policy even when the runtime lists no classes in acceleratorRequirements.acceleratorClasses, and OME then applies no class. Step 2 of Select accelerators shows how to check the list.
Flags¶
| Flag | Default | Description |
|---|---|---|
--ome-namespace |
ome |
Namespace where the OME control plane is installed |
-o, --output |
table |
Output format: table, wide, json or yaml |
Plus the standard kubeconfig flags, such as -n and --context.
Required RBAC lists the permissions explain needs.
Output fields¶
explain takes the name of one InferenceService and prints a table. -o wide prints each field on its own row, with its evidence. -o json and -o yaml print the whole report, with kind: AcceleratorExplainReport.
The table has these columns:
| Column | What it shows |
|---|---|
| COMP | The component: engine or decoder. |
| POLICY | Explicit when the component names a valid class. Otherwise its policy: BestFit, Cheapest, MostCapable, FirstAvail for FirstAvailable, or -. |
| CLASS | The declared class when its name is valid, else -. Names over 16 characters are cut in the middle with .... |
| SEL | Whether the status reports a selection: Missing, Unavail, Invalid or None. The table under explain says when each appears. |
| REQUESTS | The base requests, such as base:cpu=10,+2. |
| ISS | The component's issues, plus any issues that belong to no row. -o wide lists them. |
REQUESTS shows the first base request by name and the number of others, cut to 18 characters. The base requests are those of the component's serving container, or of its leader in a multi-node component. The CLI works them out from the InferenceService and the runtime in force, or its pinned revision, which it reads from the OME namespace that --ome-namespace sets. When the InferenceService names no runtime, the CLI picks one as OME would. The base requests leave out the class: a class with resources changes what the pods request, unless the runner sets its own. See How InferenceServices use a class. REQUESTS shows base:Unknown when the CLI couldn't work out the base requests, base:Invalid when they're malformed, and a bare None, Unknown or Invalid when the serving container requests nothing.
-o wide has the columns SCOPE, COMP, FIELD, VALUE and EVIDENCE. EVIDENCE says how the CLI got each value:
| Evidence | Meaning |
|---|---|
Declared/Service |
Set in spec.acceleratorSelector. |
Declared/Component |
Set in the component's acceleratorOverride. |
Declared |
Read from the InferenceService's spec. |
Observed |
Read from the API server by this command, as in the SOURCE rows. |
Computed |
Worked out by the CLI, as the base requests are. |
Unavailable |
The CLI couldn't get the value. |
As in OME, a class in an acceleratorOverride wins over one in spec.acceleratorSelector, and a class wins over a policy.
The first two rows describe the whole report:
| Row | What it shows |
|---|---|
SUMMARY STATE |
The state of the report, in the next table. |
SUMMARY STATUS_FRESHNESS |
How status.observedGeneration compares with metadata.generation: Current if equal, Stale if lower, Unobserved if 0, Invalid if higher. |
The report can be in these states:
| State | Meaning |
|---|---|
Partial |
There are issues, but nothing is malformed. This is the usual state for an InferenceService with a class or policy. |
NotConfigured |
No component has a class or policy, and there are no issues. |
Invalid |
A value is malformed, or STATUS_FRESHNESS is Invalid for a component with a class or policy. The issues say which. |
Each component then has these rows. A row with no value is left out.
| Row | What it shows |
|---|---|
INTENT MODE |
Class when the component names a class, Policy when it sets only a policy, and NotConfigured when it has neither. Invalid when the class name isn't a valid object name. The ome.io/accelerator-class annotation doesn't count, because it doesn't pick a class. |
INTENT POLICY |
The declared policy. |
INTENT CLASS |
The declared class. |
SELECTION STATE |
As in SEL: NotReported, NotConfigured, Unavailable or Invalid, for Missing, None, Unavail and Invalid. |
SELECTION REASON_STATE |
Whether the status gives a reason for the selection: NotReported, Unavailable or Invalid. |
CLASS STATE |
NotRequested, with the evidence -: the status reports no class for the CLI to read. |
REQUEST BASE_STATE |
Available, Unavailable or Invalid. |
REQUEST BASE |
Every base request, comma-separated, or None. It appears only when BASE_STATE is Available. |
REQUEST EFFECTIVE_STATE |
Whether the status reports requests: NotConfigured for a component with no class or policy, Invalid when STATUS_FRESHNESS is Invalid, and Unavailable otherwise. |
Each ISSUE row has an issue code in FIELD:
| Code | Meaning |
|---|---|
ActiveConfigurationUnavailable |
The CLI couldn't resolve the runtime configuration in force, for example because it can't read the runtime or the pinned revision, or because the InferenceService uses VirtualDeployment. |
ActiveRevisionInconsistent |
The metadata of the pinned runtime revision doesn't match its runtime or its content, so the CLI works out no base requests from it. |
BaseRequestsUnavailable |
The CLI couldn't work out the component's base requests. |
DeclaredClassInvalid |
The class that the spec names isn't a valid object name. |
RequestsInvalid |
The base requests are malformed, such as a value that isn't a non-negative quantity. |
SelectionNotReported |
The component has a class or policy, STATUS_FRESHNESS is Current, and the status reports no selection. |
StatusInvalid |
STATUS_FRESHNESS is Invalid, as in the table under explain. |
StatusStale |
STATUS_FRESHNESS is Stale, as in the table under explain. |
StatusUnobserved |
STATUS_FRESHNESS is Unobserved, as in the table under explain. |
For a declared class that doesn't exist, look for an AcceleratorClassError event on the InferenceService, as in The InferenceService has an AcceleratorClassError event.
The warnings sum up the issues:
PartialData: the report isPartialorInvalid.StaleEvidence: an issue isStatusStale.SourceUnavailable: an issue isActiveConfigurationUnavailableorBaseRequestsUnavailable.
The SOURCE rows, and sources in JSON and YAML, list what the report rests on, with the NAME, GENERATION and COLLECTED_AT time of each. They're the InferenceService and the runtime in force: a ServingRuntime, a ClusterServingRuntime or, for a pinned revision, a ControllerRevision, whose GENERATION is -.
In -o json and -o yaml, optional fields with no value are left out, and lists are always present, even when empty.
When something else reports a selection
If a tool other than OME writes status.components.<component>.selectedAccelerator, the report adds what it finds there, with the evidence Reported. SEL can then show Reported, and so can the report's state when there are no issues. CLASS shows the reported class, and REQUESTS shows the reported requests with no base: prefix. -o wide adds the SELECTION CLASS, SELECTION REASON_DIGEST, CLASS NAME and REQUEST EFFECTIVE rows. The digest stands in for the reason, which could hold credentials.
The CLI also reads the reported AcceleratorClass and lists it under SOURCE. CLASS STATE is then Observed, or says why the CLI couldn't use the class: NotFound, Forbidden, UnsupportedAPI, Unreadable or Invalid. These issues can appear too:
| Code | Meaning |
|---|---|
ClassNotFound, ClassForbidden, ClassUnreadable, ClassUnsupportedAPI |
The CLI couldn't read the reported class. These add the warning SourceUnavailable. |
ClassInvalid |
The reported class, or its name, is malformed. |
ReportedClassMismatch |
The reported class differs from the one the spec names. |
NodeSelectorInvalid, RequestsInvalid |
The reported nodeSelector or resourceRequests is malformed. |
RequestsNotReported |
The selection has no resourceRequests. |
SelectionUnexpected |
A component with no class or policy has a selection. |
UnexpectedComponentEvidence |
A component other than the engine and decoder, such as the router, has a selection. |
Examples¶
The examples use the InferenceService from Select accelerators, which runs as a Deployment, names the runtime srt-llama-3-3-70b-instruct and pins the class nvidia-h100. Explain its accelerator selection:
kubectl ome accelerator explain llama-3-3-70b-instruct -n llama-demoCOMP POLICY CLASS SEL REQUESTS ISS
engine Explicit nvidia-h100 Missing base:cpu=10,+2 1The engine names nvidia-h100, so POLICY is Explicit and CLASS shows the declared class. SEL is Missing, and ISS counts the SelectionNotReported issue. REQUESTS shows cpu=10 and two more base requests.
For the InferenceService in the guide's "Choose a policy" tab, which sets policy: BestFit and minMemory: 80 in place of the class, POLICY shows the policy, and CLASS shows -:
COMP POLICY CLASS SEL REQUESTS ISS
engine BestFit - Missing base:cpu=10,+2 1The report doesn't show the constraints.
Print every field of the InferenceService that pins nvidia-h100:
kubectl ome accelerator explain llama-3-3-70b-instruct -n llama-demo -o wideSCOPE COMP FIELD VALUE EVIDENCE
SUMMARY - STATE Partial Computed
SUMMARY - STATUS_FRESHNESS Current Computed
INTENT engine MODE Class Declared
INTENT engine CLASS nvidia-h100 Declared/Service
SELECTION engine STATE NotReported Unavailable
SELECTION engine REASON_STATE NotReported Unavailable
CLASS engine STATE NotRequested -
REQUEST engine BASE_STATE Available Computed
REQUEST engine BASE cpu=10,memory=160Gi,nvidia.com/gpu=4 Computed
REQUEST engine EFFECTIVE_STATE Unavailable Unavailable
ISSUE engine SelectionNotReported - Computed
SOURCE ClusterServingRuntime NAME srt-llama-3-3-70b-instruct Observed
SOURCE ClusterServingRuntime GENERATION 2 Observed
SOURCE ClusterServingRuntime COLLECTED_AT 2026-09-14T20:30:00Z Observed
SOURCE InferenceService NAME llama-demo/llama-3-3-70b-instruct Observed
SOURCE InferenceService GENERATION 1 Observed
SOURCE InferenceService COLLECTED_AT 2026-09-14T20:30:00Z Observed
WARNING - CODE PartialData ComputedThe class comes from spec.acceleratorSelector, so its evidence is Declared/Service. The base requests are the runtime's 10 CPUs, 160 GiB of memory and 4 GPUs. nvidia-h100 sets no resources, so the pods request the same.
After an edit that leaves the Deployment as it was, SEL can show Unavail, with the issue StatusStale:
COMP POLICY CLASS SEL REQUESTS ISS
engine Explicit nvidia-h100 Unavail base:cpu=10,+2 1-o wide shows STATUS_FRESHNESS Stale and the warnings PartialData and StaleEvidence. An InferenceService whose components have all run on OMENative since it was created shows the same row, with the issue StatusUnobserved.
Without spec.acceleratorSelector, the engine has no class or policy, and the report is NotConfigured, with no issues or warnings:
COMP POLICY CLASS SEL REQUESTS ISS
engine - - None base:cpu=10,+2 0To use the report in a script, print its issues from the JSON:
kubectl ome accelerator explain llama-3-3-70b-instruct -n llama-demo -o json \
| jq -r '.content.issues[] | "\(.component) \(.code)"'engine SelectionNotReportedExit codes¶
| Code | Meaning | Returned by |
|---|---|---|
0 |
Success | explain, whenever it prints a report, even a Partial or Invalid one. |
1 |
General error | explain, when it can't build a report, such as for a bad name, flag or namespace, a failed read of the InferenceService, reads that take over 10 seconds in all, or Ctrl-C. |
Errors print to stderr as error: <message>. For a missing InferenceService, the message is read InferenceService "llama-demo/llama-3-3-70b-instruct": not found.