DOCA 文档 v2.10.0

DOCA UROM 服务指南

本指南介绍如何在 NVIDIA® BlueField® 网络平台之上使用 DOCA UROM 服务。

DOCA UROM 服务为直接从主机卸载 HPC 软件堆栈的重要部分到 BlueField 设备提供了一个框架。

通过使用守护程序,该服务处理资源发现、主机和 BlueField 之间的协调,以及 BlueField worker 自身的生成、管理和拆卸。

image-2024-3-7_12-16-1-version-1-modificationdate-1734473594663-api-v2.png

启动卸载请求的第一步涉及 UROM 主机应用程序与 UROM 服务建立连接。收到插件发现命令后,UROM 服务通过向应用程序提供 BlueField 上可用的插件列表来做出响应。然后,应用程序将与所需 worker 对应的插件 ID 附加到其网络标识符。最后,该服务在 BlueField 上触发 UROM worker 插件实例以执行并行计算任务。在服务的 Kubernetes Pod 中,worker 由守护程序响应这些卸载请求而生成。每个计算都可以使用单个库或多个计算库。

在部署 UROM 服务容器之前,请确保满足以下先决条件

  • 根据 DOCA 的需要分配巨页

    复制
    已复制!
                

    $ echo '2048' | sudo tee -a /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages $ sudo mkdir /mnt/huge $ sudo mount -t hugetlbfs -o pagesize=2M nodev /mnt/huge

有关在 BlueField 之上部署 DOCA 容器的信息,请参阅NVIDIA BlueField 容器部署指南

特定于服务的配置步骤和部署说明可以在服务的容器页面下找到。

插件发现和报告

当应用程序启动与 DOCA UROM 服务的连接请求时,守护程序读取 UROM_PLUGIN_PATH 环境变量。此变量存储 .so 文件的目录路径,多个路径用分号分隔。守护程序按顺序扫描这些路径,并尝试加载每个 .so 文件。守护程序完成扫描后,它会将可用的 BlueField 插件报告给主机应用程序。

主机应用程序获取可用插件列表,作为 doca_urom_service_plugin_info 结构的列表

复制
已复制!
            

struct doca_urom_service_plugin_info { uint64_t id; // Unique ID to send commands to the plugin uint64_t version; // Plugin version char plugin_name[DOCA_UROM_PLUGIN_NAME_MAX_LEN]; // .so filename };

UROM 守护程序负责为插件生成唯一标识符,这对于使 worker 能够区分不同的插件任务是必要的。

在 Worker 中加载插件

在 UROM 守护程序生成 UROM worker 期间,守护程序在 worker 命令行中附加所需插件的列表。每个插件都以 so_path:id 格式传递。

作为 worker 引导的一部分,流程迭代所有 .so 文件,并尝试使用 dlopen 系统调用加载它们,并查找 urom_plugin_get_iface() 符号以获取插件操作接口。

Yaml 文件

从 NGC 下载的 .yaml 文件可以根据用户的需要轻松编辑

复制
已复制!
            

env: # Service-Specific command line arguments - name: SERVICE_ARGS value: "-l 60 -m 4096" - name: UROM_PLUGIN_PATH value: "/opt/mellanox/doca/samples/doca_urom/plugins/worker_sandbox/;/opt/mellanox/doca/samples/doca_urom/plugins/worker_graph/"

  • SERVICE_ARGS 是服务接收的运行时参数

    • -l, --log-level <value> – 设置程序的(数字)日志级别 <10=DISABLE, 20=CRITICAL, 30=ERROR, 40=WARNING, 50=INFO, 60=DEBUG, 70=TRACE>

    • --sdk-log-level – 设置程序的 SDK(数字)日志级别 <10=DISABLE, 20=CRITICAL, 30=ERROR, 40=WARNING, 50=INFO, 60=DEBUG, 70=TRACE>

    • -m, --max-msg-size – 指定 UROM 通信通道最大消息大小

  • UROM_PLUGIN_PATH 是一个 env 变量,用于存储插件的 .so 文件的目录路径

对于 BlueField 上的每个插件,都需要在服务容器内添加卷挂载。例如

复制
已复制!
            

volumes: - name: urom-sandbox-plugin hostPath: path: /opt/mellanox/doca/samples/doca_urom/plugins/worker_sandbox     type: DirectoryOrCreate ... volumeMounts: - mountPath: /opt/mellanox/doca/samples/doca_urom/plugins/worker_sandbox     name: urom-sandbox-plugin


当排除容器部署问题时,强烈建议遵循“查看容器部署”部分和 DOCA 容器部署指南 中找到的部署步骤和技巧。

还可以检查 /var/log/doca/urom 日志文件,以获取有关服务组件(守护程序和 worker)运行周期的更多详细信息。

worker 的日志文件名是 urom_worker_<pid>_dev.log,守护程序的日志文件名是 urom_daemon_dev.log

Pod 标记为“就绪”但未列出容器

错误

当部署容器时,Pod 的 STATE 标记为 Ready,并且列出了镜像,但是,看不到容器正在运行

复制
已复制!
            

$ sudo crictl pods POD ID CREATED STATE NAME NAMESPACE ATTEMPT RUNTIME 3162b71e67677 4 seconds ago Ready               doca-urom-my-dpu                               default 0 (default)   $ sudo crictl images IMAGE TAG IMAGE ID SIZE k8s.gcr.io/pause 3.2                 2a060e2e7101d 487kB nvcr.io/nvidia/doca/doca_urom 1.0.0-doca2.7.0     2af1e539eb7ab 86.8MB   $ sudo crictl ps CONTAINER IMAGE CREATED STATE NAME ATTEMPT POD ID POD


解决方案

在大多数情况下,容器已启动但立即退出。可以使用以下命令检查这一点

复制
已复制!
            

$ sudo crictl ps -a CONTAINER IMAGE CREATED STATE NAME ATTEMPT POD ID POD 556bb78281e1d       2af1e539eb7ab       6 seconds ago Exited doca-urom 1                   3162b71e67677       doca-urom-my-dpu

如果容器失败(即,报告 Exited 状态),建议检查 /var/log/doca/urom/urom_daemon_dev.log 中的 UROM 主日志。

此外,在终止后的短时间内,也可以使用容器的 ID 查看容器日志

复制
已复制!
            

$ sudo crictl logs 556bb78281e1d ...

Pod 未列出

错误

当将容器的 YAML 文件放在 Kubelet 的输入文件夹中时,服务 Pod 未在 Pod 列表中列出

复制
已复制!
            

$ sudo crictl pods POD ID CREATED STATE NAME NAMESPACE ATTEMPT RUNTIME


解决方案

在大多数情况下,Pod 未启动是因为缺少请求的巨页。可以使用以下命令进行验证

复制
已复制!
            

$ sudo journalctl -u kubelet -e. . .  Oct 04 12:12:19 <my-dpu> kubelet[2442376]: I1004 12:12:19.905064 2442376 predicate.go:103] "Failed to admit pod, unexpected error while attempting to recover from admission failure" pod="default/doca-urom-service-<my-dpu>" err="preemption: error finding a set of pods to preempt: no set of running pods found to reclaim resources: [(res: hugepages-2Mi, q: 104563999874), ]"

© 版权所有 2025 NVIDIA。 上次更新时间:2025 年 2 月 12 日。