프로젝트 환경
- AWS EC2 G5
- GPU 1, 24GB memory
- 용량 : 45GB
- ubuntu 18.04
- cmake 3.21.3
- cuda 11.5.50
- python 3.8.12
- pytorch 1.11.0
프로젝트 폴더 구조
1. docker container 생성
nvcr.io/nvidia/pytorch:21.12-py3
docker image를 사용하여 nvidia, torch 환경 설정
- 아래의 사이트에서 docker image가 포함하는 것을 확인할 수 있다
docker 이미지 pull
docker pull ngc image & run container
docker pull nvcr.io/nvidia/pytorch:21.12-py3
docker container 생성
docker run -it --ipc=host --gpus all -v [host 경로]:[container 경로] -p 8888:8888 --name [container명] [image명] /bin/bash
-it
: interactive terminal
--ipc=host
- 호스트와 IPC (Inter-Process Communication) 네임스페이스를 공유하도록 설정
- 모델을 학습시키면서 shared memory (shm) 에러가 발생하지 않도록 host의 공간을 공유하도록 설정
--gpus all
: gpu를 사용하는 옵션, 이걸 지정해야 nvidia를 사용할 수 있다
-v [host 경로]:[container 경로]
: host 시스템의 디렉토리를 container의 디렉토리와 공유
-p 8888:8888
- host의 포트 8888을 container의 포트 8888로 매핑
- 컨테이너에서 실행 중인 서비스가 호스트에서 접근 가능
2. center point 설치
# git clone https://github.com/tianweiy/CenterPoint.git
# cd CenterPoint
# pip install -r requirements.txt
# export PYTHONPATH="${PYTHONPATH}:PATH_TO_CENTERPOINT"
예시) export PYTHONPATH="${PYTHONPATH}:/workspace/center_point/CenterPoint"
3. nuscenes-devkit 설치
# git clone https://github.com/tianweiy/nuscenes-devkit
# export PYTHONPATH="${PYTHONPATH}:PATH_TO_NUSCENES_DEVKIT/python-sdk"
예시) export PYTHONPATH="${PYTHONPATH}:/workspace/center_point/nuscenes-devkit/python-sdk"
4. APEX
- 이미 docker image에 포함되어 있기 때문에 설치할 필요가 없다
5. 환경변수 저장
- bashrc에 export했던 내용들을 저장해야 docker를 종료한 후 다시 접속해도 적용이 된다
PATH_TO_CENTERPOINT
: center point 관련 환경 변수
PATH_TO_NUSCENES_DEVKIT/python-sdk
: nuscenes-devkit 관련 환경 변수
/opt/hpcx/ompi/lib
: HPC 및 대규모 병렬 처리 환경에서 필요, 이 환경변수를 설정하지 않으면 추후에 train할 때 오류가 발생한다
bashrc 파일 열기
# vim ~/.bashrc
bashrc 파일 수정
export PYTHONPATH="${PYTHONPATH}:PATH_TO_CENTERPOINT"
export PYTHONPATH="${PYTHONPATH}:PATH_TO_NUSCENES_DEVKIT/python-sdk"
export LD_LIBRARY_PATH=/opt/hpcx/ompi/lib:$LD_LIBRARY_PATH
예시)
export PYTHONPATH="/workspace/center_point/CenterPoint"
export PYTHONPATH="${PYTHONPATH}:/workspace/center_point/nuscenes-devkit/python-sdk"
export LD_LIBRARY_PATH=/opt/hpcx/ompi/lib:$LD_LIBRARY_PATH
- 입력 후
esc
-> :wq
를 눌러서 저장한다
5. spconv
# pip install spconv-cu114
centerpoint github에서의 spconv 설치 방법 (X)
- 이 방법을 따라하다가 에러를 해결할 수 없어서 위의 방법으로 설치
# apt-get install libboost-all-dev
# git clone https://github.com/traveller59/spconv.git --recursive
# cd spconv && git checkout 7342772
# python setup.py bdist_wheel
does not contain a CMakeLists.txt file 에러
- spconv의 third_party 위치에 pybind11를 clone한다
git clone https://github.com/pybind/pybind11.git
torch::jit::RegisterOperators 에러
- 해당 파일의
torch::jit::RegisterOperators
를 torch::RegisterOperators
로 변경
- 만약 권한으로 인해 파일 수정이 안된다면
chmod 666 all.cc
로 권한을 설정해준다
cout 에러
- 해당 파일에
#include <iostream>
를 추가해준다
- 만약 권한으로 인해 파일 수정이 안된다면
chmod 666 nms.h
로 권한을 설정해준다
more than one operator "==",">" matches these operands 에러
export TORCH_NVCC_FLAGS="-D__CUDA_NO_HALF_OPERATORS__"
안된다
TORCH_NVCC_FLAGS="-DCUDA_NO_HALF_OPERATORS" python setup.py bdist_wheel
동시에 입력해서 실행 -> 안된다
- 이 에러를 해결할 수 없었다
용량 에러
- 아래와 같이 용량이 부족하다는 에러가 발생했다
$ sudo du -h --max-depth=1
$ sudo du -h --max-depth=1 | sort -rh
$ sudo docker system prune -a -f
로 overlay2 삭제
- 그 결과 용량이 줄었지만 container가 사라졌다!
- 아마 사라진 container는 실행중인 상태가 아니여서 사라진 것 같고 실행 중인 container는 사라지지 않았다.
- 또한 opt/conda 폴더를 제거하였다
- conda 폴더에는 conda 뿐만아니라 다른 파일들도 있어서 제거한 후 필요하다면 conda를 따로 설치하면 된다
- 하지만 docker를 사용하고 있기 때문에 설치가 필요없었다