ubuntu 22.04 -cuda12.8.2- holoscan-sdk-4.5-doca-ofed

发布时间:2026/8/8 21:12:15
ubuntu 22.04 -cuda12.8.2- holoscan-sdk-4.5-doca-ofed 1. 安装 cuda 12.8.21.1. 安装 build-essentialsudoapt-getupdatesudoaptinstall-ybuild-essentialmakedkms pkg-config\libnl-3-dev libnl-route-3-dev libnuma-dev\python3-devcurlwget先安装 build-essential 再安装 gcc-12因为 cuda12.8.2需要gcc-12 才能安装成功。1.2. 安装并启用 gcc-12在 Ubuntu 22.04 中GCC 12 已包含在官方仓库中无需额外 PPA。以下是完整的安装与切换流程1. 安装 GCC 12sudoaptupdatesudoaptinstall-ygcc-12 g-12安装完成后系统中会同时存在gcc/g→ 指向 GCC 11默认gcc-12/g-12→ 新安装的 GCC 122. 使用 update-alternatives 管理多版本推荐将两个版本都注册到 alternatives 系统然后自由切换# 注册 GCC 11如果尚未注册sudoupdate-alternatives--install/usr/bin/gcc gcc /usr/bin/gcc-11110\--slave/usr/bin/g g /usr/bin/g-11\--slave/usr/bin/gcov gcov /usr/bin/gcov-11# 注册 GCC 12sudoupdate-alternatives--install/usr/bin/gcc gcc /usr/bin/gcc-12120\--slave/usr/bin/g g /usr/bin/g-12\--slave/usr/bin/gcov gcov /usr/bin/gcov-12切换默认版本# 交互式选择sudoupdate-alternatives--configgcc# 或者直接强制指定 GCC 12sudoupdate-alternatives--setgcc /usr/bin/gcc-123. 验证版本gcc--versiong--version应显示gcc (Ubuntu 12.x.x ...) 12.x.x。4. 仅对当前会话临时启用不修改系统默认如果你不想改动系统默认编译器仅在当前终端或构建任务中使用 GCC 12exportCCgcc-12exportCXXg-12然后在同一终端中执行你的编译命令如make、cmake等。补充说明如果你后续需要编译依赖特定 GCC 版本的内核模块或驱动如 NVIDIA 驱动、Mellanox OFED建议保持系统默认为 GCC 11与内核编译器版本一致仅在需要时通过CCgcc-12临时调用 GCC 12以避免内核模块 ABI 兼容性问题。1.3. 将 nouveau 列入黑名单需要手动禁用 Nouveau且应在运行 runfile 之前完成。这是 NVIDIA 官方文档明确要求的步骤不要依赖安装程序自动处理。Nouveau 是开源的 NVIDIA 驱动会与 runfile 中捆绑的 570.211.01 官方驱动冲突。官方 CUDA Quick Start Guide 在所有版本的 runfile 安装流程中都将 “Disable the Nouveau drivers” 列为第一步 。完整操作步骤Ubuntu 22.041. 检查 Nouveau 是否已加载lsmod|grepnouveau如果有输出继续下一步如果无输出说明已禁用跳到第 4 步。2. 创建黑名单配置catEOF|sudotee/etc/modprobe.d/blacklist-nouveau.confblacklist nouveau options nouveau modeset0 EOF3. 重新生成 initramfs 并重启sudoupdate-initramfs-usudoreboot4. 进入文本模式Runlevel 3重启后在 GRUB 界面按e编辑启动项在linux行末尾追加3 nomodeset然后按CtrlX启动。这会以纯文本模式进入系统避免图形驱动冲突。5. 停止显示管理器如果仍在运行sudosystemctl stop gdm3# 或 lightdm / sddm视你的桌面环境而定6. 运行 CUDA runfilesudoshcuda_12.8.2_570.211.01_linux.run --no-opengl-libs建议加--no-opengl-libs因为你使用的是 V100计算卡不需要 OpenGL 图形库可减少冲突。为什么不建议让 runfile 自动处理NVIDIA 的 runfile 在检测到 Nouveau 运行时确实会尝试自动生成一个/etc/modprobe.d/nvidia-installer-disable-nouveau.conf黑名单文件 。但存在两个风险如果安装中途失败或被打断系统已经禁用了 Nouveau 但尚未完成官方驱动安装重启后可能黑屏需进入救援模式手动删除该黑名单文件才能恢复 。安装程序要求重启后才能继续这会打断流程。手动预先处理可一次性完成。因此先手动 blacklist → 更新 initramfs → 重启进入文本模式 → 再执行 runfile是最稳妥、符合官方文档的做法。1.4. 安装 cuda 12.8.21.4.1. 下载并安装 cuda下载页面wgethttps://developer.download.nvidia.com/compute/cuda/12.8.2/local_installers/cuda_12.8.2_570.211.01_linux.runsudoshcuda_12.8.2_570.211.01_linux.run2. 安装 ofed for cx-6 dx主页网址下载源码版wgethttps://www.mellanox.com/downloads/ofed/MLNX_OFED-24.10-5.1.6.1/MLNX_OFED_SRC-debian-24.10-5.1.6.1.tgz这个MLNX_OFED_SRC-debian-24.10-5.1.6.1.tgz是Debian/Ubuntu 源码包不是预编译二进制。解压后得到的install.pl是一个完整的 Perl 构建脚本它会自动从SOURCES/目录中的源码 tarball 构建.deb包然后安装。安装步骤0. 安装cmake 3.31首先手动安装cmake 3.31否则在安装 ofed时会自动安装 ubuntu apt 仓库中的 3.22版本在后边构建 holoscan-sdk 时会发现版本太旧。wgethttps://github.com/Kitware/CMake/releases/download/v3.31.6/cmake-3.31.6.tar.gzsudoaptinstalllibssl-devtarzxf cmake-3.31.6.tar.gzcdcmake-3.31.6/ ./bootstrap--parallel256make-jsudomakeinstall# 检查安装版本hash-rcmake--version#### 1. 安装编译依赖在运行脚本前必须确保系统具备完整的编译环境bashsudoaptupdatesudoaptinstall-y\build-essential dkms debhelper\autoconf automake libtool pkg-config\quilt fakeroot\libnl-3-dev libnl-route-3-dev libnuma-dev\libssl-dev libelf-dev\cmake python3-dev pandoc\linux-headers-$(uname-r)2. 运行安装脚本进入解压后的目录执行cd~/install_mellanox/MLNX_OFED_SRC-24.10-5.1.6.1sudoperl install.pl--all常用选项说明根据你的需求选择选项含义--all安装所有可用包默认推荐包含内核模块、用户态库、工具--hpc仅安装 HPC 所需最小集合包含 UCX、OpenMPI、SHARP 等--basic仅安装基础功能最小集合--kernel-only只编译安装内核模块mlx5_core,mlx5_ib等--user-space-only只安装用户态库和工具--force强制安装跳过冲突检查--without-dkms禁用 DKMS直接为当前内核编译静态模块不推荐除非你有特殊需求--without-ucx跳过 UCX 安装你后续要手动编译 UCX 1.20.0这里可以跳过避免冲突推荐命令如果你后续要手动编译 UCX 1.20.0sudoperl install.pl--all--without-ucx3. 脚本会自动执行什么install.pl会按以下流程工作检测系统读取/etc/os-release确认是 Ubuntu 22.04卸载冲突包自动移除系统自带的rdma-core,libibverbs1,librdmacm1等包避免与 OFED 版本冲突解析依赖根据选择的安装选项从SOURCES/中确定需要构建哪些包编译构建对每个组件执行dpkg-buildpackage生成.deb包到DEBS/目录安装通过dpkg -i安装构建好的包内核模块默认使用DKMS编译mlnx-ofed-kernel-dkms等内核模块包自动适配当前内核版本4. 安装后验证# 检查内核模块是否加载lsmod|grepmlx5# 查看 RDMA 设备状态ibstat# 查看 OFED 版本ofed_info-s# 测试 RDMA 性能回环测试ib_write_bw-dmlx5_0--roce关键注意事项1. 与 CUDA 12.8.2 的兼容性这个脚本在安装过程中会检测 CUDA 环境。如果检测到已安装 CUDA它会自动启用ucx-cuda等 GPU Direct RDMA 支持。确保CUDA 驱动 570.211.01 已先安装。2. UCX 版本问题SOURCES/中自带的是ucx_1.18.0.orig.tar.gz安装后系统 UCX 版本为 1.18.0。你后续需要手动编译UCX 1.20.0并安装到独立目录如/opt/ucx-1.20.0这不会影响 OFED 的核心功能。3. 构建时间从源码构建全部组件需要较长时间取决于机器性能通常 15-30 分钟请耐心等待。4. 内核升级由于默认使用DKMS后续如果升级内核apt upgradeDKMS 会自动重新编译内核模块无需手动重装 OFED。5. 如果构建失败查看日志定位问题ls/tmp/OFED.*.logs/cat/tmp/OFED.*.logs/general.log总结命令一键执行# 1. 准备依赖sudoaptupdatesudoaptinstall-ybuild-essential dkms debhelper autoconf automake libtool\pkg-config quilt fakeroot libnl-3-dev libnl-route-3-dev libnuma-dev\libssl-dev libelf-dev cmake python3-dev pandoc linux-headers-$(uname-r)# 2. 进入目录并安装推荐 --all跳过自带 UCX 避免后续冲突cd~/install_mellanox/MLNX_OFED_SRC-24.10-5.1.6.1sudoperl install.pl--all--without-ucx# 3. 重启使内核模块生效sudoreboot# 4. 验证ibstat如果你只需要最基础的 RDMA 功能不需要 OpenMPI、SHARP 等可以改用sudo perl install.pl --basic。4. 选择适合 ofed 版本的 DOCA根据你的环境已安装 MLNX_OFED 24.10 Ubuntu 22.04 CUDA 12.8.2 V100应该选择DOCA 2.9.5 LTS2026年6月发布这是唯一与你现有环境完全兼容的版本。为什么选 DOCA 2.9.5 LTS版本对应 OFED与你的 OFED 24.10 兼容CUDA 兼容推荐DOCA 2.9.5 LTSOFED 24.10-5✅完全同源✅ CUDA 12.x⭐首选DOCA 2.9.4 LTSOFED 24.10-4✅ 兼容✅ CUDA 12.x备选DOCA 2.9.0OFED 24.10 初始版✅ 兼容✅ CUDA 12.x旧版DOCA 3.4.0OFED 26.04❌冲突❌ 要求 CUDA 13不要选DOCA 3.2.3 LTSOFED 26.04❌冲突❌ 要求 CUDA 13不要选关键原因同源驱动DOCA 2.9.x 是 OFED 24.10 的 DOCA 化版本内核模块mlx5_core,mlx5_ib和用户态库libibverbs,librdmacm与已安装的 OFED 24.10 完全一致不会冲突。CUDA 12 兼容DOCA 2.9.x 支持 CUDA 12.x而 DOCA 3.x 系列要求 CUDA 13V100 也无法使用 CUDA 13 的新特性。GPUNetIO 支持DOCA 2.9.5 包含doca-gpunetio-dev满足你后续编译 UCX 1.20.0 的需求。LTS 维护2026年6月发布包含最新的安全补丁和稳定性修复。下载与安装步骤1. 进入 DOCA 2.9.5 LTS 下载页面点击归档页面中的NVIDIA DOCA 2.9.5 LTS Downloads(June 2026)2. 下载 Ubuntu 22.04 的 Host 包在该版本页面中找到并下载doca-host_2.9.5-xxx-ubuntu2204_amd64.deb或选择对应你内核版本的doca-host包3. 安装推荐方式先卸载源码 OFED再装 DOCA 2.9.5由于你是通过MLNX_OFED_SRC-24.10-5.1.6.1源码编译安装的包版本号与 DOCA 仓库的元数据可能不完全匹配建议先卸载再重装# 1. 卸载现有源码编译的 OFED 24.10cd~/install_mellanox/MLNX_OFED_SRC-24.10-5.1.6.1sudoperl uninstall.sh--force# 2. 安装 DOCA 2.9.5包含等价的 OFED 24.10 驱动 GPUNetIOsudodpkg-idoca-host_2.9.5-xxx-ubuntu2204_amd64.debsudoapt-getinstall-f-y# 3. 安装 GPUNetIO 开发库sudoaptinstall-ydoca-gpunetio-dev4. 验证# 确认 DOCA 版本doca-info|head-20# 确认 GPUNetIO 库ls/opt/mellanox/doca/lib/libdoca_gpunetio*.so# 确认 RDMA 设备正常ibstat如果坚持不卸载现有 OFED 24.10如果你不想卸载已编译的 OFED 24.10可以尝试仅安装 DOCA 2.9.5 的 GPUNetIO 组件风险较高可能遇到依赖冲突# 添加 DOCA 2.9 仓库wget-qO- https://linux.mellanox.com/public/repo/doca/GPG-KEY-Mellanox.pub|\sudogpg--dearmor-o/usr/share/keyrings/GPG-KEY-Mellanox.pubechodeb [signed-by/usr/share/keyrings/GPG-KEY-Mellanox.pub] \ https://linux.mellanox.com/public/repo/doca/2.9.5/ubuntu22.04/x86_64 /|\sudotee/etc/apt/sources.list.d/doca.listsudoaptupdate# 尝试仅安装 GPUNetIOsudoaptinstall-ydoca-gpunetio-dev如果 apt 报错依赖冲突说明版本号不匹配此时必须卸载源码 OFED 并改用 DOCA 2.9.5 完整安装。总结你的需求对应版本已装 OFED 24.10DOCA 2.9.5 LTS同源驱动需要 GPUNetIODOCA 2.9.5 LTS含doca-gpunetio-devCUDA 12.8.2DOCA 2.9.5 LTSDOCA 3.x 要求 CUDA 13V100 GPUDOCA 2.9.5 LTSDOCA 3.x 的 GPUNetIO 针对 Ampere 优化V100 本就受限不要点击 DOCA 3.4.0 或 DOCA 3.2.3 LTS它们会导致驱动栈冲突。5. 安装 DOCA 2.9.5 LTSDOCA 2.9.5 LTS 下载主页避免安装ofed自带的推荐模块 ucx使用–no-install-recommendswgethttps://www.mellanox.com/downloads/DOCA/DOCA_v2.9.5/host/doca-host_2.9.5-008000-24.10-ubuntu2204_amd64.debsudodpkg-idoca-host_2.9.5-008000-24.10-ubuntu2204_amd64.debsudoapt-getupdatesudoapt-get-yinstalldoca-allapt-cache depends doca-ofed | grep -E “Depends|Recommends” | grep -i ucxdoca 依赖 ucx必须安装。索性doca-all 了。6. 下载适合 cuda 12.8.2 的 TensorRTwget-chttps://developer.nvidia.com/downloads/compute/machine-learning/tensorrt/10.9.0/tars/TensorRT-10.9.0.34.Linux.x86_64-gnu.cuda-12.8.tar.gztarzxf TensorRT-10.9.0.34.Linux.x86_64-gnu.cuda-12.8.tar.gzsudomvTensorRT-10.9.0.34 /usr/local/安装 protobufwgethttps://github.com/protocolbuffers/protobuf/releases/download/v21.12/protobuf-cpp-3.21.12.tar.gztar-xzfprotobuf-cpp-3.21.12.tar.gzcdprotobuf-3.21.12 cmake-Scmake-Bbuild-cmake-GNinja-DCMAKE_BUILD_TYPERelease-DCMAKE_INSTALL_PREFIX/usr/local-Dprotobuf_BUILD_TESTSOFF-DBUILD_SHARED_LIBSON cmake--buildbuild-cmake -j$(nproc)sudocmake--installbuild-cmakesudoldconfigls/usr/local/lib/cmake/protobuf/安装一个与 protobuf 3.21.2 版本匹配的 grpc# 1. 安装编译依赖sudoapt-getinstall-ybuild-essential pkg-config\libssl-dev zlib1g-dev libc-ares-dev# 2. 下载源码并编译安装gitclone --recurse-submodules-bv1.51.1--depth1--shallow-submodules\https://github.com/grpc/grpccdgrpc cmake-S.-Bcmake/build-GNinja\-DCMAKE_BUILD_TYPERelease\-DCMAKE_INSTALL_PREFIX/usr/local\-DgRPC_INSTALLON\-DgRPC_BUILD_TESTSOFF\-DgRPC_PROTOBUF_PROVIDERpackage\-DgRPC_ZLIB_PROVIDERpackage\-DgRPC_CARES_PROVIDERpackage\-DgRPC_SSL_PROVIDERpackage\-DgRPC_ABSL_PROVIDERmodule\-DgRPC_RE2_PROVIDERmodule cmake--buildcmake/build -j$(nproc)sudocmake--installcmake/buildsudoldconfig安装 yamlgitclone https://github.com/jbeder/yaml-cpp.gitcdyaml-cppgitcheckout0.8.0 cmake-Bbuild\-DCMAKE_BUILD_TYPERelease\-DCMAKE_POSITION_INDEPENDENT_CODEON\-DYAML_CPP_BUILD_TESTSOFF\-DYAML_CPP_BUILD_TOOLSOFF\-DYAML_BUILD_SHARED_LIBSON cmake--buildbuild -j$(nproc)sudocmake--installbuildsudoldconfig安装 ucx v1.20.0提前出示需要打补丁给 ucx v1.20.0 的内容。在checkout后 v1.20.0 后要做一个补丁定义一个宏函数 READ_ONCErulerruler-Super-Server:~/ex_holoscan/ucx$ git diff diff--git a/src/uct/ib/mlx5/gdaki/gdaki.cuh b/src/uct/ib/mlx5/gdaki/gdaki.cuh index b057bc3cf..850cccf32100644---a/src/uct/ib/mlx5/gdaki/gdaki.cuhb/src/uct/ib/mlx5/gdaki/gdaki.cuh -12,612,10#includedoca_gpunetio_dev_verbs_qp.cuh#includecooperative_groups.h#ifndef READ_ONCE#defineREAD_ONCE(x)(*(volatiletypeof(x)*)(x))#endif#defineUCT_RC_GDA_RESV_WQE_NO_RESOURCE-1ULL#defineUCT_RC_GDA_WQE_ERRUCS_BIT(63)#defineUCT_RC_GDA_WQE_MASKUCS_MASK(63)rulerruler-Super-Server:~/ex_holoscan/ucx$ git branch*(HEAD detached at v1.20.0)master rulerruler-Super-Server:~/ex_holoscan/ucx$配置编译 ucxcd /opt# 1. 下载源码gitclone https://github.com/openucx/ucx.gitcducx/gittaggitcheckout v1.20.0 ./autogen.sh# 2. 创建构建目录mkdirbuildcdbuild# 3. 配置release 优化版本# --with-cuda: 指定 CUDA 路径# --with-verbs / --with-rdmacm: 启用 IB/RoCE 传输# --enable-mt: 启用多线程支持# GDA 会自动通过 pkg-config 检测 doca-gpunetio../contrib/configure-release\--prefix/opt/ucx-1.20.0\--with-cuda/usr/local/cuda\--with-doca/opt/mellanox/doca\--enable-gdrcopy\--with-verbs\--with-rc\--with-ud\--with-dc\--with-mlx5-dv\--with-dm# 4. 编译安装make-j$(nproc)sudomakeinstall安装 gxf# 1. 下载 GXF 5.7.1x86_64, CUDA 12 版仅约 5MBcd/tmpcurl-S-# -L -o gxf.tgz \https://edge.urm.nvidia.com/artifactory/sw-holoscan-thirdparty-generic-local/gxf/gxf_5.7.1_20260713_86d402891_holoscan-sdk-cu12_x86_64.tar.gz# 2. 解压到 /opt/nvidia/gxf--strip-components 2 是官方 Dockerfile 的同款用法sudomkdir-p/opt/nvidia/gxfsudotarxzf gxf.tgz-C/opt/nvidia/gxf --strip-components2# 3. 验证 CMake 配置文件就位ls/opt/nvidia/gxf/lib/cmake/GXF/GXFConfig.cmake然后 holoscan-sdk 使用 gxf 的方式多一条-DGXF_DIR/opt/nvidia/gxf/lib/cmake/GXFcd~/ex_holoscan/tmp01/holoscan-sdkrm-rfbuild cmake-S.-Bbuild-GNinja\-DCMAKE_BUILD_TYPERelease\-DGXF_DIR/opt/nvidia/gxf/lib/cmake/GXF\-Ducx_DIR/opt/ucx-1.20.0/lib/cmake/ucx\# …加上你原来用的其他 -D 参数cmake--buildbuild -j$(nproc)参考https://github.com/NVIDIA-ISAAC-ROS/gxfhttps://catalog.ngc.nvidia.com/orgs/nvidia/clara-holoscan/resources/gxf_x86_64_holoscan_sdk/-?_lr1https://edge.urm.nvidia.com/artifactory/sw-holoscan-thirdparty-generic-local/gxf/gxf_5.7.1_20260713_86d402891_holoscan-sdk-cu12_x86_64.tar.gz安装V4L2sudoapt-getupdatesudoapt-getinstall-ylibv4l-dev v4l-utils下载holoscan-sdkgitclone https://github.com/nvidia-holoscan/holoscan-sdk.gitcdholoscan-sdk/gitchekcout v4.5.0构建 holoscan-sdkcmake-S/home/ruler/ex_holoscan/tmp01/holoscan-sdk\-B/home/ruler/ex_holoscan/tmp01/holoscan-sdk/build/\-GNinja\-DCMAKE_BUILD_TYPERelease\-DCUDAToolkit_ROOT:PATH/usr/local/cuda\-DHOLOSCAN_ENABLE_VIZOFF\-DHOLOSCAN_BUILD_EXAMPLESOFF\-DHOLOSCAN_BUILD_TESTSOFF\-DHOLOSCAN_DOWNLOAD_DATASETSOFF\-DTensorRT_ROOT/home/ruler/ex_holoscan/TensorRT-10.9.0.34\-Ducx_DIR/opt/ucx-1.20.0/lib/cmake/ucx