COLMAP非NVIDIA GPU支持情况及CUDA设备识别失败问题问询
我来帮你拆解并解答这两个问题:
COLMAP的GPU加速功能完全依赖NVIDIA的CUDA框架,这是NVIDIA专属的并行计算平台。目前官方没有为非NVIDIA GPU(比如AMD、Intel集成显卡等)提供GPU加速支持,如果你使用这类设备,只能切换到CPU模式运行所有模块(特征提取、特征匹配、三维重建等),无法利用GPU加速。
从你的描述来看,8月30日的版本能正常运行,但升级到dev分支的ad7bd93版本后出现崩溃,且回滚旧版本构建失败。结合你的环境(macOS Mojave 10.14.6),可以从以下几个方向排查和解决:
1. 检查CUDA版本兼容性
macOS Mojave的系统版本限制了最高支持的CUDA版本为CUDA 10.1——NVIDIA从CUDA 10.2开始就停止了对macOS的支持。如果新版本COLMAP提升了CUDA版本要求,你的系统无法满足,就会导致CUDA设备识别失败。建议你确认当前安装的CUDA版本,以及新版本COLMAP的CUDA依赖要求。
2. 重新构建时确保CUDA被正确检测
回滚或重新构建COLMAP时,一定要确保CMake正确识别到CUDA。可以尝试以下步骤:
- 彻底删除之前的
build目录,避免缓存干扰 - 运行CMake时手动指定CUDA编译器路径:
cmake -S . -B build -DCMAKE_CUDA_COMPILER=/usr/local/cuda/bin/nvcc - 查看CMake的输出日志,确认是否有类似
Found CUDA: /usr/local/cuda的提示,如果没有,说明构建过程中没有启用CUDA支持,运行时调用GPU就会崩溃。
3. 先验证CPU模式是否正常
先切换到CPU模式运行特征提取,排查是否是GPU专属问题:
colmap feature_extractor --database_path DATABASE_PATH --image_path IMAGES_PATH --ImageReader.camera_model RADIAL --ImageReader.single_camera_per_folder 1 --SiftExtraction.use_gpu 0
如果CPU模式能正常运行,说明问题确实出在CUDA设备的适配层面。
4. 解决回滚版本的构建失败问题
回滚到旧版本后构建失败,大概率是构建缓存或依赖库版本不兼容导致的:
- 清理所有构建缓存,包括
build目录和系统中可能残留的旧编译文件 - 检查OpenCV、Eigen等依赖库的版本,旧版本COLMAP可能依赖特定版本的库,如果你的系统已经更新了这些库,可能需要安装对应版本的依赖包。
5. 排查代码变更影响
查看ad7bd93提交及之后的代码变更,重点关注SIFT特征提取器或CUDA设备检测相关的逻辑——新版本可能对CUDA设备的检测更严格,导致旧系统的CUDA设备无法通过校验,进而触发崩溃。
你的报错信息与复现命令
报错信息:
*** Check failure stack trace: *** @ 0x11303b349 google::LogMessage::Flush() @ 0x11303e9ef google::LogMessageFatal::~LogMessageFatal() @ 0x11303bc77 google::LogMessageFatal::~LogMessageFatal() @ 0x10d99e10d colmap::SiftFeatureExtractor::SiftFeatureExtractor() @ 0x10d7bcd19 RunFeatureExtractor() @ 0x10d7da01c main [1] 38034 abort colmap feature_extractor --database_path --image_path RADIAL 1 1
复现命令:
colmap feature_extractor --database_path DATABASE_PATH --image_path IMAGES_PATH --ImageReader.camera_model RADIAL --ImageReader.single_camera_per_folder 1 --SiftExtraction.use_gpu 1
内容的提问来源于stack exchange,提问作者Saad Bahir




