홍든램지의 보일러실

Instant-ngp 설치 및 사전 준비하기! 본문

AI 와 딥러닝

Instant-ngp 설치 및 사전 준비하기!

예비보일 2023. 3. 13. 16:12
반응형

 

 

https://github.com/NVlabs/instant-ngp

 

GitHub - NVlabs/instant-ngp: Instant neural graphics primitives: lightning fast NeRF and more

Instant neural graphics primitives: lightning fast NeRF and more - GitHub - NVlabs/instant-ngp: Instant neural graphics primitives: lightning fast NeRF and more

github.com

Instant Neural Graphics Primitives

 

nvidia에서 nerf에 대한 논문을 좀 더 빠르게 만들었다고 할 수 있습니다.

 

NeRF 란

NeRF는 뉴럴 네트워크를 사룡해 입력된 2D 이미지를 기반으로 사실적인 3D 구조를 묘사하고 렌더링 합니다.

NeRF에 입력할 데이터는 카메라로 다양한 각도에서 사진 찍거나 동영상을 촬영하는 것과 비슷한 형태로 얻을 수 있다.

신경망에서는 여러 위치에서 촬영한 많은 이미지와 각 카메라의 위치정보가 필요합니다. 이를 통해서 NeRF는 이미지의 공백을 채우고 3차원 공간의 모든 지점에서 전방향으로 빛이 방사되는 색상을 예측해서 3차원 공간을 재구성하도록 신경망을 훈련시킵니다. 

즉 이미지로 3차원 공간을 나타낼 수 있다는 것!

 

 

Instant NeRF 를 통해 1000배 가속

동영상을 통해 이미지의 깊이와 외관을 파악하는 것은 사람에겐 쉽지만 AI에겐 어려운일이다.

기존 방법으로 3차원 공간을 생성하려면 시각화의 복잡성과 해상도에 따라 많은 시간이 걸리지만, AI를 적용하면 작업 속도가 빨라진다. 초기 NeRF 모델은 선명한 작업을 몇 분 안에 표현하긴 했지만 훈련하는데 많은 시간이 걸렸다.

 

Instant NeRF는 렌더링 시간을 몇 배나 단축하며, NVIDIA GPU에서 효율적으로 실행되도록 최적화된 멀티-해상도 해시 그리드 인코딩(multi-resolution hash grid encoding)이라 불리는 NVIDIA의 기술을 사용했다. 새로운 입력 부호화 방법을 사용하면 사용자들이 빠르게 작동하는 작은 신경망을 통해 고품질의 결과를 얻을 수 있습니다.

 

이 모델은 NVIDIA CUDA Toolkit  초소형 CUDA 뉴럴 네트워크(Tiny CUDA Neural Networks) 라이브러리를 사용해 개발되었다. 경량 뉴럴 네트워크이므로 NVIDIA Tensor Core를 탑재한 카드에서 가장 빠르게 동작하는 NVIDIA GPU 1개만으로 훈련 및 실행할 수 있습니다.

 

이 기술은 로봇과 자율주행 자동차가 2D 이미지와 동영상을 캡처하면서 실제 물체의 크기와 모양을 이해하도록 훈련하는데 사용할 수 있습니다. 또한 건축과 엔터테인먼트 분야에서도 제작자가 수정하고 구축할 수 있는 실제 환경의 디지털 표현을 신속하게 생성합니다.

 

 

이렇다고 소개하고 있다.

각설하고 설치하는 과정에 대해서 이야기해보겠다.만약 버전이 하나라면 이 부분은 스킵해도된다.

 

Building instant-ngp (Windows & Linux)

설치하기 위한 요구사항

  • NVIDIA GPU가 필요, 여기의 예시는 RTX3090으로 실행했다고 한다.
  • C++14 capable compiler. 각 os에서는 아래와 같이 추천하며 테스트가 진행됨
    • Windows: Visual Studio 2019 or 2022
    • Linux: GCC/G++ 8 or higher
  • 최신 CUDA 버전에 필요하며 각 os에서 아래와 같은 버전에서 테스트됨:
    • Windows: CUDA 11.5 or higher
    • Linux: CUDA 10.2 or higher
  • CMake v3.21 or higher.
  • (optional) Python 3.7 or higher for interactive bindings. Also, run pip install -r requirements.txt.
  • (optional) OptiX 7.6 or higher for faster mesh SDF training.
  • (optional) Vulkan SDK for DLSS support.

 

위 와 같이 빌딩을 위한 조건이 있다.

필자는 Ubuntu 20.04 에서 CUDA 11.6 / RTX3090TI 환경에서 실행하였다.

 

# Gcc 나 G++ 버전 확인하기
gcc --version
g++ --version

둘다 버전이 7.5 이기 때문에 gcc 8버전을 설치한다.

#8버전은 apt 저장소에 있어서 바로 설치
sudo apt install gcc-8 g++-8

설치를 하게되면 기존 버전 gcc-7 버전과 gcc-8 버전 두가지가 설치되어있다.

각기 다른 버전이 설치되어 있기 때문에 각 다른 버전을 선택할 수 있도록 해야한다.

만약 버전이 하나라면 이 부분은 스킵해도된다.

sudo update-alternatives --install <link> <name> <path> <priotiy>

위 커맨드를 이용해서 gcc와 g++ 사용할 버전을 설정해줄 것이다.

  meaning
link 실행 파일의 이름으로 /etc/alternatives/을 가리킨다. (예: /usr/bin/gcc)
name 해당 링크 그룹의 대표 이름으로, 여러 가지 버전의 패키지들을 대표하는 이름으로 보면 된다. (예: gcc)
path alternatives로 실제 연결할 실행 파일의 이름으로, 시스템에 설치한 패키지의 실행 파일 이름이다. (예: /usr/bin/gcc-4.4)
priority automatic 모드에서 어떤 것을 자동으로 선택해서 사용할지 결정할 때 사용되는 우선순위로, 높은 수가 더 높은 우선순위이다.

 

필자는 gcc-8과 gcc-7를 alternatives에 등록하고 우선순위를 설정하였다. 명령어는 아래와 같다.

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8 40
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 20

 

gcc-8의 우선순위가 더 높으므로 automatic 모드에선 gcc를 입력하면 기본적으로 gcc-8을 사용하게 된다.

 

지금은 두 버전의 gcc를 alternatives에 등록만 해두었을 뿐, 

update-alternatives를 사용하여 실제로 버전을 바꾼 것이 아니므로, 여전히 gcc-8를 사용하고 있는 것이다.

 

gcc을 다른 버전으로 바꾸려면 아래의 update-alternatives 명령을 수행해야 한다.

 

sudo update-alternatives --config gcc

위 와 같이 선택하는 창이 나온다. 설정하고자하는 패키지의 인덱스 넘버를 입력한 후 엔터키를 치면 버전으로 전환된다.

선택후 gcc 버전을 확인해보면 8버전이 나오는 것을 볼 수 있다.

g++도 같은 방법으로 설정한다.

 

sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-8 40
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-7 20

g++도 버전을 선택한다.

sudo update-alternatives --config g++

 

 

Cuda 설치는 다른곳을 한번 참조해보시길 추후에 올릴께요

 

요구사항중 하나인 CMake 버전을 확인해보자

아래 링크에서 최신버전을 다운 받는다.

https://cmake.org/download/

 

Download | CMake

Current development distribution Each night binaries are created as part of the testing process. Other than passing all of the tests in CMake, this version of CMake should not be expected to work in a production environment. It is being produced so that us

cmake.org

 

필자는 Ubuntu 이기 때문에 리눅스 플랫폼에 맞는 파일을 다운받았다.

다운받은 후 압축을 풀고 해당경로로 들어가서 아래 커맨드를 입력한다.

./bootstrap
make
sudo make install

 

sudo make install을 완료후 재부팅을 하면 cmake 버전이 업그레이드 된것을 볼 수 있다.

추가적으로 파이썬 버전 3.7버전을 설치한다.

현재 버전은 3.6.9 버전이며 gcc 와 g++과 같이 update-alternatives를 진행한다.

sudo apt install python3.7-dev

3.7 버전을 설치한다.

sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.7 20
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.6 40

추가적으로 필요한 라이브러리를 다운받는다.

sudo apt-get install build-essential git python3-dev python3-pip libopenexr-dev libxi-dev \\
                     libglfw3-dev libglew-dev libomp-dev libxinerama-dev libxcursor-dev

이제 최소한 구동 준비는 완료되었으니 github에서 instants-ngp를 다운로드한다.

git clone <https://github.com/NVlabs/instant-ngp.git>

해당 경로로 들어가서 아래 커맨드를 입력한다.

$ git clone --recursive <https://github.com/nvlabs/instant-ngp>
$ cd instant-ngp
instant-ngp$ cmake . -B build
instant-ngp$ cmake --build build --config RelWithDebInfo -j

위와 같은 오류가 뜬다면 아래와 같은 커맨드로 해결한다.

git submodule update --init --recursive

현재 버전은 3.6.9 버전이며 gcc 와 g++과 같이 update-alternatives를 진행한다.

sudo apt install python3.7-dev

3.7 버전을 설치한다.

sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.7 20
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.6 40

추가적으로 필요한 라이브러리를 다운받는다.

sudo apt-get install build-essential git python3-dev python3-pip libopenexr-dev libxi-dev \\
                     libglfw3-dev libglew-dev libomp-dev libxinerama-dev libxcursor-dev

이제 최소한 구동 준비는 완료되었으니 github에서 instants-ngp를 다운로드한다.

git clone <https://github.com/NVlabs/instant-ngp.git>

해당 경로로 들어가서 아래 커맨드를 입력한다.

$ git clone --recursive <https://github.com/nvlabs/instant-ngp>
$ cd instant-ngp
instant-ngp$ cmake . -B build
instant-ngp$ cmake --build build --config RelWithDebInfo -j

위와 같은 오류가 뜬다면 아래와 같은 커맨드로 해결한다.

git submodule update --init --recursive
반응형
Comments