※ 본 글은 필자의 경험에 근거하여 작성되었으며, 잘못된 정보가 포함될 수 있습니다. ※
최근 생성 모델의 핵심은 ① StyleGAN과 ② Stable Diffusion Model 두 가지에 있다. 이 중에서 StyleGAN 아키텍처의 경우 최근에는 다양한 fine-tuning 기법이 등장하여 적은 데이터 세트에도 적용해 볼 수 있다는 장점이 있는데, StyleGAN2를 사용할 때 자주 만날 수 있는 GPU Cuda 관련 오류를 해결하는 방법을 적어보았다.
일단 간단하게 StyleGAN XL를 사용해보고자 한다. 이 코드 또한 StyleGAN2를 베이스로 하고 있다.
▶ StyleGAN XL 공식 코드: https://github.com/autonomousvision/stylegan-xl
GitHub - autonomousvision/stylegan-xl: [SIGGRAPH'22] StyleGAN-XL: Scaling StyleGAN to Large Diverse Datasets
[SIGGRAPH'22] StyleGAN-XL: Scaling StyleGAN to Large Diverse Datasets - GitHub - autonomousvision/stylegan-xl: [SIGGRAPH'22] StyleGAN-XL: Scaling StyleGAN to Large Diverse Datasets
github.com
한 번 내용을 확인해 보고, 사용해 보자.
본인의 GPU 서버에 해당 저장소(repository)를 다운로드할 수 있도록 하자.
git clone https://github.com/autonomousvision/stylegan-xl
이후에 로컬에 설치가 완료된 StyleGAN XL 저장소의 내부에서 다음과 같이 notebook 파일을 하나 생성하여 실행해보자.
※ 1번 오류: 라이브러리 버전 오류 ※
일단 SyleGAN XL에서 공식적으로 제공하는 사전 학습된 StyleGAN 모델 파일을 불러오려고 했는데, 다음과 같은 오류가 발생했다.
▶ 오류 메시지: "ModuleNotFoundError: No module named 'timm.layers'"
이는 찾아보니 timm 라이브러리가 업데이트 되면서 발생하는 오류인 것 같다. 따라서, 이전 timm 라이브러리를 설치하도록 재설치하여 해결했다.
pip3 install timm==0.4.12
※ 2번 오류: Ninja 관련 오류 ※
이후에 다음과 같이 Ninja 관련 오류가 나타날 수 있다.
간혹 특정한 논문의 경우 PyTorch를 사용하되 속도의 향상을 위하여 별도로 C++ 확장 프로그램(extension)을 작성하여, PyTorch 코드 상에서 돌아가도록 포팅하는 경우가 많은 것 같다. 대표적인 것이 바로 StyleGAN2이다. 이러한 문제를 해결하기 위해 Ninja 관련 오류가 나온다면, 이를 다시 설치하도록 진행할 수 있다. 필자는 다음의 명령어로 Ninja 설치를 진행했다.
wget https://github.com/ninja-build/ninja/releases/download/v1.11.1/ninja-linux.zip
sudo unzip ninja-linux.zip -d /usr/local/bin/
sudo update-alternatives --install /usr/bin/ninja ninja /usr/local/bin/ninja 1 --force
※ 3번 오류: CUDA Toolkit 관련 오류 ※
어떤 사람은 Ninja만 설치해도 오류가 해결되었다고 했는데, 필자는 다음과 같이 추가적인 오류가 발생했다. 분명히 PyTorch에서 GPU 기능(CUDA)를 사용할 수 있는 상태임에도, 다음과 같이 CUDA_HOME 환경 변수가 없다고 나온다. 이것은 일반적으로 CUDA Toolkit을 설치하지 않았을 때 발생할 수 있는 오류이다.
더불어 추가적으로 bias_act_plugin.so (PyTorch 위에서 돌아가는 C++ 기반의 확장 프로그램) 관련 오류가 등장했다. 이것은 StyleGAN2을 사용해 본 사람이라면 가끔 경험할 수 있는 공포의 오류로, 대체로 CUDA의 버전이 달라서 발생하는 오류로 보인다.
지속적으로 다음과 같은 오류 메시지가 나오곤 했다.
OSError: CUDA_HOME environment variable is not set. Please set it to your CUDA install root.
하지만 이미 NVIDIA 최신 드라이버 중 하나인 11.6이 설치되어 있는 필자의 입장에서는 이해가 되지 않는 오류였다.
하지만 확인해 보니 /usr/local/ 경로에 CUDA가 정말 존재하지 않는 것을 확인할 수 있었다. 공용 GPU의 경우 도커(docker)를 사용하는 경우가 있는데, NVIDIA 드라이버의 경우 하드웨어와 밀접하니 하나만 설치하고, 그 위에서 돌아가는 NVIDIA CUDA Toolkit의 경우 docker 이미지 위에서 돌아가도록 동작하고 있었다. 즉, 정말로 버전에 맞는 CUDA Toolkit을 다시 설치할 필요가 있었다.
아무튼 특정한 버전의 CUDA Toolkit을 새롭게 설치하는 것은 문제가 없다고 판단된다. 실제로 다른 사람이랑 같이 작업하다 보면 별도로 /usr/local에 CUDA 혹은 library를 설치할 필요가 있다.
필자는 결과적으로 이 문제를 해결하기 위해 CUDA Toolkit 11.1을 설치하여 해당 Toolkit을 이용하는 방식으로 해결했다. CUDA Toolkit 11.1 버전에서는 최종적으로 StyleGAN2에서의 bias_act_plugin도 정상적으로 사용이 가능했다. 이 부분에 대한 내용은 별도의 블로그 글로 정리하였다.
▶ 해결 방법 링크: https://developer-together.tistory.com/98
결과적으로 Jupyter를 재실행하여 다음과 같이 정상적으로 StyleGAN 모델이 실행되는 것을 확인할 수 있다.
※ 참고 오류 ※
필자는 "/root/.cache/torch_extensions" 경로를 자꾸 잡으려고 하는 오류가 추가적으로 발생했는데, 캐시(cache)된 내용을 지우는 것은 문제가 없을 것 같아서, 아래와 같은 명령어로 PyTorch의 확장 프로그램(extension)을 제거하곤 했다.
!rm -rf /root/.cache/torch_extensions
※ 참고 사항 ※
필자는 결과적으로 다음과 같이 PyTorch 1.9.1 버전을 사용하되, CUDA Toolkit의 버전만 다운그레이드하여 설치한 셈이 되었다. 그렇게 문제를 해결하고 StyleGAN2 모델을 돌릴 수 있었다.
pip install torch==1.9.1+cu111 torchvision==0.10.1+cu111 torchaudio==0.9.1 -f https://download.pytorch.org/whl/torch_stable.html