Doca Urom Svc
NVIDIAOfficialCreated by NVIDIA
- Skill
- Tool integration
- Cloud and DevOps
- Apache-2.0
- Medium risk
AutoGineer summary
Written by AutoGineer from the skill’s own files, not by the author
The DOCA UROM Service is a DPU-side containerized service that executes remote memory operations (puts, gets, atomics, and collectives) offloaded by host applications using the doca-urom library. It operates as a paired executor, requiring strict version alignment between the host library and the DPU service. The service does not implement standalone access control; security is managed via DOCA Comch pairing and underlying RDMA permissions. This skill provides the operational framework for deploying, configuring, and debugging the service container on BlueField Arm, ensuring that HPC workloads can effectively offload communication tasks to the DPU.
What it does
- Deploys and manages the DOCA UROM Service container on BlueField Arm.
- Configures UCX components and collective exposure based on hardware capabilities.
- Establishes and validates DOCA Comch pairing between the host and the DPU service.
- Sizes enqueue queues to optimize offload performance.
- Monitors service health and RDMA transport status to diagnose offload failures.
- Enforces version compatibility between the host-side library and the DPU-side service.
When to use it
- When deploying HPC clusters that utilize doca-urom for offloading collective communication.
- When troubleshooting performance issues where offloaded collectives are slower than host-CPU baselines.
- When diagnosing communication failures or NOT_PERMITTED errors between a host and the DPU.
- When configuring the DPU-side service to expose specific collective families to the host.
- When verifying the integrity of the paired-contract between the host library and the service container.
Advantages
- Offloads compute-intensive communication tasks from host CPUs to the DPU.
- Provides a structured approach to managing paired-contract services on BlueField.
- Enables fine-grained control over UCX component exposure and queue depth.
- Ensures secure operation through Comch pairing and least-privilege RDMA access.
- Facilitates systematic debugging of complex offload-path failures.
Usage examples
- “How do I configure the DOCA UROM Service to support all-reduce collectives?”
- The agent will guide you to the configuration-axes section of the capabilities companion to identify the required UCX component flags and the corresponding config-authoring steps in the tasks companion.
- “My host application receives DOCA_ERROR_NOT_PERMITTED when calling doca_ctx_start. Is the service blocking me?”
- The agent will direct you to the layered ladder in the tasks companion to verify Comch pairing and RDMA permissions, clarifying that the error is a transport-level signal rather than a service-side authz block.
Install
Download the skill as a ZIP:
https://mp-staging.autogineer.com/agent-skills/nvidia/doca-urom-svc/downloadUnzip it into the cross-client skills folder of your project:
mkdir -p .agents/skills && unzip doca-urom-svc.zip -d .agents/skills
Documentation by NVIDIA
DOCA UROM Service
Scope first. This skill operates the DPU-side service container.
Writing the host-side application code that submits offloaded
operations (from an MPI or UCX job, for example) is not this skill:
route it to doca-urom/SKILL.md, the host
library, and come back here only for the service it pairs with.
Examples
"Slow UCX collectives on a BlueField pair." — this is in scope for the DPU-side service container; host app code belongs to the
doca-uromlibrary skill."Unexpected NOT_PERMITTED after start." — verify Comch pairing and least-privilege memory regions before widening exposure.
Instructions
Follow Loading order below. Open the tasks companion for configure / pair / debug. Open the capabilities companion for queues and UCX components.
Where to start: This skill is for operating the DOCA UROM
Service container on the BlueField Arm side. It is not for
linking against a library, and it is not the host-side
enqueue surface. If the user wants to deploy or run the
service container, start at the tasks companion ## configure. If the question is what
shape of service is DOCA UROM Service, what does it execute, and
how does it pair with the host-side library, start at
the capabilities companion. If DOCA is not installed
on the BlueField yet, route to
doca-setup/SKILL.md first. If the user's
real question is about writing host-side code that enqueues
remote memory operations through the paired API, the right
skill is doca-urom/SKILL.md — the
host-side library; this service is the DPU-side executor that
library offloads to.
How to use this skill. Read this file, then search the companion file
for the ## <name> heading the question needs and read that whole section.
Answer completely from it, quoting only its symbols and commands. Do not
browse docs; use the entry points in doca-public-knowledge-map. For
out-of-scope requests, name the skill that owns them and stop.
Example questions this skill answers well
The CLASSES of DOCA UROM Service questions this skill is built to answer, each with one worked example. The class is the load-bearing piece; the worked example is one instance.
"Is DOCA UROM Service the right thing to deploy on my BlueField, or do I just need the host library?" — worked example: "my MPI cluster's host nodes link against
doca-urom; what runs on the BlueField side and why must it also be there?". Answered by the publisher / executor paired-contract model in the capabilities companionthe deploy-this-when path-selection rule in the capabilities companion
the env-prep checklist in the tasks companion.
"Which library / service version pair am I supposed to run together?" — worked example: "the host fleet upgraded to a newer
doca-urom; do I have to upgrade the service containers on every BlueField, or is the pairing flexible?". Answered by the version-contract overlay in the capabilities companionthe paired-version step in the tasks companion +
doca-version/SKILL.mdas the canonical body.
"What does the service configure — UCX components, collectives, queue depths, how the host pairs over Comch?" — worked example: "my upstream stack wants to offload all-reduce collectives; how do I tell the service to expose that collective family and how does the host pair to it over DOCA Comch?". Answered by the configuration-axes table in the capabilities companion
the config-authoring step in the tasks companion.
"Host's
doca-uromcalls fail withNOT_PERMITTEDeven thoughdoca_devaccess is fine — is this the service?" — worked example: "first enqueue from host returnsDOCA_ERROR_NOT_PERMITTEDafter a cleandoca_ctx_start()". Answered by the Comch-pairing / RDMA-permissions layer in the capabilities companionthe layered ladder in the tasks companion, which surfaces "is the DOCA Comch endpoint pair correctly established and is the underlying RDMA permission stack happy" BEFORE blaming a service-side authz layer (no such layer exists in the shipped binary —
NOT_PERMITTEDhere is a Comch / RDMA signal, not a UROM-service authz signal).
"Operations enqueue but never complete — service or substrate?" — worked example: "host enqueue succeeds, the progress engine never sees the completion, what layer is hung". Answered by the service-vs-substrate split in the capabilities companion
the layered ladder in the tasks companion, which separates service queue full / handler stuck from underlying RDMA transport down before recommending a fix on either side.
"Performance with offload is worse than the host-CPU baseline — is the service the bottleneck?" — worked example: "we deployed the service, the workload runs, but collectives are slower than when the host CPU posted them itself". Answered by the offload-isn't-free rule in the capabilities companion
the smoke-before-scale step in the tasks companion, which surfaces the workload's pattern may not actually benefit from DPU offload as a legitimate diagnosis, not a service bug.
Audience
This skill serves external operators and platform teams who
deploy and operate the DOCA UROM Service container on
BlueField to receive and execute the remote memory operations
HPC / UCX / MPI workloads on the host enqueue through
doca-urom. Concretely: people running the service container
on BlueField Arm, choosing which UCX components and collectives
it exposes, sizing the enqueue queue depth, wiring the DOCA
Comch endpoint pairing between host doca-urom and the
service container (the shipped binary has NO standalone
service-side "host-endpoint authorization list" — access is
governed by Comch pairing + the underlying RDMA permissions),
and validating the host-library + DPU-service paired contract
end-to-end before scaling a real HPC workload on top.
It is not for NVIDIA developers contributing to the DOCA
UROM Service itself, nor a programming guide for building on
DOCA libraries (see doca-programming-guide/SKILL.md). DOCA
UROM Service is a service, not a library: the operator
deploys a container and configures it; there is no
lib<uromservice>.so to link. The paired host-side library
doca-urom/SKILL.md is a separate
skill with its own audience (HPC application developers, not
service operators); refuse to collapse the two.
Path selection up front. Deploy this service when the HPC
cluster's host nodes use the doca-urom library and want host
CPU freed for compute by offloading collective communication
to the BlueField, when the team is building a custom HPC stack
on top of doca-urom, or when an upstream MPI / UCX stack has
been wired to use UROM as a transport. Do not deploy this
service when the hosts are not using doca-urom, when the HPC
stack is neither MPI nor UCX (this service won't help — it
executes UROM-shaped offloads, not arbitrary networking), or
when the BlueField hardware is too constrained for the
intended offload (a cap-query at deploy time surfaces this
upfront). Deploying speculatively where host workloads will
not offload through doca-urom adds operational complexity
with no benefit.
When to load this skill
Load this skill when the user is doing hands-on DOCA UROM Service deployment work on a BlueField where DOCA is already installed. Concretely:
Deciding whether DOCA UROM Service is the right answer for the user's HPC environment (vs. keeping the host CPU on the communication path with raw
doca-rdmaor with no DPU offload at all).Deploying the service container on BlueField Arm — pulling the image per the public DOCA UROM Service Guide, setting the daemon's CLI flags / env (
SERVICE_ARGS,UROM_PLUGIN_PATH) and mounting theplugins/directory, starting / stopping the container under the BlueField container runtime per the public Container Deployment Guide.Choosing the service's configuration axes — which UCX components / collectives the service exposes (cap-bound to what the BlueField generation supports), enqueue queue depths for the offload path, and how the host's
doca-uromlibrary pairs to the service over DOCA Comch (access is governed by that Comch pairing + the underlying RDMA permissions — there is no service-side authorization list). Pair only explicitly intended hosts and keep RDMA exports and permissions to the minimum the workload requires; pre-start verification through the documented Comch and RDMA read-only surfaces is mandatory.Confirming the host-library + DPU-service version pair is one the DOCA Compatibility Policy supports — a mismatch is the canonical subtle-failure mode for the paired contract.
Reading the service container's logs, the service's observability surface, and the underlying RDMA substrate counters to confirm the service is actually executing the operations the host enqueued.
Debugging a deployment where the container is healthy but the host's
doca-uromenqueues fail or never complete, or where the offload's performance is worse than the host-CPU baseline.
Do not load this skill for general DOCA orientation,
install of DOCA itself, host-side doca-urom library API
questions, or non-UROM HPC stack topics. For those, route via
doca-public-knowledge-map/SKILL.md,
doca-setup/SKILL.md, or the matching
host-side library skill
doca-urom/SKILL.md.
What this skill provides
This is a thin loader. Substantive material lives in two companion files:
the capabilities companion — the service's architecture (long-running container on BlueField Arm that executes UROM offloads from paired hosts), the publisher / executor paired-contract model and its load-bearing version-coupling rule, the configuration axes (UCX-component / collective surface, enqueue queue sizing, DOCA Comch endpoint pairing), the deployment shape (container on BlueField Arm per the public Container Deployment Guide), the pairing surface (host
doca-uromlibrary + underlyingdoca-rdmatransport substrate), the observability surface (container state + service logs + RDMA counters), the error taxonomy (container-runtime vs service-side-resource vs transport-substrate vs paired-version-mismatch), and the safety policy (path-selection rule, version-contract rule, smoke-before-scale).the tasks companion — step-by-step workflows for the in-scope service verbs:
configure,build,modify,run,test,debug, plus aDeferred task verbsblock routing out-of-scope questions and aCommand appendixof recurring commands.
The skill assumes a BlueField where DOCA is already installed
and the operator has the privileges the public DOCA UROM
Service Guide expects to pull, run, and configure containers
on BlueField Arm. It does not cover installing DOCA — that path
goes through doca-setup/SKILL.md. It does
not cover the host-side doca-urom library API — that is
doca-urom/SKILL.md.
What this skill deliberately does not ship
This skill is agent guidance, not a templates or sample-config bundle. To keep the boundary clean, it deliberately does not contain — and pull requests should not add:
Pre-baked DOCA UROM Service flag / env bundles (full UCX-component / collective exposure manifests, ready-to-run queue-depth
SERVICE_ARGSstrings) intended to be copy-pasted into production. Service configuration is deployment-specific (per the BlueField generation's capability cap, per the workload's collective pattern); the safe answer for an external operator is to derive the daemon's flags / env from the public DOCA UROM Service Guide against their own deployment. The agent's job is to prescribe the procedure and the configuration-axes decision, not to ship a config the user might run unmodified.Container image names, tags, or registry paths. The authoritative image source is the public DOCA UROM Service Guide reachable through
doca-public-knowledge-map ## DOCA services(doca-public-knowledge-map/SKILL.md#doca-services); the service's image tag is version-bound and changes between DOCA releases AND must match the host-side library version per the paired-contract rule. Inventing or memorizing a tag is the canonical hallucination failure mode for a service skill, and for this service in particular it can silently produce a host-library / service version mismatch.Host-side
doca-uromapplication source code, build manifests, or MPI / UCX integration glue. Those live on the host and belong todoca-urom/SKILL.md(host library API) or to upstream MPI / UCX documentation (stack-side integration). This skill names that the host side must be wired throughdoca-uromand that the version must pair with the service; the host-side bodies are out of scope.A
samples/,templates/, orreference/subtree of any kind. A mock artifact labeled "reference" reads as production-ready, and for a paired-contract service that implicitly claims a host-library version pairing the skill cannot guarantee.
Loading order
Read this skill first to confirm the user's question is in scope and that the DOCA UROM Service is the right answer at all (vs. routing entirely to the host-side library skill, or away from UROM if the workload doesn't actually benefit from offload).
For the service's deployment shape, the publisher / executor paired-contract model, the configuration axes, the host-library + RDMA-substrate pairing surface, the error taxonomy, the observability surface, the version-coupling rule, and the path-selection safety policy, see the capabilities companion.
For step-by-step workflows — configure, build, modify, run, test, debug — see the tasks companion.
Related skills
doca-urom/SKILL.md— the paired host-side library. Hosts linkdoca-uromto ENQUEUE remote memory operations; this service EXECUTES them. The two skills load together for any HPC offload deployment and they do NOT collapse into one another: the library never executes on its own; this service is never enqueued through by itself. Mismatches between the library and the service are the dominant subtle-failure mode for the paired contract.doca-rdma/SKILL.md— the underlying RDMA transport substrate this service uses to actually move bytes once a host enqueue lands on the DPU. The service does NOT replace RDMA; it sits on top of it. A failing RDMA fabric surfaces at the service as operations enqueued but never complete and at the host asDOCA_ERROR_IO_FAILED; the fix is on the substrate side, not in this service's config.doca-public-knowledge-map/SKILL.md— the routing table to the public DOCA UROM Service Guide and the rest of the public DOCA documentation set. The service URL is listed under## DOCA services(doca-public-knowledge-map/SKILL.md#doca-services).doca-setup/SKILL.md— env preparation and install verification on the BlueField where the service container will run, including the I have no install yet path via the public NGC DOCA container. This skill assumes its preconditions are satisfied on BlueField Arm.doca-version/SKILL.md— canonical DOCA version-handling rules. This service's container tag is version-bound AND its host-library pairing is version-bound; this skill's## Version compatibilitycross-links the four-way match rule and adds the host-library + DPU-service paired-version overlay that is load-bearing for UROM.doca-structured-tools-contract/SKILL.md— the bundle's structured-tools precedence rule (detect / prefer / fall back / report). The Command appendix in the tasks companion honors this contract.doca-programming-guide/SKILL.md— general DOCA patterns. The DOCA UROM Service is service-shaped not library-shaped, so the build / modify / first-app pattern there does not apply directly, but the cross-library debug discipline (env-before-program, layer-before-config) remains useful when the service reports an error that originated in the container runtime or in a DOCA library it called.doca-debug/SKILL.md— the cross-cutting debug ladder (install / version / build / link / runtime / program / driver). Service-specific debug (container not running, host-library / service version mismatch, transport substrate down, offload not actually helping) overlays on top of that ladder.doca-dms/SKILL.mdanddoca-firefly/SKILL.md— sibling service skills. The agent reading these skills should see the same service-skill shape (container on BlueField Arm, public Container Deployment Guide as the canonical recipe, env preconditions checked first, configured via the documented per-service surface — for UROM that is the daemon's CLI flags / env, not a mounted config file — smoke-before-scale) layered on top of a different per-service problem domain (DMS = device management via gNMI / gNOI; Firefly = time synchronization via PTP; UROM Service = HPC remote memory operation execution via the paireddoca-uromlibrary).
Files
- ATTRIBUTION.mdAdded by AutoGineer897 B
- BENCHMARK.md11.2 KiB
- CAPABILITIES.md30.5 KiB
- LICENSELicence file added by AutoGineer11.2 KiB
- SKILL.md18.2 KiB
- SKILLCARD.yaml2.7 KiB
- TASKS.md30.2 KiB
- evals/evals.json2.5 KiB
- skill-card.md5.2 KiB
- skill.oms.sig5.1 KiB
TASKS.md
DOCA UROM Service — Tasks
Where to start: The order is configure → build → modify → run → test → debug. The ## test verb is an iterative loop,
not a one-shot pass — see the eval-loop overlay in ## test
below. For the DOCA UROM Service, build and modify are
about deployment configuration (container image selection,
the daemon's CLI flags / env, host-library version pairing), not
about compiling source.
These verbs cover the in-scope service operational workflows
for an external operator deploying this service on BlueField.
Every step assumes the operator has consulted the live public
DOCA UROM Service Guide (reachable through
doca-public-knowledge-map ## DOCA services (doca-public-knowledge-map/SKILL.md#doca-services))
and is using it as the authoritative reference; this file
prescribes the order and what to look up where, not a
copy-paste runbook.
configure
Preparing the BlueField, picking the configuration axes, confirming the paired host-library version, and wiring the substrate before the container starts.
Confirm this service is actually the right answer. Per the path-selection rule in
CAPABILITIES.md ## Safety policy:Does the host fleet use the
doca-uromlibrary AND have an MPI / UCX collective pattern where host CPU is the bottleneck on communication?Does the BlueField generation in use support the UCX components / collectives the host workload wants to offload?
If either answer is no, stop here and tell the user honestly: keep the host's existing communication path, do not deploy this service speculatively.
Confirm DOCA is installed on the BlueField. This skill expects DOCA already on the BlueField Arm. If that has not been verified, run
doca-setup ## test(doca-setup/TASKS.md#test) first. If there is no install yet, route todoca-setup ## no-install(doca-setup/TASKS.md#no-install) for the public NGC DOCA container path.Confirm the paired host-library version. Per the version-contract rule in
CAPABILITIES.md ## Version compatibility, the host-sidedoca-uromlibrary version and this service's container tag are a paired contract. Walk the host fleet: capturepkg-config --modversion doca-uromon the hosts that will offload to this BlueField; cross-check that the service container tag the operator intends to deploy is one the DOCA Compatibility Policy lists as compatible with that host library version. If the user does not know which tag to deploy, the right answer is to look it up in the live public DOCA UROM Service Guide whose version matches the host library — NOT to memorize a tag. Route any version-mismatch ambiguity todoca-version/SKILL.md.Confirm the underlying RDMA transport substrate. This service consumes the BlueField's
doca-rdmasubstrate to actually move bytes. Walk the substrate bring-up perdoca-rdma ## configure(doca-rdma/TASKS.md#configure) — at minimum, confirm the BlueField port the service will use is up and the inter-node fabric routes between the BlueFields the host fleet will exchange UROM operations between. A service deployed over a broken RDMA fabric will surface as stalled completions at the host (perCAPABILITIES.md ## Error taxonomylayer 3) and the user will incorrectly blame the service. Predeclare the exact memory regions the workload needs to export and the minimum read, write, or atomic permissions each operation requires. Broader exports or permissions are not an acceptable bring-up shortcut.Decide the three service-configuration axes. Per the configuration-axes table in
CAPABILITIES.md ## Capabilities and modes, commit before starting the container to:UCX-component / collective surface — which components and collective primitives this service instance exposes for host offload. Cap-bound to the BlueField generation; cross-check against what the host's
doca_urom_cap_*query (perdoca-urom CAPABILITIES.md ## Capabilities and modes(doca-urom/CAPABILITIES.md#capabilities-and-modes)) believes is supported.Enqueue queue depth — sized to the cluster's intended in-flight depth per host. Undersized queues generate
DOCA_ERROR_AGAINat the host; oversized queues hide service-side handler stalls.DOCA Comch endpoint pairing — how the host's
doca-uromlibrary reaches the service (over a DOCA Comch endpoint pair). Name the exact intended host endpoint(s) and reject broad, wildcard, ambiguous, or unintended pairing. Access is governed by that Comch pairing plus the underlying RDMA permissions; there is NO service-side authorization list to author — a host-visibleDOCA_ERROR_NOT_PERMITTEDis a Comch / RDMA /doca_devsignal, not a UROM-service authz decision.
Set the daemon's flags and env. From the public DOCA UROM Service Guide, derive the daemon's CLI flags (passed via the container's
SERVICE_ARGS— e.g.--max-msg-size/-m, log level-l/--sdk-log-level) and theUROM_PLUGIN_PATHenv for the chosen UCX-component / collective surface and queue depth. Quote flags from the live guide / the daemon's--help, do NOT infer them from generic UCX or container-runtime knowledge.doca_urom.yamlmounts only theplugins/directory and the log directory — there is no service config file to author or place on the filesystem.Verify the access boundary before container start. Use the documented read-only
doca-comm-channel-admin/SKILL.mdscan and the program-sidedoca-comch TASKS.md ## test(doca-comch/TASKS.md#test) view to confirm the Comch mapping contains only the intended host endpoint(s). Then walkdoca-rdma TASKS.md ## test(doca-rdma/TASKS.md#test) to confirm the intended peer, healthy transport, narrowly scoped exported regions, and only the permissions required by the workload. Capture both outputs. Any unexpected peer, over-broad export, excess permission, or non-green substrate blocks startup.Sanity check before container start. Confirm with the user: which BlueField the service will run on; which container tag the operator intends to pull; which host library version the deployment is paired against; which UCX components / collectives the service will expose; what the queue depth is; how the paired hosts reach the service over DOCA Comch; which RDMA regions and permissions are required; and that step 7 passed. If any are unclear, stop and ask — do not start the container against an underspecified configuration; a deploy that races past step 8 is the canonical source of the layer-4 (paired-version mismatch) debug failures in
CAPABILITIES.md ## Error taxonomy.
build
The DOCA UROM Service is shipped as a container, not a
library. There is no service application artifact for the
operator to build — the container ships from NGC and is
configured through the daemon's CLI flags (SERVICE_ARGS) and
the UROM_PLUGIN_PATH env at container start, not through a
mounted config file.
If the user is asking how to build a host-side UROM
application (an MPI / UCX consumer that enqueues operations
through doca-urom), that is not a service question:
For host-side
doca-uromapplications, the build is the host library's build — route todoca-urom ## build(doca-urom/TASKS.md#build). The service's contribution to that conversation is that the service's container tag must be one the DOCA Compatibility Policy lists as paired with the host'sdoca-uromversion — the build itself is owned by the host-library skill.For applications that build directly against
doca-rdma(skipping UROM), the build is the RDMA library's build — route todoca-rdma ## build(doca-rdma/TASKS.md#build).
If the user is instead asking how to build the service
container itself from source, that is not an
external-operator workflow — the container ships pre-built
from NGC and rebuilding it is out of scope for this skill.
Route to the public DOCA UROM Service Guide via
doca-public-knowledge-map ## DOCA services (doca-public-knowledge-map/SKILL.md#doca-services).
modify
The DOCA UROM Service does not have a "modify a sample" workflow analogous to DOCA libraries; there is no service sample program a user starts from. The service analog of "modify" is adapt the documented container config recipe to the user's environment, with the paired-contract version pinning re-checked on every modification.
Start from the documented recipe. Identify the public DOCA UROM Service Guide's recipe that matches the user's target BlueField generation and intended offload surface. Quote it; do not author a new one from scratch.
Diff against the user's environment. Note the specific substitutions the user must make: container image tag (always derived from the paired host library version per the DOCA Compatibility Policy), BlueField port for the substrate, the
plugins/mount andUROM_PLUGIN_PATH, UCX-component / collective list, queue depth. Each substitution is a point at which the operator can break one of the three configuration axes or the version-pairing contract.Apply minimum-change. Change only what the user's environment forces. Every additional deviation from the documented recipe widens the surface for an unintended service / host pairing mismatch the operator will have to debug later.
Re-validate against the three configuration axes. Each substitution is a chance to accidentally break one of the three configuration axes (component / collective surface, queue depth, DOCA Comch endpoint pairing). Walk
CAPABILITIES.md ## Capabilities and modesone row at a time after every substitution.Re-validate against the version-contract rule. Per the version-contract rule in
CAPABILITIES.md ## Safety policy, any change that affects the container tag, OR that adds / removes a host endpoint paired against a different host library version, must also re-check the host-library + service-version pair against the DOCA Compatibility Policy. A modify that lands a new container tag without re-running the version-pair check is the canonical source of layer-4 subtle failures.Re-validate against the host fleet. A service config change that the operator validates in isolation may break one of the paired hosts' workloads. Coordinate with the host-side skill (see
doca-urom ## test(doca-urom/TASKS.md#test)) before scaling a service config change to a fleet that's actively offloading.
The agent's anti-pattern alert: a "clean rewrite of the service config from scratch" is almost always slower than adapting the public DOCA UROM Service Guide's recipe, because the service's config schema is documented per the public guide and is not 1:1 with generic UCX-server configuration.
run
Bringing up the service container, confirming the paired host library can reach it, and walking a single-operation smoke BEFORE layering any HPC workload on top.
Pull the service container image from NGC at the tag the public DOCA UROM Service Guide names for the operator's DOCA release AND host library version pair. Quote the tag from the live guide; do NOT memorize or invent the tag. A wrong tag is the canonical source of layer-1 (container runtime) and layer-4 (paired-version mismatch) errors simultaneously.
Re-check the pre-start gate. Confirm the captured Comch and RDMA verification from
## configurestep 7 is current for this intended host set, export set, and permission set. If it is stale or non-green, do not start the container.Start the container per the public Container Deployment Guide pattern. Set the daemon's
SERVICE_ARGS/UROM_PLUGIN_PATHand mount theplugins/directory as the public DOCA UROM Service Guide names (there is no service config file to mount). The runtime command shape (e.g.docker run/crictl/ BlueField container manager) is documented in the Container Deployment Guide reachable throughdoca-public-knowledge-map ## DOCA services(doca-public-knowledge-map/SKILL.md#doca-services).Confirm the container is running, not restart-looping. A restart loop is a layer-1 symptom per
CAPABILITIES.md ## Error taxonomy(container runtime / image tag / plugins mount); diagnose it before touching service config.Watch the service container's logs for startup. The container's stdout is the primary observability surface. The service should report that it is ready to receive host enqueues, name the UCX-component / collective surface it exposed, and report its queue sizing. The agent should NOT invent log line formats; quote what the live container is emitting.
Confirm one intended paired host can
doca_ctx_startagainst this BlueField. On a single paired host, walkdoca-urom ## configure(doca-urom/TASKS.md#configure) throughdoca_ctx_start; success here means the service accepted the host's connection and the host's library can begin enqueueing. Failure here surfaces layer-1 (container not reachable, or the DOCA Comch pairing not established) or layer-4 (host-library / service version mismatch) — walk the layers in## debug. An unintended host connecting is a failed access-boundary check, not a successful availability test.Single-operation smoke (next:
## teststep 1). Before driving any HPC workload, walk## teststep 1 once: one host enqueue → observe the service receive it in logs → observe one completion at the host. Only then layer the workload on top.
For the runtime version + container-tag cross-checks that
underlie "my service behaves differently from what the host
library expects", see
doca-version TASKS.md ## run (doca-version/TASKS.md#run)
and apply the host-library + service-version paired-version
overlay from
CAPABILITIES.md ## Version compatibility.
test
The DOCA UROM Service has no "compile and unit-test" workflow — testing is operational and end-to-end through the paired host library.
## test is an iterative loop, not a one-shot pass. Every
mutation (UCX-component / collective surface change, queue
depth change, Comch-pairing change, container tag change,
substrate change) re-opens the smoke sweep. Skipping the
re-run after a mutation is the failure mode this loop
replaces.
The eval-loop overlay (rows apply to every service deployment, not just one BlueField generation):
| Step | Why this is a loop, not a step | Where the substance lives |
|---|---|---|
| 1 → 3 → 1 | Step 3 (cluster-pattern check) often reveals an as-deployed gap in queue sizing or in the exposed UCX-component / collective surface; loop back to step 1 | ## test step 3 |
| 1 → ## debug | When the single-host smoke (step 1) does NOT see the service receive the enqueue, the deployment is non-functional — escalate to ## debug immediately, do not run later steps | ## debug |
| 2 → ## configure → 2 | When the cap-query disagreement smoke (step 2) shows the host's doca_urom_cap_* and the service's exposed surface don't match, the service config is wrong — loop back to ## configure step 5 and re-run | ## configure |
| 1..4 → ## run | Each loop iteration ends with a smoke; if all four pass, hand off to live ## run traffic | ## run |
The agent's rule: every mutation re-opens the sweep. A configuration change followed by "it probably still works" is exactly the failure mode the iterative loop is here to prevent.
Single-host single-operation smoke. From ONE paired host, after the host's
doca_ctx_starthas succeeded against this BlueField, enqueue ONE put (a small payload into a peer's exported memory) and observe: (a) the service-side logs show the enqueue was received; (b) the host-side progress engine fires the completion. This is the cheapest place to identify layer-1 / layer-2 / layer-3 / layer-4 gaps perCAPABILITIES.md ## Error taxonomybefore any HPC stack effort is wasted.Cap-query agreement smoke. From a paired host, run the matching
doca_urom_cap_*queries against the activedoca_devinfo(perdoca-urom ## configure(doca-urom/TASKS.md#configure) step 4) and confirm the operation families / collective variants the host says are supported are the same set the service exposed in its config. A disagreement here means either the service is exposing more than the host library knows how to use, or the service is exposing less than the host library expects — either way, layer-2 or layer-4 debugging starts here.Cluster-pattern smoke. With 2 paired hosts on the service, exercise a small batch (e.g. a few hundred puts across two nodes) AND a small collective (e.g. a small all-reduce across the same two nodes). Confirms the service's queue depth supports the in-flight pattern AND that the service's exposed collective surface actually executes end-to-end. A service that passes step 1 but fails step 3 most often has a queue-depth (layer 2) or collective-variant (layer 4) gap.
Capability snapshot. Save the as-deployed answer to: which service container tag is running, which UCX components / collectives are exposed, which queue depth is configured, how paired hosts reach the service over DOCA Comch, which host-library versions paired hosts are on. This snapshot is the artifact that lets future debug sessions skip rediscovery — and is the diff target when the user later asks "why does this deployment behave differently from the last one".
debug
Layered diagnosis. Walk the layers in this order; do not skip
down without clearing the layer above. The first four layers match
CAPABILITIES.md ## Error taxonomy.
The host-visible DOCA_ERROR_* overlay is documented on the
host side in
doca-urom CAPABILITIES.md ## Error taxonomy (doca-urom/CAPABILITIES.md#error-taxonomy);
this ladder maps the host symptom back to the service-side
layer the operator must touch.
Container runtime layer. Is the service container actually running and not restart-looping? Symptoms: container exits immediately, image pull fails, restart count climbing; host's
doca_uromcreate ordoca_ctx_startfails because there is no reachable service. Resolution: confirm the image tag matches what the public guide names for the operator's host-library pair; confirm theplugins/mount andUROM_PLUGIN_PATHmatch what the public guide names; confirm the BlueField has the runtime configured per the public Container Deployment Guide. This layer is owned by the container runtime, not by UROM. Note: a host-visibleDOCA_ERROR_NOT_PERMITTEDhere is a DOCA Comch-pairing / RDMA-permission signal (or a host-sidedoca_devaccess problem fixed perdoca-setup ## debug(doca-setup/TASKS.md#debug)) — NOT a service-side authorization rejection; there is no such authz layer in the shipped binary.Service-side resource layer. Host enqueues succeed; completions never fire; OR after N successful enqueues every further enqueue returns
DOCA_ERROR_AGAINindefinitely. Resolution: walk the service logs for queue-saturation or handler-stuck lines; if the queue is sized too small for the host's in-flight depth, raise the queue depth per## configurestep 5; if a service-side handler is stuck on a single in-flight operation, the stuck-handler line names the operation and the cluster team can isolate it. Do NOT silently raise the queue depth without investigating — a queue that is constantly saturating may be hiding a layer-3 substrate problem.Underlying RDMA substrate layer. Host sees
DOCA_ERROR_IO_FAILED; or enqueue succeeds but completions never fire and the substrate counters show errors. Resolution: confirm the BlueField port the service is using is up and the inter-node fabric routes correctly; route todoca-rdma TASKS.md ## debug(doca-rdma/TASKS.md#debug) layers 5-7 for substrate-layer diagnosis. Do NOT try to fix this from service config; it is a substrate property, not a service knob.Paired-version mismatch layer. Host's
doca_urom_cap_*claims an operation family / collective is supported, but runtime enqueue returnsDOCA_ERROR_NOT_SUPPORTED(despite a healthy container). Resolution: cross-checkpkg-config --modversion doca-uromon the host AND this service's container tag against the DOCA Compatibility Policy and the four-way-match rule indoca-version TASKS.md ## debug(doca-version/TASKS.md#debug) layer 2. The fix is either upgrading the service container or downgrading the host library; do NOT paper over with a retry, and do NOT change the service's exposed surface to "fix" a version-pair gap.Performance-not-helping layer. Container running, queue not saturated, substrate healthy, versions paired correctly — but the offload's end-to-end performance is worse than the host-CPU baseline. Resolution: this is most often not a bug — either the workload's pattern doesn't actually benefit from DPU offload (small ops, low collective depth, host CPU not the bottleneck) per the path-selection rule in
CAPABILITIES.md ## Safety policy, OR the service is configured to process operations one at a time when batching is documented for that operation family. Re-read the public guide for batching knobs on the specific collective in use; if the workload genuinely doesn't benefit, route back to path selection in## configurestep 1.Cross-cutting layer. For env-side and program-side debug that is not service-specific (BlueField install, BlueField kernel, DOCA library errors the service may surface), drop to
doca-debug TASKS.md ## debug(doca-debug/TASKS.md#debug).
Command appendix
DOCA UROM Service-specific commands the verbs above reach for,
grouped by purpose so the agent picks the right family without
searching prose. Every row is a class — the agent must not
invent flags beyond what the row names; flag and command
discovery is --help on the installed tool or the public
guide, not prose recall.
Infra-aware preamble (every row below). Per the bundle's
detect → prefer → fall back → report contract documented in
doca-structured-tools-contract ## The agent behavior contract (doca-structured-tools-contract/SKILL.md#the-agent-behavior-contract),
the agent should:
Probe for the matching structured helper FIRST (
doca-env --jsonfor version + devices + libraries + drivers + hugepages in one shot on the BlueField; the BlueField container manager's structured status output when available).If the probe succeeds, the structured tool's output is the authoritative answer and the agent SHOULD NOT also run the manual command in the row below. Report "using structured
<tool>".If the probe fails, fall back to the manual command in the row. Report "falling back to manual chain".
The schemas the structured tools emit are defined in
doca-structured-tools-contract ## Schemas(doca-structured-tools-contract/SKILL.md#schemas); the version-handling semantics (four-way match, NGC, headers-win) are owned bydoca-version/SKILL.md.
| Purpose | Command (class shape) | Owning step | Reads as healthy when … |
|---|---|---|---|
| Container lifecycle | The BlueField container manager's start / stop / status command for the service container, per the public Container Deployment Guide | ## run | Container running, restart count stable. |
| Container logs | The BlueField container manager's log-stream command for the service container | ## debug layers 1-2 + 4 | Service-ready line on startup; no queue-saturation / handler-stuck lines repeating; no paired-version warnings. |
| Container tag in use | The BlueField container manager's image-inspect command for the running service container | ## run step 1; ## debug layer 4 | Tag matches what the public DOCA UROM Service Guide names for the paired host library version. |
| Host-library version (on paired host) | pkg-config --modversion doca-urom on the host | ## configure step 3; ## debug layer 4 | A semver string the DOCA Compatibility Policy lists as compatible with this service's container tag. |
| BlueField DOCA version | doca_caps --version on the BlueField | ## configure step 2; ## debug layer 4 | A semver string matching the BlueField's pkg-config --modversion doca-common; disagreement = partial install per doca-version/SKILL.md. |
| Host-side cap-query agreement | A doca_urom_cap_* query from a paired host against the active doca_devinfo, then compare to the service's exposed surface | ## test step 2; ## debug layer 4 | The host's cap-query result is a subset of (or equal to) the service's exposed UCX-component / collective surface. |
| Substrate port check | ibv_devinfo (sudo) for the BlueField port the service is using; OR the substrate-side checks from doca-rdma TASKS.md ## debug (doca-rdma/TASKS.md#debug) | ## configure step 4; ## debug layer 3 | PORT_ACTIVE with a sane MTU; substrate counters not error-spiking. |
| Single-operation smoke | A single put or get from one paired host through doca-urom to a peer, with the service's logs observed in parallel | ## run step 6; ## test step 1 | Service logs show the enqueue received; host's progress engine fires the completion. |
Three cross-cutting rules for this appendix:
Never invent a daemon flag, container tag, or config key. The public DOCA UROM Service Guide is the contract; the daemon's
--helpand the BlueField container manager's--helpoutput are the secondary sources for runtime mechanics. Prose-derived daemon flags are the most common hallucination failure for this skill.Container before service before paired host. When triaging, confirm the container layer (running, not restart-looping, image tag correct) before reading any service log, and confirm the service-side state before blaming the paired host. A non-running container makes every service-layer command meaningless; a broken DOCA Comch pairing / RDMA-permission problem makes every host-side debug session a wild-goose chase.
Cross-link instead of duplicate. Cross-cutting env commands (port-state,
devlink,ip link,ethtool) live indoca-setup TASKS.md ## Command appendix(doca-setup/TASKS.md#command-appendix); this appendix names only the DOCA-UROM-Service-specific ones.
Deferred task verbs
Installing DOCA on the BlueField — out of scope here. Route to
doca-setup ## configure(doca-setup/TASKS.md#configure) for env preparation anddoca-setup ## test(doca-setup/TASKS.md#test) for install health verification, ordoca-setup ## no-install(doca-setup/TASKS.md#no-install) for the public NGC DOCA container path.Writing a host-side
doca-uromapplication — not a service question. Route todoca-urom ## configure(doca-urom/TASKS.md#configure) for the host-side bring-up,doca-urom ## build(doca-urom/TASKS.md#build) for the build pattern, anddoca-urom ## test(doca-urom/TASKS.md#test) for the host-side smoke. The host library and the service are a paired contract, NOT a single artifact.Bringing up the RDMA / RoCE / IB substrate between BlueFields — owned by
doca-rdma ## configure(doca-rdma/TASKS.md#configure). This service uses the substrate; it does not stand it up.Designing the HPC stack (MPI collective algorithms, UCX transport wiring) — out of scope here. The service executes UROM-shaped offloads; the stack decides which operations to enqueue. Route to upstream MPI / UCX documentation.
Other DOCA services (DMS / DTS / BlueMan / Firefly / Flow-Inspector / HBN / Argus / …) — not this service. Route to doca-public-knowledge-map ## DOCA services (
doca-public-knowledge-map/SKILL.md#doca-services) for the routing table and the matchingservices/<service>skill when it exists (e.g.doca-firefly ## configure(doca-firefly/TASKS.md#configure) for time synchronization,doca-dms ## configure(doca-dms/TASKS.md#configure) for device management). The container-shaped deployment pattern is shared; the per-service domain is different.
Cross-cutting
The public DOCA UROM Service Guide is the single source of truth. Any daemon flag, UCX-component / collective name, container tag, or observability output the agent quotes must come from there, not from generic UCX or container-runtime knowledge.
The host library and this service are a paired contract. Every deployment decision (container tag pulled, daemon flag / env set, how the host pairs over DOCA Comch) is also a host-side decision; the agent must name BOTH sides whenever a change on one side affects the other.
Path-selection is mandatory up front. This service is the wrong answer when the host fleet does not use
doca-urom, when the HPC stack is neither MPI nor UCX, or when the BlueField generation cannot support the intended offload.Smoke before scale. Every workload (full collectives, dense MPI patterns) goes after the single-operation smoke and the cap-query agreement smoke pass, never before.
For URL routing to the DOCA UROM Service Guide and other public DOCA documentation, see doca-public-knowledge-map ## DOCA services (
doca-public-knowledge-map/SKILL.md#doca-services).
Requirements and compatibility
Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta
“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.
The author says: BlueField-Arm-only DOCA service container; pulled from NVIDIA NGC and started under the BlueField OS container runtime. Host-side install is irrelevant — the host's relationship to this service is via the paired `doca-urom` library over a `doca-rdma` substrate. The validation steps require a live DOCA install.
Security
What our scanner noticed· Medium risk
- Large base64-encoded blobs
A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.
Attribution and licence
- Created by
- NVIDIA
- Publisher
- NVIDIA (Official)
- Source
- NVIDIA/skills · skills/doca-urom-svc · commit fce3cca
- Licence
- Apache License 2.0 (redistribution allowed)
- LICENSE (added by AutoGineer from LICENSE-APACHE)
- ATTRIBUTION.md (written by AutoGineer)
- Synced
AutoGineer is not affiliated with or endorsed by NVIDIA.
Download ZIP
The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download doca-urom-svc.zip