이 둘은 기본적으로 설치햐주자
sudo apt update
sudo apt install cmake
sudo apt install git
conda create -n cuda121 python==3.8
python 3.8이 호환성이 좋다고 해서 3.8로 진행
설치 후 재시작
sudo apt-get purge nvidia*
sudo apt-get autoremove
sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt-get update
sudo apt-get install nvidia-driver-535
sudo reboot
이딴걸로 설치하면 nvcc가 제외된 버전으로 설치된다
CUDAtoolkit은 직접 다운해서 설치해야 한다
나는 내가 원하는 위치에 CUDA를 설치하고 싶었다(용량문제)
내 CUDA 설치 위치는/mnt/ssd1t/cuda/12.1
내가 사용할 수 있는 가장 오래된 버전인 COLAMP 3.9.1과 호환되는 12.1 부터 설치했다.
# CUDA 설치 디렉토리 준비
sudo mkdir -p /mnt/ssd1t/cuda/12.1
#CUDA 파일 다운로드
wget https://developer.download.nvidia.com/compute/cuda/12.1.1/local_installers/cuda_12.1.1_530.30.02_linux.run
# CUDA Toolkit 설치
sudo sh cuda_12.1.1_530.30.02_linux.run --silent --toolkit --toolkitpath=/mnt/ssd1t/cuda/12.1
# 가상환경 활성화
conda activate cuda121
# 필요한 디렉토리 생성
mkdir -p /mnt/ssd1t/ubuntu/anaconda/envs/cuda121/etc/conda/activate.d
# env_vars.sh 파일 생성 및 환경변수 설정
echo '#!/bin/sh
export PATH=/mnt/ssd1t/cuda/12.1/bin:$CONDA_PREFIX/bin:$PATH
export LD_LIBRARY_PATH=/mnt/ssd1t/cuda/12.1/lib64:$CONDA_PREFIX/lib:$LD_LIBRARY_PATH
export CMAKE_PREFIX_PATH=$CONDA_PREFIX
# 중복된 경로 제거
export PATH=$(echo $PATH | tr ":" "\n" | awk "!x[\$0]++" | tr "\n" ":")
export LD_LIBRARY_PATH=$(echo $LD_LIBRARY_PATH | tr ":" "\n" | awk "!x[\$0]++" | tr "\n" ":")
' > /mnt/ssd1t/ubuntu/anaconda/envs/cuda121/etc/conda/activate.d/env_vars.sh
# 스크립트에 실행 권한 부여
chmod +x /mnt/ssd1t/ubuntu/anaconda/envs/cuda121/etc/conda/activate.d/env_vars.sh
# 비활성화 스크립트 생성
mkdir -p /mnt/ssd1t/ubuntu/anaconda/envs/cuda121/etc/conda/deactivate.d
echo '#!/bin/sh
export PATH=$(echo "$PATH" | sed -e "s;/mnt/ssd1t/cuda/12.1/bin:;;" -e "s;$CONDA_PREFIX/bin:;;")
export LD_LIBRARY_PATH=$(echo "$LD_LIBRARY_PATH" | sed -e "s;/mnt/ssd1t/cuda/12.1/lib64:;;" -e "s;$CONDA_PREFIX/lib:;;")
export CMAKE_PREFIX_PATH=$(echo "$CMAKE_PREFIX_PATH" | sed -e "s;$CONDA_PREFIX:;;")' > /mnt/ssd1t/ubuntu/anaconda/envs/cuda121/etc/conda/deactivate.d/unset_env_vars.sh
chmod +x /mnt/ssd1t/ubuntu/anaconda/envs/cuda121/etc/conda/deactivate.d/unset_env_vars.sh
# 가상환경 비활성화 및 재활성화
conda deactivate
conda activate cuda121
# nvcc 명령어 확인
nvcc --version
cuDNN다운(로그인필요)
Local installer for Linux x86_64(Tar)로 설치했다
Ubuntu용은 라이브러리가 더 적다고 하는데, 뭐 그렇다더라
압축풀기
tar -xf cudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz
include, lib 폴더에 있는 파일 옮기기
sudo cp include/cudnn*.h /mnt/ssd1t/ubuntu/anaconda/envs/cuda121/include
sudo cp lib/libcudnn* /mnt/ssd1t/ubuntu/anaconda/envs/cuda121/lib
권한 설정
sudo chmod a+r /mnt/ssd1t/ubuntu/anaconda/envs/cuda121/include/cudnn*.h
sudo chmod a+r /mnt/ssd1t/ubuntu/anaconda/envs/cuda121/lib/libcudnn*
# 필수 패키지 설치
sudo apt-get update
sudo apt-get install -y git cmake build-essential libboost-all-dev \
libeigen3-dev libsuitesparse-dev libfreeimage-dev \
libgoogle-glog-dev libgflags-dev libglew-dev \
qtbase5-dev libqt5opengl5-dev libcgal-dev \
libcgal-qt5-dev wget
아래꺼는 필요 없을수도 나중에 다시 확인
conda install -c conda-forge boost
conda install -c conda-forge eigen
conda install -c conda-forge freeimage
conda install -c conda-forge glog
conda install -c conda-forge gflags
conda install -c conda-forge suitesparse
conda install -c conda-forge ceres-solver
conda install -c conda-forge flann
conda install -c conda-forge lz4-c
conda install -c conda-forge sqlite
conda install -c conda-forge cgal
conda install -c conda-forge qt
conda install -c conda-forge glew
클론 위치: /mnt/ssd1t/ubuntu/colmap_cuda121
최신버전(3.10 dev)
git clone https://github.com/colmap/colmap.git /mnt/ssd1t/ubuntu/colmap_cuda121
cd /mnt/ssd1t/ubuntu/colmap_cuda121
mkdir build
cd build
3.9.1버전 설치
git clone https://github.com/colmap/colmap.git /mnt/ssd1t/ubuntu/colmap3.9.1
cd /mnt/ssd1t/ubuntu/colmap3.9.1
git checkout tags/3.9.1 -b v3.9.1
cd /mnt/ssd1t/ubuntu/colmap_cuda121
mkdir build
cd build
나처럼 가상환경에 빌드 중이라면, Cmake 빌드과정에서 FLANN의 경로가 잘못되어 있어서 오류가 발생한다.
colmap->cmake->
FindFLANN.cmake
FindLZ4.cmake
다음과 같이 수정해주자
수정 전
list(APPEND FLANN_CHECK_INCLUDE_DIRS
${FLANN_INCLUDE_DIR_HINTS}
/usr/include
/usr/local/include
/opt/include
/opt/local/include
)
list(APPEND FLANN_CHECK_LIBRARY_DIRS
${FLANN_LIBRARY_DIR_HINTS}
/usr/lib
/usr/local/lib
/opt/lib
/opt/local/lib
)
수정 후
list(APPEND FLANN_CHECK_INCLUDE_DIRS
${FLANN_INCLUDE_DIR_HINTS}
/usr/include
/usr/local/include
/opt/include
/opt/local/include
/mnt/ssd1t/ubuntu/anaconda/envs/cuda121/include
)
list(APPEND FLANN_CHECK_LIBRARY_DIRS
${FLANN_LIBRARY_DIR_HINTS}
/usr/lib
/usr/local/lib
/opt/lib
/opt/local/lib
/mnt/ssd1t/ubuntu/anaconda/envs/cuda121/lib
)
colmap->CMakeLists.txt파일의 맨 아래에
set(SQLite3_INCLUDE_DIR /mnt/ssd1t/ubuntu/anaconda/envs/cuda121/include)
set(SQLite3_LIBRARY /mnt/ssd1t/ubuntu/anaconda/envs/cuda121/lib/libsqlite3.so)
set(SQLite3_DIR /mnt/ssd1t/ubuntu/anaconda/envs/cuda121)
find_package(SQLite3 REQUIRED)
include_directories(${SQLite3_INCLUDE_DIR})
link_libraries(${SQLite3_LIBRARY})
set(CGAL_INCLUDE_DIR /mnt/ssd1t/ubuntu/anaconda/envs/cuda121/include)
set(CGAL_LIBRARY /mnt/ssd1t/ubuntu/anaconda/envs/cuda121/lib)
set(CGAL_DIR /mnt/ssd1t/ubuntu/anaconda/envs/cuda121)
find_package(CGAL REQUIRED)
include_directories(${CGAL_INCLUDE_DIR})
link_directories(${CGAL_LIBRARY})
set(Qt5_DIR /mnt/ssd1t/ubuntu/anaconda/envs/cuda121/lib/cmake/Qt5)
find_package(Qt5 REQUIRED COMPONENTS Core Widgets OpenGL)
include_directories(${Qt5Widgets_INCLUDE_DIRS})
link_directories(${Qt5Widgets_LIBRARY_DIRS})
add_definitions(${Qt5Widgets_DEFINITIONS})
set(GLEW_INCLUDE_DIR /mnt/ssd1t/ubuntu/anaconda/envs/cuda121/include)
set(GLEW_LIBRARY /mnt/ssd1t/ubuntu/anaconda/envs/cuda121/lib/libGLEW.so)
set(GLEW_DIR /mnt/ssd1t/ubuntu/anaconda/envs/cuda121)
find_package(GLEW REQUIRED)
include_directories(${GLEW_INCLUDE_DIR})
link_directories(${GLEW_LIBRARY})
를 추가하자
4060ti 기준 CUDA 아키텍처 =8.9
cd /mnt/ssd1t/ubuntu/colmap_cuda121
mkdir -p build
cd build
cmake .. -DCMAKE_CUDA_COMPILER=/mnt/ssd1t/cuda/12.1/bin/nvcc \
-DCUDA_TOOLKIT_ROOT_DIR=/mnt/ssd1t/cuda/12.1 \
-DCMAKE_PREFIX_PATH=$CONDA_PREFIX \
-DCUDA_ARCHITECTURES=89 \
-DCMAKE_BUILD_RPATH=$CONDA_PREFIX/lib
make -j$(nproc)
sudo make install
# COLMAP 소스 디렉토리로 이동
cd /mnt/ssd1t/ubuntu/colmap_cuda121
mkdir build
cd build
# CMake 구성 및 빌드
cmake -DMETIS_INCLUDE_DIR=/usr/include -DMETIS_LIBRARY=/usr/lib/x86_64-linux-gnu/libmetis.so ..
make -j$(nproc)