Trikang
[리눅스, RTX 4090] NeRF & 3D Gaussian Splatting 실험 환경 설정(CUDA 환경설정, Tanks and Temples 데이터셋, nerfstudio) 본문
[리눅스, RTX 4090] NeRF & 3D Gaussian Splatting 실험 환경 설정(CUDA 환경설정, Tanks and Temples 데이터셋, nerfstudio)
Trikang 2024. 3. 1. 02:53우선 실험에 필요한 데이터 셋을 받는다. 이번에는 Nerf Synthetic, LLFF, Tanks and Temples 데이터 셋을 사용할 예정이다. 설치 중, Tanks and Temples 데이터 셋 다운로드에서 문제가 발생했다.
Tanks and Temples 데이터 셋 다운로드 - 구글 드라이브 "Too many users have viewed or downloaded this file recently..."
공식 사이트에서 제공하는 소스코드를 빌드하여 다운로드를 진행하려 했으나, 계속해서 zip 파일이 받아지지 않고 md5 값도 달라 문제 해결을 시도했다. 결국 구글 드라이브에서 파일을 다운로드받아 압축을 해제하는 방식이라 gdown 등의 다른 파이썬 패키지를 이용하여 다운로드를 시도하였다. 그러나 아래와 같은 에러가 발생했다.
Too many users have viewed or downloaded this file recently. Please
try accessing the file again later. If the file you are trying to
access is particularly large or is shared with many people, it may
take up to 24 hours to be able to view or download the file. If you
still can't access a file after 24 hours, contact your domain
administrator.
You may still be able to access the file from the browser:
https://drive.google.com/uc?id=0B-ePgl6HF260UU1zUTd6SzlmczA
우회하기 위해서 네트워크 패킷도 까보고 이것저것 시도해보며 학습용 서버에 바로 데이터를 다운로드 받고싶었으나, 이를 가능케하는 데에 더 많은 공수가 들어갈 것 같아 우선은 로컬 컴퓨터에서 구글 드라이브에 직접 접속하여(GUI) 데이터 셋을 다운로드 후 서버에 업로드 하는 형태로 진행하였다.
CUDA 환경 설정 + NerfStudio 설치
아래 링크들을 많이 참고하였다.
https://ingu627.github.io/tips/install_cuda_linux/
https://m31phy.tistory.com/125
NeRF Studio 사용을 위해 cuda 11.8을 인스톨해야 했다. 우선 설정된 서버를 받아온 입장이고, 실물을 한 번도 보지 못했기에 ssh를 설정하고 vscode와 연결하는 동안 단 한번도 운영체제 정보를 열어본 적이 없었다.
그래서 hostnamectl 명령어를 통해서 운영체제 정보를 드디어 확인해봤다.
xxxx@xxxxxxxxxxx:~$ hostnamectl
Static hostname: workstation
Icon name: computer-server
Chassis: server
Machine ID: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Boot ID: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Operating System: Ubuntu 20.04.6 LTS
Kernel: Linux 5.15.0-97-generic
Architecture: x86-6
우분투임을 확인, nvidia 웹사이트에서 아래와 같이 입력하여 wget으로 설치 파일을 받아올 수 있도록 구성하였다.
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
cuda 11.8을 설치하는 동안, Nerf studio의 실험 환경부터 구성하였다. 아래 링크의 Installation guide를 참고하였다.
https://docs.nerf.studio/quickstart/installation.html
conda create --name nerfstudio -y python=3.8
conda activate nerfstudio
python -m pip install --upgrade pip
그리고 권장 사양(Torch 2.1.2 with CUDA 11.8)의 pytorch를 설치하였다.
pip install torch==2.1.2+cu118 torchvision==0.16.2+cu118 --extra-index-url https://download.pytorch.org/whl/cu118
설치 진행. driver 선택은 해제했다.
기존에 11.6 버전이 있었던지라, 두 개의 cuda driver가 존재하게 되었다.
필요하다면 cuda 디렉토리를 자신이 원하는 버전으로 새롭게 심볼릭 링크하면 되는데, 나는 이 절차가 필요없었다.
그리고 cuDNN을 로컬에 다운로드한 후, scp 명령어를 이용해 서버에 전송했다.
scp cudnn-local-repo-ubuntu2004-8.9.7.29_1.0-1_amd64.deb 4090:/home/xxxx/Downloads
cudnn-local-repo-ubuntu2004-8.9.7.29_1.0-1_am 4% 41MB 5.1MB/s 02:36 ETA
위 코드에는 .deb 파일을 전송시켰지만, 결국 tar.xz 압축 파일로 다시 전송했다. 압축을 풀고나서
(base) xxxx@xxxxxxxxxxx:~/Downloads/cudnn-linux-x86_64-8.9.7.29_cuda11-archive$
sudo cp include/cudnn*.h /usr/local/cuda/include
sudo cp -P lib/libcudnn* /usr/local/cuda/lib64
sudo chmod a+r /usr/local/cuda/include/cudnn*.h /usr/local/cuda/lib64/libcudnn*
이후에 bashrc 파일을 수정하여 cuda 버전을 11.8로 인식되게 하였다(이후 터미널 재시작 필요)
그리고 https://docs.nerf.studio/quickstart/installation.html에 있는 나머지 installation 스텝도 마무리하였다.
이후 NerfStudio의 Training your first model 가이드(https://docs.nerf.studio/quickstart/first_nerf.html)에 따라 테스트를 진행해보려 했는데, nerfstudio의 dataset 중에 poster 파일이 없어서 그런건지 아래와 같은 에러가 발생하였다.
ns-download-data nerfstudio --capture-name=poster
Traceback (most recent call last):
File "/home/user/.local/lib/python3.8/site-packages/gdown/download.py", line 253, in download
url = get_url_from_gdrive_confirmation(res.text)
File "/home/user/.local/lib/python3.8/site-packages/gdown/download.py", line 54, in get_url_from_gdrive_confirmation
raise FileURLRetrievalError(
gdown.exceptions.FileURLRetrievalError: Cannot retrieve the public link of the file. You may need to change the permission to 'Anyone with the link', or have had many accesses. Check FAQ in https://github.com/wkentaro/gdown?tab=readme-ov-file#faq.
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/user/.local/bin/ns-download-data", line 8, in <module>
sys.exit(entrypoint())
File "/home/user/3D_survey/nerfstudio/nerfstudio/scripts/downloads/download_data.py", line 573, in entrypoint
main(tyro.cli(Commands))
File "/home/user/3D_survey/nerfstudio/nerfstudio/scripts/downloads/download_data.py", line 567, in main
dataset.download(dataset.save_dir)
File "/home/user/3D_survey/nerfstudio/nerfstudio/scripts/downloads/download_data.py", line 207, in download
download_capture_name(save_dir, "nerfstudio", self.capture_name, capture_name_to_file_id=nerfstudio_file_ids)
File "/home/user/3D_survey/nerfstudio/nerfstudio/scripts/downloads/download_data.py", line 170, in download_capture_name
gdown.download(url, output=str(download_path))
File "/home/user/.local/lib/python3.8/site-packages/gdown/download.py", line 264, in download
raise FileURLRetrievalError(message)
gdown.exceptions.FileURLRetrievalError: Failed to retrieve file url:
Cannot retrieve the public link of the file. You may need to change
the permission to 'Anyone with the link', or have had many accesses.
Check FAQ in https://github.com/wkentaro/gdown?tab=readme-ov-file#faq.
You may still be able to access the file from the browser:
https://drive.google.com/uc?id=1dmjWGXlJnUxwosN6MVooCDQe970PkD-1
but Gdown can't. Please check connections and permissions.
그래서 아래 링크를 참조, nerfstudio 데이터셋 중에 살아있는 데이터가 무엇인지 확인하였고, kitchen 데이터를 다운로드하였다.
xxxx@xxxxxxxxxxx:~/xxxxxxx/nerfstudio$ ns-download-data nerfstudio --capture-name=kitchen
Downloading...
From (original): https://drive.google.com/uc?id=1IRmNyNZSNFidyj93Tt5DtaEU9h6eJdi1
From (redirected): https://drive.google.com/uc?id=1IRmNyNZSNFidyj93Tt5DtaEU9h6eJdi1&confirm=t&uuid=b29b14cd-e09c-4bf0-989d-3e5f5bfe4bfa
To: /home/xxxx/xxxxxxx/nerfstudio/data/nerfstudio/kitchen.zip
100%|██████████████████████████████████████████████████| 380M/380M [00:34<00:00, 10.9MB/s]
그리고 실행
ns-train nerfacto --data data/nerfstudio/kitchen
막 뭔가가 된다
뷰어를 볼 수 있다고 나오는데, 원격 접속해서 학습을 하고 있는 상태라 불가능할줄 알았다. 그런데 확인해보니 7007 포트가 뚫려있었고, 문제없이 확인했다.
학습되는 모습과 렌더되는 것을 같이 볼 수 있다니.. 신기하다.
'공부 > ML' 카테고리의 다른 글
[Python] 3D Gaussian splatting 여러 데이터 셋에 대해 일괄 학습-평가 진행하기 (0) | 2024.03.03 |
---|---|
[리눅스] nerfstudio docker 이용해서 실행하기 (0) | 2024.03.02 |
tetra-nerf 코드 빌드 환경 설정(cmake, OptiX, CGAL 5.5.2) (0) | 2024.03.02 |
[리눅스] nerfstudio에서 여러 데이터 셋 한 번에 COMLAP 처리하기(python 코드 작성) (0) | 2024.03.02 |
머신러닝 환경 구성하기(Tensorflow, CUDA) (0) | 2020.06.27 |