PyFleX 설치 & 실행 방법
애를 먹었던 PyFleX 설치&실행 방법이다. 이 방법은 docker를 이용하여 PyFleX를 실행 할 수 있도록 설치하는 방식이다.
ubuntu에서 설치하는 것 기준이고, nvidia driver가 깔려 있어야 함. (없으면 에러 뜸)
nvidia driver 설치는 이 글 참조 : https://namhauk.tistory.com/9
실행 방법 전반은 다음의 PyFleX github에 나온 것을 참고함.
https://github.com/YunzhuLi/PyFleX/blob/master/bindings/docs/docker.md
들어가면 Prerequisite에서 설치하라는 거 다 깔면 된다.
docker 설치
링크 타고 들어가면 이미 docker가 설치되어 있으면 Uninstall old versions 에서 하라는 거 하고, docker 설치가 안되어 있다면, 쭉 내려서 Install using the apt repository 에서 하라는 것 다 하면 된다.
# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
# Add the repository to Apt sources:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# 설치된 것 확인하려면 다음 줄 실행
sudo docker run hello-world
nvidia docker container toolkit 설치
링크 타고 들어가서 다시 install guide 링크 타면 다음 사이트가 나온다.
https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html
여기서 나는 apt로 설치 하였다.
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
&& curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
# 이건 optional이라고 함
sudo sed -i -e '/experimental/ s/^#//g' /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit
nvidia docker 설치
위의 nvidia docker container toolkit 말고 nvidia docker도 설치하였다.
(위의 nvidia docker toolkit 만 설치해도 되는 지는 잘 모르겠는데, 실행 error를 해결하다가 나는 이것도 깔았기 때문에 일단 적어놓았다. 이걸 설치한다고 실행에 문제가 생기지는 않았기 때문에 안전하게 설치하는 것도 좋을듯)
docker에서 container를 사용하면, 현재 host(사용자)와 공유가 되지 않아 GPU 사용이 안되는데, host와 container를 연결해 host GPU 사용을 가능하게 해주는 것이 nvidia-docker이다.
# GPG키와 저장소 추가
distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \
&& curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add - \
&& curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
# nvidia-docker 설치
sudo apt-get update
sudo apt-get install -y nvidia-docker2
# docker 재시작
sudo systemctl restart docker
# gpu 사용 가능하게 docker에서 container 띄우기 (test로 16.04 사용)
docker run --rm --gpus all ubuntu:16.04 nvidia-smi
anaconda 설치
다음 글을 참고하여 설치하였다. (ubuntu 22.04 기준)
https://jongsky.tistory.com/21
sudo apt update
# curl 패키지 설치
sudo apt install curl -y
# anaconda 설치
curl --output anaconda.sh https://repo.anaconda.com/archive/Anaconda3-2022.10-Linux-x86_64.sh
sha256sum anaconda.sh
bash anaconda.sh
# conda 명령어 환경변수 추가
sudo vi ~/.bashrc
# vi로 들어간 파일 안에서 제일 마지막 줄에서 i눌러서 다음 줄 추가하고 :wq로 나옴
export PATH=~/anaconda3/bin:~/anaconda3/condabin:$PATH
# 환경변수 내용 적용(업데이트)하기
source ~/.bashrc
# conda 잘 설치되었는지 확인
conda -V
# 여기서 부터는 필요한지는 모르겠음. 일단 함
# 가상환경 설치 (가상 환경 이름 : python_3 / python 버전 : 3.9)
conda create -n python_3 python=3.9
# 가상환경 실행
conda activate python_3
source ~/anaconda3/etc/profile.d/conda.sh
이렇게 설치하면 terminal에서 자동으로 (bash)라고 앞에 붙는데, 실제로 anaconda를 사용하지는 않으므로 이걸 자동 비활성화 해준다. 다음을 terminal에서 치고, terminal 다시 키면 conda 다시 활성화 시키지 않는 한 (bash)라고 안 뜬다.
conda config --set auto_activate_base false
python binding 설치
terminal에 입력하여 설치
conda install pybind11
PyFleX clone 받기
git hub에서 clone하여 PyFleX를 전부 다운받는다.
git clone https://github.com/YunzhuLi/PyFleX.git
pre-built docker file pull하기
sudo docker pull yunzhuli/pyflex_16_04_cuda_9_1
PyFleX 실행 방법
docker를 실행하기 위해서는 다음을 실행해야 하는데, PATH_TO_PyFleX, PATH_TO_ANACONDA는 내 컴퓨터에서 이것들이 있는 위치이다.
docker run \
-v PATH_TO_PyFleX:/workspace/PyFleX \
-v PATH_TO_ANACONDA:/workspace/anaconda \
-it yunzhuli/pyflex_16_04_cuda_9_1:latest
나같은 경우, PyFleX는 git clone 할때 "~" 위치에서 했고, anaconda도 위에대로 설치했다면 아마 똑같은 위치인 "~"에 있을 것이다. 그래서 나는 위의 docker 실행문이 다음과 같다. 이 실행문을 실행할 때 terminal상 어느 위치에서 해도 상관 없는듯 하다. perminssion denied 뜨면 sudo 앞에 붙이고 실행하면 된다.
docker run \
-v ~/PyFleX/:/workspace/PyFleX \
-v ~/anaconda3/:/workspace/anaconda \
-it yunzhuli/pyflex_16_04_cuda_9_1:latest
docker에 들어간 뒤에는 생각할 필요없이 다음을 복사 붙여넣기 한다. 컴파일 하는 것 같다.
export PATH="/workspace/anaconda/bin:$PATH"
cd /workspace/PyFleX
export PYFLEXROOT=${PWD}
export PYTHONPATH=${PYFLEXROOT}/bindings/build:$PYTHONPATH
export LD_LIBRARY_PATH=${PYFLEXROOT}/external/SDL2-2.0.4/lib/x64:$LD_LIBRARY_PATH
cd bindings; mkdir build; cd build; cmake ..; make -j
많은 줄이 뜨면서 컴파일이 될 것인데, warning 뜨는 건 끝나면 exit을 타자로 입력하여 다시 terminal로 나온다. 이제 docker 안에서 실행할 필요없이 밖에서 사용할 수 있다.
이제 실제로 pyflex 파일을 실행할 것인데, 컴파일은 위에서 다 했으므로 마지막으로 환경변수만 export해주고 해당 위치에 접근해서 실행시키면 된다.
꼭 첫 줄을 PyFleX 폴더 위치로 바꾸고 terminal에 다음을 입력한다.
# PyFleX 위치로 이동
cd ~/PyFleX
export PYFLEXROOT=${PWD}
export PYTHONPATH=${PYFLEXROOT}/bindings/build:$PYTHONPATH
export LD_LIBRARY_PATH=${PYFLEXROOT}/external/SDL2-2.0.4/lib/x64:$LD_LIBRARY_PATH
cd ${PYFLEXROOT}/bindings/examples
python3 test_FluidFall.py
창이 뜨면서 사진과 같은 실행 동작이 보이면 제대로 설치된 것임