
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