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://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
CAPABILITIES.md
DOCA UROM Service — Capabilities
Where to start: The pattern overview below names the recurring DOCA-UROM-Service-class operational patterns. Pick the pattern first, then drill into the H2 that owns the substance. For the how of executing each pattern, jump to TASKS.md.
This file enumerates the DOCA UROM Service's documented
capabilities, deployment shape, configuration axes, and
operational behaviors as described in the public DOCA UROM
Service Guide. Treat it as a map of what is documented, not
a substitute for reading the live page when configuring a real
deployment. For the public URL itself, route through
doca-public-knowledge-map ## DOCA services (doca-public-knowledge-map/SKILL.md#doca-services)
— this skill does not duplicate the URL routing.
Pattern overview
Every DOCA-UROM-Service-class question this skill teaches resolves into one of SIX patterns. The patterns are CLASSES — they apply across every service deployment, not just one BlueField generation or one MPI / UCX consumer.
| Service pattern | Class shape | Where the substance lives |
|---|---|---|
| 1. Walk the publisher / executor paired-contract model first | Every UROM deployment has TWO components: host-side doca-urom library (publisher) and DPU-side service (executor); both must be present at versions the DOCA Compatibility Policy supports, before the first host enqueue can land | ## Capabilities and modes paired-contract table + ## Version compatibility paired-version overlay |
| 2. Decide whether to deploy this service at all | Deploy when host nodes use doca-urom and want CPU freed for compute; do NOT deploy when hosts don't use the library, when the stack isn't MPI / UCX, or when the BlueField generation is too constrained for the intended offload | ## Safety policy path-selection rule + ## Capabilities and modes deployment shape |
| 3. Pick the service's configuration axes | UCX-component / collective surface (cap-bound to the BlueField generation) + enqueue queue depth + DOCA Comch endpoint pairing with the host doca-urom library — three axes the operator commits to BEFORE starting the container. Note: there is NO standalone service-side "host-endpoint authorization list" in the shipped binary (allowed_host / allowed_users / auth_token / whitelist / access_list / NOT_PERMITTED); access is governed by Comch pairing and the underlying RDMA permissions, not a UROM-service authz surface | ## Capabilities and modes configuration-axes table |
| 4. Honor the underlying RDMA transport substrate | The service uses doca-rdma (the underlying RDMA / RoCE / IB substrate) to actually move bytes; the service does NOT replace RDMA; substrate failures surface inside the service as stalled operations and at the host as DOCA_ERROR_IO_FAILED | ## Capabilities and modes substrate row + ## Error taxonomy transport layer |
| 5. Map a service symptom back to its layer | Container-runtime vs service-side resource (queue / handler stuck) vs underlying RDMA substrate vs paired-version mismatch — four independent layers, each with its own owner | ## Error taxonomy layered split |
| 6. Read the service's observability before changing config | Container state + service-side logs + DPU-side RDMA counters answer "is the service actually executing what the host enqueues" before any config knob is turned | ## Observability |
Two cross-cutting rules that apply to every pattern above:
The host-library + DPU-service paired contract is load-bearing. The DOCA UROM Service does nothing on its own — its inputs are operations enqueued by the paired host-side
doca-uromlibrary. An agent that walks a user through this service in isolation, without naming the paired host library and the version-coupling rule, has the model wrong for every deployment. The corollary: a perfectly healthy service container that does not pair with any host'sdoca-uromversion is operationally indistinguishable from a misconfigured one.Operate the documented path; do not invent one. The service's CLI-flag / env surface, container image source, supported UCX components / collectives, and queue-sizing knobs are all documented in the public DOCA UROM Service Guide. Quoting daemon flags, image tags, UCX component names, or container-runtime flags not in the public guide is the most common hallucination failure mode for this skill.
Capabilities and modes
Service shape
DOCA UROM Service is a long-running container that ships
from NGC and runs on the BlueField Arm cores. The container is
the daemon: it owns the service-side execution state for UROM
offloads, receives enqueued operations from paired host
processes through the DOCA contract, and dispatches them onto
the underlying RDMA substrate. There is no host-side service
binary the user installs — the service is the container; the
host's relationship to the service is to enqueue operations
through the doca-urom library.
Three architectural properties the operator must hold throughout:
The service is the EXECUTOR; the library is the PUBLISHER. Per the paired-contract model below, the service's purpose is to execute remote memory operations that host processes have enqueued through
doca-urom. The service does NOT execute operations the library didn't enqueue, does NOT discover work on its own, and does NOT drive the host's progress engine. Conflating the two is the single most common UROM-deployment design error.The container is the unit of deployment. Operators do not start the service as a host binary; they start the service container per the public Container Deployment Guide pattern (same shape as every other DOCA service container — see the sibling
doca-dms/SKILL.mdanddoca-firefly/SKILL.mdfor the same shape on different per-service domains).Service behavior is configured by CLI flags and env, not by a mounted config file. The daemon binary (
doca_urom_daemon) parses its options through DOCA'sdoca_argp(e.g.--max-msg-size/-m, and the log level-l/--sdk-log-level, passed via the container'sSERVICE_ARGS), and reads the plugin search path from theUROM_PLUGIN_PATHenvironment variable.doca_urom.yamlmounts only theplugins/directory and the log directory — there is no mounted service config file. The agent should quote the daemon's actual flags from the public guide /--help, NOT invent config-file keys.
Publisher / executor paired-contract model
DOCA UROM Service is one half of a TWO-component contract. The
host-side doca-urom library publishes operations; this
service executes them. Both halves must be present at versions
the DOCA Compatibility Policy supports, before any operation
can flow.
| Side | What runs there | Artifact | What this skill covers |
|---|---|---|---|
| Host side (publisher) | C / C++ (or any language that can FFI a C library) using doca-urom to enqueue remote memory operations, integrated into the user's HPC / UCX / MPI stack on the host | doca-urom library — covered by doca-urom/SKILL.md; pkg-config doca-urom is the build-time anchor on the host | This skill NAMES the library and routes to its skill; it does NOT redefine the library surface. A service running on a BlueField with no host paired through doca-urom is operationally idle, not "ready" |
| DPU side (executor) | A long-running container on the BlueField Arm side that receives the host's enqueued operations and EXECUTES them against the remote-side memory and RDMA fabric, freeing the host CPU for compute | DOCA UROM Service container — this skill | All of ## Capabilities and modes / ## Error taxonomy / ## Observability / ## Safety policy below |
The agent's rule: when the user asks "how do I write
host-side code that enqueues UROM operations / how do I size
the per-context queue on the host / how do I drive
doca_pe_progress for completions", that is the host-library
question and the right artifact is
doca-urom/SKILL.md. When the user
asks "how do I deploy / start / stop / scale the service on
the BlueField / how do I configure which UCX components it
exposes / how does the host pair over DOCA Comch", that is this
skill's scope. Two distinct artifacts; two distinct surfaces.
Deployment shape
The public DOCA UROM Service Guide documents the container
deployment on BlueField Arm. The shape lines up with every
other DOCA service container — pull from NGC, set the daemon's
CLI flags / env (SERVICE_ARGS, UROM_PLUGIN_PATH) and mount
the plugins/ directory, start under the documented runtime (the
BlueField OS's container manager per the public Container
Deployment Guide). For the canonical container-deployment
recipe shared with the other DOCA service containers, route
through
doca-public-knowledge-map ## DOCA services (doca-public-knowledge-map/SKILL.md#doca-services).
Two deployment-shape rules:
BlueField Arm only. The DOCA UROM Service is a BlueField-side service; it does not run on the host. The host's relationship to the service is via the DOCA contract carried over
doca-uromand the underlying RDMA fabric.One service per BlueField. The service drives the BlueField's UROM execution state for the BlueField as a whole. The daemon reaches the host over DOCA Comch and moves bytes over the underlying
doca-rdmasubstrate; there is no service listen-port the operator chooses — the control transport is the Comch endpoint pair, and the daemon allocates its internal worker ports automatically. Running two service containers competing for the same execution state on the same BlueField is a configuration error, not a redundancy strategy.
Configuration axes
Every DOCA UROM Service deployment must commit to three configuration axes before starting the container. Get any one wrong and the service either rejects host enqueues, stalls them silently, or accepts them but cannot actually execute the operation family the host intended. The axes are jointly documented in the public DOCA UROM Service Guide; quote the exact valid values from there rather than from memory.
| Axis | Class shape | Mismatch symptom | Where to look |
|---|---|---|---|
| UCX-component / collective surface | Which UCX components and collective primitives this service instance exposes for host offload — cap-bound to what the underlying BlueField generation supports, NOT freely selectable | Host's doca_urom_cap_* claims the collective is supported (host library + device say yes), but runtime enqueue returns DOCA_ERROR_NOT_SUPPORTED because the service was not configured to expose that collective on this deployment | Public DOCA UROM Service Guide's component / collective configuration section |
| Enqueue queue depth | The depth of the service-side queue that receives host enqueues; sized to the cluster's intended in-flight depth per host | Host enqueues start succeeding, then return DOCA_ERROR_AGAIN after N submits; OR, on the service side, the queue backs up and the host's progress engine sees a stall | Public DOCA UROM Service Guide's queue / sizing section |
| DOCA Comch endpoint pairing | How the host's doca-urom library reaches this service — over a DOCA Comch endpoint pair (the daemon defaults to the BlueField's Comch device/representor). Because there is no service-side authorization list, pair only the explicitly intended host endpoint(s); a broad or ambiguous pairing expands who can drive remote memory operations | Host's doca_ctx_start cannot establish, the daemon never logs the intended connection, or an unintended host can pair — a Comch-pairing / device-mapping problem, not a service authz decision | Public DOCA UROM Service Guide's connection / Comch section; doca-comch/SKILL.md for pairing verification |
| Underlying RDMA substrate (fourth, configured outside this service) | The service does NOT stand up the RDMA fabric; it consumes it. The BlueField's doca-rdma substrate must be healthy on the ports this service will use | Operations enqueued, never complete; or completions surface as DOCA_ERROR_IO_FAILED at the host API | Route to doca-rdma/SKILL.md for the substrate-layer configure / debug |
The RDMA side follows least privilege: export only the memory regions the intended UROM operation requires, with only the documented access permissions needed for that operation. Do not broaden an export or grant read/write/atomic permissions merely to make bring-up easier.
The agent's rule: the configuration-axes decision precedes container start. A deployment that starts the container before the operator can name which UCX components / collectives the service exposes, what queue depth supports the intended in-flight load, and how the host pairs over DOCA Comch is going to debug the wrong axis first. Force the decision up front.
Pairing surface — host library plus RDMA substrate
The DOCA UROM Service sits in the middle of two paired surfaces; neither is optional and the agent must surface both:
| Paired surface | Why this service depends on it | Pairing shape |
|---|---|---|
Host-side doca-urom library | This service has no inputs except what the paired host library enqueues; a service running with no host paired through doca-urom is operationally idle. See doca-urom/SKILL.md | Host links doca-urom and creates a doca_urom Core context against the doca_dev mapping to the BlueField running this service; the host enqueues operations, this service receives and executes them, the host's progress engine harvests completions |
Underlying RDMA transport substrate (doca-rdma) | The service moves bytes through the underlying RDMA fabric; the service does NOT replace RDMA. A failing RDMA fabric surfaces inside the service as stalled execution and at the host as DOCA_ERROR_IO_FAILED. See doca-rdma/SKILL.md | The service uses the BlueField's doca-rdma substrate on the ports the operator configures; substrate health is the operator's joint responsibility with the network team — the service won't paper over a broken fabric |
The agent's rule: when the user mentions the host doca-urom
library or the RDMA fabric in the same breath as this service,
name BOTH paired surfaces in the same response. Naming only
one is how the deployment's actual failure layer gets
misattributed — host symptoms blamed on the service, service
symptoms blamed on the substrate, substrate symptoms blamed on
the library.
Version compatibility
For the canonical DOCA version-detection chain, the four-way
match rule, NGC container semantics, and the headers-win-over-docs
rule, see doca-version/SKILL.md. The
body lives there; this skill does not duplicate it.
The DOCA-UROM-Service-specific overlay is the load-bearing version-coupling rule:
The host-side library version and the DPU-side service version must agree per the DOCA Compatibility Policy. This is the single most consequential version axis the agent must surface for any UROM deployment: a host-side
doca-uromupgraded without the DPU-side service being upgraded (or vice versa) does NOT fail loudly — it fails subtly, often asDOCA_ERROR_NOT_SUPPORTEDfor an operation family that DOES exist on one side but not the other, or as silent stalls on collectives that one side believes the pair supports. Surface BOTHpkg-config --modversion doca-uromon the host AND the service container tag on the BlueField; cross-check them against the DOCA Compatibility Policy. This pairing is what the cross-cutting overlay indoca-urom CAPABILITIES.md ## Version compatibility(doca-urom/CAPABILITIES.md#version-compatibility) documents on the host side; this skill documents the same pairing from the service side.The service container tag is the runtime version anchor. Same pattern as
doca-dms/SKILL.mdanddoca-firefly/SKILL.md: the service container ships from NGC with its own tag that may lag the BlueField host's DOCA package version, and the relevant version anchor for an as-deployed service is the container tag pulled, notpkg-config --modversionon the BlueField. Always quote both versions when the user reports a service behavior; if they diverge, route todoca-version TASKS.md ## debug(doca-version/TASKS.md#debug) layer 2 before diagnosing the service behavior itself.The exposed UCX-component / collective surface is version-bound. Which collective primitives the service can expose (all-to-all, all-reduce, broadcast, …) is jointly conditional on the service container version, the BlueField generation, and the underlying DOCA install. When the user asks "does this collective work on my deployment?", the authoritative answer is the public DOCA UROM Service Guide page whose version matches the container tag pulled — NOT agent memory and NOT a guess from a different DOCA release.
Read the public DOCA UROM Service Guide version header. The guide is versioned; the on-page version must match the container tag the operator is using. A mismatch between the docs version and the container tag is the canonical "my config doesn't match what the docs say" failure mode and often masquerades as a paired-version mismatch with the host library.
Error taxonomy
DOCA UROM Service errors fall into four layers, each with its
own owner. The agent's rule: walk the layers in order; do NOT
skip down without clearing the layer above. Notably, the
host-visible DOCA_ERROR_* for a service-side cause is
documented on the host side in
doca-urom CAPABILITIES.md ## Error taxonomy (doca-urom/CAPABILITIES.md#error-taxonomy);
this table maps each host-visible symptom back to the
service-side layer the operator must touch.
| Layer | Symptom (host-visible) | Root cause class | Where to fix |
|---|---|---|---|
| 1. Container runtime | Container fails to start, restart-loops, exits immediately, image pull fails. Host symptom: doca_urom create or doca_ctx_start fails because there is no reachable service | Image tag wrong, registry credentials missing, BlueField container runtime not configured for this container, plugins/ mount path wrong or UROM_PLUGIN_PATH unset | BlueField container runtime + the public Container Deployment Guide via doca-public-knowledge-map/SKILL.md |
| 2. Service-side resource exhaustion | Host enqueues succeed; completions never fire; OR after N successful enqueues every further enqueue returns DOCA_ERROR_AGAIN indefinitely | Service-side queue is undersized for the in-flight depth the host workload generates, OR the service is processing operations one at a time when it could batch, OR a service-side handler is stuck on a single in-flight operation | Service config — the queue-depth row in ## Capabilities and modes; service logs (this skill's ## Observability) to identify a stuck handler |
| 3. Underlying RDMA substrate | Host sees DOCA_ERROR_IO_FAILED from enqueue or completion; or enqueue succeeds but completions never fire and the substrate counters show errors | The underlying RDMA fabric has reported failure (link down, RoCE / IB config skew between BlueFields, routing issue inter-node). The service is NOT the source of truth for the substrate; it is the surface that exposes the failure | Route to doca-rdma TASKS.md ## debug (doca-rdma/TASKS.md#debug) for the substrate-layer diagnosis; do NOT mask substrate failures inside the service config |
| 4. Paired-version mismatch | Host's doca_urom_cap_* claims an operation family / collective is supported, but runtime enqueue returns DOCA_ERROR_NOT_SUPPORTED (despite a healthy container) | Host library and service container are at versions the DOCA Compatibility Policy does not support pairing — the cap query answered for the host's library + device axis, but the running service is at a different version that does not actually execute that variant | Cross-check both versions against the DOCA Compatibility Policy and the four-way-match rule in doca-version/SKILL.md. The fix is either upgrading the service container or downgrading the host library; do NOT paper over with a retry |
The agent's rule: never recommend a service config change
without first identifying which of the four layers is the
cause. The most common debug failure for this skill is
misreading a layer-4 symptom (host-library / service version
mismatch) as a layer-2 (queue / handler) problem and chasing
config knobs that cannot fix it. A second trap: a host-visible
DOCA_ERROR_NOT_PERMITTED is a DOCA Comch-pairing / RDMA-permission
signal (or a host-side doca_dev access problem), NOT a
service-side authorization rejection — there is no such authz
layer in the shipped binary.
Observability
Documented observability surfaces the agent should reach for, in order of how cheaply they answer the "is the service actually executing what the host enqueued" question:
Container state. First — is the service container actually running on the BlueField? The BlueField container manager reports container status, restart count, and the container's stdout / stderr log stream. A restart loop is a layer-1 (container runtime) symptom per
## Error taxonomy; diagnose it before touching any service config. A non-running container makes every host-sidedoca-uromcall meaningless.Service-side logs. The container's stdout (and any documented log destination the public DOCA UROM Service Guide specifies) is the primary service observability surface. Look for: (a) queue-saturation or handler-stuck lines (layer 2); (b) underlying-substrate-error lines (layer 3); (c) paired-version-mismatch lines if the service detects an incompatible host (layer 4). The agent should NOT invent log line formats; quote what the live container is emitting.
Host-side completion surface. The host's
doca-uromlibrary reports operation completions through the DOCA progress engine. The host-side observability is documented indoca-urom CAPABILITIES.md ## Observability(doca-urom/CAPABILITIES.md#observability); the service-side reading of "how many operations did we actually execute" is read from the service's own logs and from the substrate counters below. When the host says "submitted N, completed M" and the service says it executed K, the differences between N / M / K identify which layer is dropping work.Underlying RDMA substrate counters. When the service-side surface shows operations being received but the user reports the remote-side memory does not have the expected bytes, the right diagnostic is the substrate counters per
doca-rdma CAPABILITIES.md ## Observability(doca-rdma/CAPABILITIES.md#observability) on each BlueField in the path. The agent must NAME the existence of this surface and route the user there; the per-counter details belong in the substrate skill.Version snapshot at deploy time. The service container tag,
pkg-config --modversion doca-uromon the paired host(s), and the BlueField'sdoca_caps --versionare the baseline of "which paired-version pair the operator deployed". Save them; if a runtime failure later looks like a layer-4 paired-version mismatch, the diff against this baseline (one side upgraded, the other didn't) is the bug.
For the cross-library debug-time observability
(DOCA_LOG_LEVEL, --sdk-log-level, the trace build flavor —
relevant when the service calls into a DOCA library that emits
structured logs), see
doca-debug CAPABILITIES.md ## Observability (doca-debug/CAPABILITIES.md#observability).
Safety policy
Overlay on the bundle-wide hardware-safety meta-policy. The rules below are this skill's per-artifact overlay on the cross-cutting rules in
doca-hardware-safetyCAPABILITIES.md ## Safety policy (doca-hardware-safety/CAPABILITIES.md#safety-policy) (specifically ### Per-artifact overlay pattern (doca-hardware-safety/CAPABILITIES.md#per-artifact-overlay-pattern)). When the two layers disagree, the stricter wins; when either layer says STOP, the agent stops.
The DOCA UROM Service's safety surface is path-selection first, then the version-contract rule, then the smoke-before-scale rule, then the operational disciplines around the container itself.
Path-selection rule (load-bearing). Deploy this service ONLY when the HPC environment actually benefits from DPU offload of remote memory operations. Concretely:
Deploy when the host fleet uses the
doca-uromlibrary AND the workload pattern (MPI / UCX collectives, dense remote-memory traffic) is one where host-CPU cost of posting RDMA work is the bottleneck AND the BlueField generation in use can support the intended UCX components / collectives.Do NOT deploy when the host fleet is 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 generation is too constrained to expose the intended offload surface. In those cases the right answer is to keep the host's existing communication path and explicitly tell the user "this service is the wrong tool here; here's why" — not to deploy it speculatively and end up debugging an offload that was never going to help.
Version-contract rule (load-bearing). The host-side
doca-uromlibrary version and this service's container tag are a paired contract — see## Version compatibility. A service deployment that does not name the paired-host library version, OR that proceeds against a pair the DOCA Compatibility Policy doesn't support, will fail subtly: not with a loud refusal at deploy time, but withDOCA_ERROR_NOT_SUPPORTEDon operations one side believed the pair supports, or with silent stalls on collectives. The agent must always surface BOTH versions and the policy check up front.Cap-query at deploy time. Before declaring the service ready, the operator must confirm that the BlueField generation in use, the DOCA install on the BlueField, and this service version actually expose the UCX components / collectives the host workload intends to offload. The device-side cap surface is the authoritative answer for "can this BlueField even host this offload" — see the device-axis row of the cap query the host runs via
doca-urom CAPABILITIES.md ## Capabilities and modes(doca-urom/CAPABILITIES.md#capabilities-and-modes); the answer must agree with the service's exposed surface or the deployment is misconfigured before any host enqueue.Smoke before scale. Before pointing the full HPC workload at the service, the operator must walk a smoke: service container running on the BlueField; ONE paired host's
doca-uromdoca_ctx_startsucceeds against this BlueField; ONE host enqueue (a simple put or get) is observed at the service (in logs) AND ONE completion fires on the host's progress engine. Only then layer the collective patterns on top. A workload that comes up before the smoke passes does not isolate which of the four layers in## Error taxonomyis wrong, and bisection across container / queue / substrate / version becomes much harder.One service per BlueField. Two service containers on the same BlueField competing for the same UROM execution state is a configuration error; the agent must NOT recommend it as a redundancy strategy. UROM redundancy is a cluster-side concern (multiple BlueFields, multiple service instances each owning their own BlueField) that does not require multiple service containers on one DPU.
Don't paper over a transport-substrate problem from the service. When the symptom is "operations enqueued, never complete" and the layer is "underlying RDMA substrate down" per
## Error taxonomy, the honest answer is "the RDMA fabric isn't carrying the traffic; the fix is at the substrate, not in this service's config". Silently masking a substrate failure inside the service — by, e.g., shortening timeouts to make the host see the failure faster — is a user-visible regression dressed up as helpfulness.There is no service-side authorization model to invent. Access to the service is governed by the DOCA Comch endpoint pairing and the underlying RDMA permissions, not by any service-side authorization list, credential, or per-host allow-list in the shipped binary. The agent must NOT propose authentication / authorization schemes the service does not implement; a host-visible
DOCA_ERROR_NOT_PERMITTEDis a Comch / RDMA /doca_devsignal, not a UROM-service authz decision.Intended-host-only pairing is the access boundary. Before start, identify the exact host endpoint(s) permitted to pair, verify that mapping through the documented read-only
doca-comch/SKILL.mdsurface, and refuse startup when the pairing is broad, ambiguous, or shows an unintended peer.RDMA exports are least privilege. Export only the memory regions needed by the intended workload and grant only its required read, write, or atomic permissions. Verify the documented
doca-rdmacapability, connection, and permission state throughdoca-rdma TASKS.md ## test(doca-rdma/TASKS.md#test) before service start; never use a wider export as a diagnostic shortcut.Pre-start substrate gate. Container start is blocked until both checks are green: the Comch view identifies only the intended host pairing, and the RDMA view confirms the intended peer, narrowly scoped exports, required permissions, and healthy transport. Capture both read-only outputs as the pre-start evidence.
Public-source pointer
The single canonical public source for the DOCA UROM Service
is the DOCA UROM Service Guide, reachable through
doca-public-knowledge-map ## DOCA services (doca-public-knowledge-map/SKILL.md#doca-services).
Verify that the version of the guide matches the service
container tag pulled on the BlueField AND that the host-side
doca-urom library version pairs with that container tag per
the DOCA Compatibility Policy — the service's config surface,
supported UCX components / collectives, queue knobs, and
observability output are documented to evolve, so config keys
and exposed surfaces can change between releases.
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 or NVIDIA.
Download ZIP
The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download doca-urom-svc.zip