基于NVIDIA RTX 4090的COLMAP 3.7安裝指南:Ubuntu 20.04 + CUDA 11.8環境配置【2025最新版!!】

一、引言

三維重建技術作為計算機視覺領域的核心方向,在數字孿生、自動駕駛等領域具有重要應用價值。COLMAP作為開源的SfM(Structure-from-Motion)工具,其GPU加速特性可顯著提升重建效率。由于最新研究三維重建的需要(3DGS、NeRF等),模型的輸出需要COLMAP進行預處理。
本文針對NVIDIA新一代Ada Lovelace架構的RTX 4090顯卡,結合CUDA 11.8環境,詳細講解Ubuntu 20.04系統下COLMAP 3.7的編譯安裝全流程,并針對可能出現的兼容性問題提供有效的解決方案。

二、環境準備

2.1 系統更新

sudo apt update && sudo apt upgrade -y
sudo apt install build-essential cmake git libboost-all-dev \libeigen3-dev libfreeimage-dev libgflags-dev libglew-dev \libgoogle-glog-dev libsuitesparse-dev libceres-dev \libqt5opengl5-dev libsqlite3-dev libcgal-dev \libcgal-qt5-dev libatlas-base-dev

2.2 CUDA11.8安裝

可以登錄英偉達官方網站下載符合要求的CUDA(11.8為例)
https://developer.nvidia.com/cuda-toolkit-archive
在這里插入圖片描述
在這里插入圖片描述
推薦用runfile安裝
也可也命令行執行:

wget https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda_11.8.0_520.61.05_linux.run
sudo sh cuda_11.8.0_520.61.05_linux.run

配置環境變量:

echo 'export PATH=/usr/local/cuda-11.8/bin:$PATH' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/cuda-11.8/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc

2.3 cudnn安裝

cuDNN比較容易安裝,下載對應版本的壓縮包,拷貝到指定文件目錄,給予權限就好了

官網下載地址:(需要注冊)
https://developer.nvidia.com/rdp/cudnn-archive
在這里插入圖片描述
選擇對應的11.x的版本
特別注意拷貝的路徑一定是上面指定的環境變量路徑!
安裝步驟如下:

# 解壓下載的tar包(版本號可能不同)
tar -xzvf cudnn-11.8-linux-x64-v8.6.0.163.tgz# 復制文件到CUDA目錄
sudo cp cuda/include/cudnn*.h /usr/local/cuda-11.8/include
sudo cp cuda/lib64/libcudnn* /usr/local/cuda-11.8/lib64# 設置權限
sudo chmod a+r /usr/local/cuda-11.8/include/cudnn*.h
sudo chmod a+r /usr/local/cuda-11.8/lib64/libcudnn*# 創建軟鏈接(重要!)
cd /usr/local/cuda-11.8/lib64
sudo ln -sf libcudnn.so.8.6.0 libcudnn.so.8
sudo ln -sf libcudnn.so.8 libcudnn.so
sudo ldconfig# 檢查cuDNN版本
cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2
# 應輸出類似:
# #define CUDNN_MAJOR 8
# #define CUDNN_MINOR 6
# #define CUDNN_PATCHLEVEL 0

2.4 驅動兼容性驗證

在這里插入圖片描述

2.5 確認 Compute Capability

nvidia-smi --query-gpu=compute_cap --format=csv,noheader
# 應返回 8.9
這就表示 RTX 4090 對應的 Compute Capability 是 8.9

在這里插入圖片描述

為什么要關心? 后面 CMake 需要明確告訴編譯器 “我就是 8.9”,否則會報 compute_native 不支持的錯

三、COLMAP 3.7源碼編譯

3.1 源碼獲取

可以從官網直接下載對應的版本
https://github.com/colmap/colmap
在這里插入圖片描述

在這里插入圖片描述
在這里插入圖片描述
比如3.7版本 下載對應的壓縮文件,然后解壓
或者可以直接使用git 命令進行clone :

git clone https://github.com/colmap/colmap.git
cd colmap
git checkout 3.7
git submodule update --init --recursive

3.2 安裝配置

#安裝依賴
sudo apt-get install git cmake ninja-build build-essential libboost-program-options-dev libboost-filesystem-dev libboost-graph-dev libboost-system-dev libeigen3-dev libflann-dev libfreeimage-dev libmetis-dev libgoogle-glog-dev libgtest-dev libsqlite3-dev libglew-dev qtbase5-dev libqt5opengl5-dev libcgal-dev libceres-dev#進入文件夾
cd colmap#創建并進入build文件夾
mkdir build
cd build#構建安裝
cmake .. -GNinja #CMake預處理,生成Ninja構建系統所需的文件
ninja #默認使用系統最大可用cpu核心數進行編譯,如果系統cpu有32個核,等效與ninja -j32
sudo ninja install

四、 COLMAP編譯過程中可能會遇到如下問題:

[2/260] Building NVCC (Device) object lib/SiftGPU/CMakeFiles/sift_gpu.dir/sift_gpu_generated_ProgramCU.cu.o
FAILED: lib/SiftGPU/CMakeFiles/sift_gpu.dir/sift_gpu_generated_ProgramCU.cu.o 
cd /root/autodl-tmp/gaussian-splatting/submodules/colmap-3.7/build/lib/SiftGPU/CMakeFiles/sift_gpu.dir && /usr/bin/cmake -E make_directory /root/autodl-tmp/gaussian-splatting/submodules/colmap-3.7/build/lib/SiftGPU/CMakeFiles/sift_gpu.dir//. && /usr/bin/cmake -D verbose:BOOL=OFF -D build_configuration:STRING=Release -D generated_file:STRING=/root/autodl-tmp/gaussian-splatting/submodules/colmap-3.7/build/lib/SiftGPU/CMakeFiles/sift_gpu.dir//./sift_gpu_generated_ProgramCU.cu.o -D generated_cubin_file:STRING=/root/autodl-tmp/gaussian-splatting/submodules/colmap-3.7/build/lib/SiftGPU/CMakeFiles/sift_gpu.dir//./sift_gpu_generated_ProgramCU.cu.o.cubin.txt -P /root/autodl-tmp/gaussian-splatting/submodules/colmap-3.7/build/lib/SiftGPU/CMakeFiles/sift_gpu.dir//sift_gpu_generated_ProgramCU.cu.o.Release.cmake
nvcc fatal   : Unsupported gpu architecture 'compute_89'

4.1、原因分析

此錯誤的核心在于 CUDA 版本與 GPU 架構的兼容性問題。具體來說:

  • 架構檢測機制:COLMAP 的 CMake 構建系統默認使用 Auto 選項來自動檢測當前 GPU 的計算能力。
  • RTX 4090 的架構:RTX 4090 基于 NVIDIA 的 Ada Lovelace 架構,對應的計算能力是 8.9(在 CUDA 代碼中表示為 compute_89)。
  • CUDA 11.8 的支持范圍:CUDA 11.8 最高支持到 Ampere 架構(計算能力 8.6),不支持更新的 Ada Lovelace 架構(8.9)。
  • 錯誤觸發:當構建系統檢測到 RTX 4090 并嘗試為其生成優化代碼時,NVCC 編譯器發現自己不支持目標架構,因此拋出 Unsupported gpu architecture ‘compute_89’ 錯誤

4.2、解決方案

方案一、命令行指定 CUDA 架構

最直接的解決方法是在運行 CMake 時通過命令行參數指定兼容的 CUDA 架構:

sudo apt install ninja-build
cd /root/autodl-tmp/gaussian-splatting/submodules/colmap-3.7/
rm -rf build
mkdir build
cd build
cmake .. -GNinja -DCMAKE_BUILD_TYPE=Release -DCUDA_ARCHS="Ampere"
ninja

這里我們使用 Ampere 作為架構名稱,它對應計算能力 8.0 和 8.6,這是 CUDA 11.8 支持的最高架構級別。

方案二、使用特定計算能力列表

cmake .. -DCUDA_ARCHS="8.0;8.6"

這種格式使用分號分隔的列表來指定所有目標計算能力。

方案三、修改 CMakeLists.txt

如果前兩種方法不成功,或者希望長期修改配置,可以直接編輯 COLMAP 的 CMakeLists.txt 文件:

打開主配置文件:
bashnano /root/autodl-tmp/gaussian-splatting/submodules/colmap-3.7/CMakeLists.txt找到并修改 CUDA_ARCHS 的設置(大約在第 53 行):
cmakeset(CUDA_ARCHS "Ampere" CACHE STRING "List of CUDA architectures for which to \
generate code, e.g., Auto, All, Maxwell, Pascal, ...")保存文件后按常規方式構建:
cmake ..
ninja

架構兼容性注意事項

值得注意的是,雖然 RTX 4090 的原生計算能力是 8.9,但它完全向后兼容較低計算能力的代碼。當我們指定為 Ampere 架構(8.6)構建代碼時:

  • 功能兼容性:所有功能將正常工作,不會有功能缺失。
  • 性能影響:可能會錯過一些針對 8.9 架構的特定優化,但這種性能差異通常很小,對大多數應用場景幾乎不會有明顯影響。
  • 靈活性:這種方法讓我們可以繼續使用現有的 CUDA 11.8 環境,無需升級到 CUDA 12 或更高版本。

4.3 常見問題解答

Q1:為什么直接指定 “86” 作為架構會失敗?

A1:COLMAP 的構建系統使用了特殊的 CUDA 架構選擇腳本,它期望架構以特定格式提供,如官方架構名稱(“Ampere”)或帶小數點的計算能力版本號(“8.6”)。直接使用 “86” 會導致腳本無法識別。

Q2:使用這種解決方案會影響 COLMAP 的性能嗎?

A2:雖然理論上可能會略微影響性能,但實際使用中差異微乎其微。大多數 CUDA 核心功能和優化在 8.6 和 8.9 架構之間變化不大。

Q3:是否有可能在不修改配置的情況下使用 RTX 4090?

A3:不行。由于 CUDA 版本對架構支持的限制,必須進行一些配置修改。如果堅持使用自動檢測,唯一的解決方案是升級到 CUDA 12 或更高版本。

五、總結

在使用新一代 GPU 如 RTX 4090 搭配較老版本 CUDA 環境編譯 COLMAP 時,架構兼容性問題是一個常見障礙。本文詳細解析了問題原因,并提供了多種不同層次的解決方案,從簡單的命令行參數到深入修改配置文件。這些方法使用戶能夠在不升級 CUDA 版本的情況下,充分利用 GPU 加速的 COLMAP 功能,為計算機視覺和三維重建項目提供高效處理能力。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/77528.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/77528.shtml
英文地址,請注明出處:http://en.pswp.cn/web/77528.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Spring Boot 依賴管理: `spring-boot-starter-parent` 與 `spring-boot-dependencies`

前言 在 Spring Boot 的開發實踐中,依賴管理是構建高質量應用的基礎。spring-boot-starter-parent 和 spring-boot-dependencies 是 Spring Boot 提供的兩大核心依賴管理工具,它們在簡化依賴版本控制、統一配置等方面發揮著關鍵作用。 一、核心概念解析…

【MySQL】基本查詢

目錄 增加 查詢 基本查詢 where子句 結果排序 篩選分頁結果 修改(更新) 刪除 普通刪除 截斷表 插入查詢結果 聚合函數 分組查詢 這一節的內容是對表內容的增刪查改,其中重點是表的查詢 增加 語法: INSERT [INTO] table_name [(column [, …

【C++詳解】C++入門(二)引用、內聯函數、nullptr宏

文章目錄 一、引用引用的概念和定義引用的功能引用的特性const引用const用法回顧權限的放大縮小const引用的功能 指針和引用的關系 二、內聯函數三、nullptr補充結構體指針變量類型重定義 一、引用 引用的概念和定義 C祖師爺為了優化在部分場景中使用指針會出現的效率較低和比…

畢業設計-基于深度學習的實時網絡入侵檢測系統

項目技術說明 深度學習實時網絡入侵檢測系統是一種利用深度學習技術對網絡流量進行實時分析,以識別和阻止潛在網絡攻擊的安全解決方案。相比傳統基于規則的入侵檢測系統(IDS),這種系統能夠通過學習網絡流量的正常模式和異常模式,更有效地檢測…

中藥企業數字化轉型:從傳統制造到智能制藥的跨越

在當今數字化浪潮下,中藥企業正積極擁抱變革,努力實現從傳統制造向智能制藥的跨越,以適應市場競爭和滿足人們對中藥質量與效率的更高要求。 在原料管理環節,企業通過采用物聯網技術,對中藥材種植、采集過程進行全程監…

Vue 2 的響應式 API 和 Vue 3 的組合式 API 的詳細對比,從核心機制、使用方式、代碼示例及優缺點展開

以下是 Vue 2 的響應式 API 和 Vue 3 的組合式 API 的詳細對比,從核心機制、使用方式、代碼示例及優缺點展開: 1. Vue 2 的響應式 API 核心機制 基于 Object.defineProperty: 通過劫持對象的 getter 和 setter 實現數據變化追蹤。限制&…

“八股訓練營”學習總結

在參加為期 40 天的八股訓練營的這段時間里,我收獲滿滿,不僅在知識技能上得到了提升,更在學習習慣和自我認知方面有了很大的進步。 在知識層面,訓練營涵蓋了網絡、數據庫、緩存以及python測試開發等多方面的知識點。 網絡方面&a…

Python對比兩張CAD圖并標記差異的解決方案

以下是使用Python對比兩張CAD圖并標記差異的解決方案,結合圖像處理和CAD結構分析: 一、環境準備與庫選擇 圖像處理庫:使用OpenCV進行圖像差異檢測、顏色空間轉換和輪廓分析。CAD解析庫:若為DXF格式,使用ezdxf解析實體…

記錄學習記錄學習《手動學習深度學習》這本書的筆記(九)

馬不停蹄地來到了第十二章:計算性能…… 感覺應該是講并行計算方面的,比如GPU、CPU、CUDA那些。 第十二章:計算性能 12.1 編譯器和解釋器 這里先提出了命令式編程和符號式編程的概念。 命令式編程VS符號式編程 目前為止,本書…

模板引擎語法-過濾器

模板引擎語法-過濾器 文章目錄 模板引擎語法-過濾器[toc]1.default過濾器2.default_if_none過濾器3.length過濾器4.addslashes過濾器5.capfirst過濾器6.cut過濾器7.date過濾器8.dictsort過濾器 1.default過濾器 default過濾器用于設置默認值。default過濾器對于變量的作用&…

make學習三:書寫規則

系列文章目錄 Make學習一:make初探 Make學習二:makefile組成要素 文章目錄 系列文章目錄前言默認目標規則語法order-only prerequisites文件名中的通配符偽目標 Phony Targets沒有 Prerequisites 和 recipe內建特殊目標名一個目標多條規則或多個目標共…

網絡安全技能大賽B模塊賽題解析Server12環境

已知靶機存在?站系統,使?Nmap?具掃描靶機端?,并將?站服務的端?號作為Flag (形式:Flag字符串)值提交 使用nmap掃描目標靶機網站服務的端口號為8089 Falg:8089 訪問?站/admin/pinglun.asp??&#…

1、Linux操作系統下,ubuntu22.04版本切換中英文界面

切換中英文界面的方法很多,我也是按照一個能用的方法弄過來并且記錄, 1.如果剛開始使用Ubuntu環境,桌面的語言環境為英文,需要安裝中文簡體的字體包 打開桌面終端,輸入 sudo apt install language-pack-zh-hans lan…

SmolVLM2: The Smollest Video Model Ever(六)

繼續微調 微調視頻的代碼如下: # 此Python文件用于對SmolVLM2進行視頻字幕任務的微調 # 導入所需的庫 import os os.environ["CUDA_VISIBLE_DEVICES"] "1" import torch from peft import LoraConfig, prepare_model_for_kbit_training, get…

Spring Boot安裝指南

🔖 Spring Boot安裝指南 🌱 Spring Boot支持兩種使用方式: 1?? 可作為常規Java開發工具使用 2?? 可作為命令行工具安裝 ?? 安裝前提: 📌 系統需安裝 Java SDK 17 或更高版本 🔍 建議先運行檢查命令…

數據結構(七)---鏈式棧

#### 鏈式棧實現 ##### linkstack.h #ifndef _LINKSTACK_H #define _LINKSTACK_H // 引入相關的庫文件 #include <stdio.h> #include <stdlib.h> #include <string.h> // 定義元素類型的別名 typedef int DATA; //定義鏈式棧節點 typedef struct node { …

【Spring Boot】Maven中引入 springboot 相關依賴的方式

文章目錄 Maven中引入 springboot 相關依賴的方式1. 不使用版本管理&#xff08;不推薦&#xff09;2、使用版本管理&#xff08;推薦&#xff09;2.1 繼承 spring-boot-starter-parent2.2 使用 spring-boot-dependencies 自定義父工程2.3引入 spring-framework-bom Maven中引…

DataStreamAPI實踐原理——快速上手

引入 通過編程模型&#xff0c;我們知道Flink的編程模型提供了多層級的抽象&#xff0c;越上層的API&#xff0c;其描述性和可閱讀性越強&#xff0c;越下層API&#xff0c;其靈活度高、表達力越強&#xff0c;多數時候上層API能做到的事情&#xff0c;下層API也能做到&#x…

WPF 圖片文本按鈕 自定義按鈕

效果 上面圖片,下面文本 樣式 <!-- 圖片文本按鈕樣式 --> <Style x:Key="ImageTextButtonStyle" TargetType="Button"><Setter Property="Background" Value="Transparent"/><Setter Property="BorderTh…

驅動開發硬核特訓 · Day 22(上篇): 電源管理體系完整梳理:I2C、Regulator、PMIC與Power-Domain框架

&#x1f4d8; 一、電源子系統總覽 在現代Linux內核中&#xff0c;電源管理不僅是系統穩定性的保障&#xff0c;也是實現高效能與低功耗運行的核心機制。 系統中涉及電源管理的關鍵子系統包括&#xff1a; I2C子系統&#xff1a;硬件通信基礎Regulator子系統&#xff1a;電源…