StyleGanv2-ada에서 transfer learning을 시도할 때는 그냥 코랩 프로 쓰자!! 귀찮아 질 수 있다.
먼저 CUDA Setting이 안되어 있다면 해줘야 한다.
일단 자신의 컴퓨터 GPU와 CUDA Version을 맞춰주도록 한다. (nvidia GPU 여야 가능하니 참고하자.)
nvidia-smi
nvcc -V
nvidia-smi
는 아래와 같이 나온다.
여기서 CUDA Version은 당신의 GPU가 CUDA 몇 버전 까지 허용하는 지 알려준다.
나는 11.2버전 이하의 CUDA를 설치해야 한다. 그래서 11.2를 설치할 수도 있었지만, 그냥 11.1을 설치했다.
nvcc -V
로 설치한 CUDA 버전을 확인해주자.
CUDA를 설치했으면 pytorch와 Version을 맞춰준다.
pip install version
# RocM 4.0.1 (Linux only)
pip install torch -f https://download.pytorch.org/whl/rocm4.0.1/torch_stable.html
pip install ninja
pip install 'git+https://github.com/pytorch/vision.git@v0.9.0'
# CUDA 11.1
pip install torch==1.8.0+cu111 torchvision==0.9.0+cu111 torchaudio==0.8.0 -f https://download.pytorch.org/whl/torch_stable.html
# CUDA 10.2
pip install torch==1.8.0 torchvision==0.9.0 torchaudio==0.8.0
# CPU only
pip install torch==1.8.0+cpu torchvision==0.9.0+cpu torchaudio==0.8.0 -f https://download.pytorch.org/whl/torch_stable.html
conda install version
# CUDA 10.2
conda install pytorch==1.8.0 torchvision==0.9.0 torchaudio==0.8.0 cudatoolkit=10.2 -c pytorch
# CUDA 11.1
conda install pytorch==1.8.0 torchvision==0.9.0 torchaudio==0.8.0 cudatoolkit=11.1 -c pytorch -c conda-forge
# CPU Only
conda install pytorch==1.8.0 torchvision==0.9.0 torchaudio==0.8.0 cpuonly -c pytorch
위의 명령어는 window와 linux 둘 다 사용이 가능하다.
버전에 맞게 설치해주면 이제 GPU 세팅은 완료 되었으니 StyleGanv2-ada에서 자주 뜨는 에러를 고쳐보자.
가장 많이 뜨는 에러는 역시 Setting up PyTorch plugin "upfirdn2d_plugin"... Failed!
이다!! 위 issue에서 다룬 부분인데, 만드는 사람이 이 부분을 try except로 처리해서 뭘 처리하든 계속 저 에러가 발생한다.
이 에러 말하는 거 맞다.
만약 Colab
에서 실행한다면
pip install ninja
ninja
library를 설치하면 된다.
정확히 말하면, 다음과 같은 라이브러리를 모두 설치한다.
pip install click requests tqdm pyspng ninja imageio-ffmpeg==0.4.3
팀원이 알려준 덕분에 라이브러리를 모두 설치할 수 있었다. (가상환경 만들어서 독립시켜주면 좋을 것 같다.)
근데 문제는 Colab에서 발생하는 게 아니라, Local에서 발생하는 것이다.
일단 로컬도 똑같이 라이브러리를 설치해준다. 그 이후에는 CUDA 에러든 뭐든 계속 뜰 것이다. 근데 해결해 보니, 위와 같이 torch와 cuda version 만 맞다면 실질적으로 11미만의 version을 이용하지 않는 이상 CUDA Version이 문제가 되진 않는 것 같다.
그러면 무슨 에러일까? 계속 Setting up PyTorch plugin "upfirdn2d_plugin"... Failed!
혹은 Setting up PyTorch plugin "bias_act"... Failed!
이런 게 뜬다.
그러면 바로 try, except문을 지워주고 debuging 한다.
torch_utils/ops/bias_act.py
def _init():
global _inited, _plugin
if not _inited:
_inited = True
sources = ['bias_act.cpp', 'bias_act.cu']
sources = [os.path.join(os.path.dirname(__file__), s) for s in sources]
"""
try:
_plugin = custom_ops.get_plugin('bias_act_plugin', sources=sources, extra_cuda_cflags=['--use_fast_math'])
except:
warnings.warn('Failed to build CUDA kernels for bias_act. Falling back to slow reference implementation. Details:\n\n' + traceback.format_exc())
"""
_plugin = custom_ops.get_plugin('bias_act_plugin', sources=sources, extra_cuda_cflags=['--use_fast_math'])
return _plugin is not None
torch_utils/ops/upfirdn2d.py
def _init():
global _inited, _plugin
if not _inited:
sources = ['upfirdn2d.cpp', 'upfirdn2d.cu']
sources = [os.path.join(os.path.dirname(__file__), s) for s in sources]
"""
try:
_plugin = custom_ops.get_plugin('upfirdn2d_plugin', sources=sources, extra_cuda_cflags=['--use_fast_math'])
except:
warnings.warn('Failed to build CUDA kernels for upfirdn2d. Falling back to slow reference implementation. Details:\n\n' + traceback.format_exc())
"""
_plugin = custom_ops.get_plugin('upfirdn2d_plugin', sources=sources, extra_cuda_cflags=['--use_fast_math'])
return _plugin is not None
이렇게 하면 이제 에러가 왜 뜨는지 이유를 알 수 있다. 내가 떴던 오류를 알려주겠다.
MSCV Error
https://github.com/RameenAbdal/StyleFlow/issues/13
내 컴퓨터에 C++ compiler가 없다는 뜻이다. Visual Studio 2019를 안 깔아줬기 때문이다.. (용량 부족으로 삭제했었는데, 다시 설치하는 계기가 되었다..)
visual studio에서 C++ option에 MSCV 가 있는데, 그거 꼭 체크하고 설치하면 된다.
utf-8 can't encoded by ~~~
1번 이후에 생긴 에러다.
한글 버전으로 Visual Studio를 설치하면 utf-8 code를 encoding 할 수 없어서 생기는 에러다. 영어버전으로 설치하는 것도 방법이지만, 그거보다 cmd 창에서 uft-8을 안쓰면 되는거다. 아래 명령어를 입력하면 해결된다.
chcp 65001
python38.lib
을 열 수 없습니다.
갑자기 이런다. 이거는 내가 visual이나 python을 순서없이 설치하고 그랬었기 때문에, 경로가 꼬인 걸로 판단하였다.
내 컴퓨터에서는 조금 이상했던건데, 보통의 경우에서는 visual studio의 debug모드를 release 모드로 바꿔주는 명령어를 입력하면 된다고 한다.
https://github.com/microsoft/vcpkg/issues/10649
Python 경로를 수정했지만 답이 나오지 않아, python38.lib 파일을 찾아서 CUDA의 lib에 넣어주는 선택을 하였다.
에러 로그를 보면 여기를 한번 뒤졌었다. 그래서 들어가보니,
lib 파일이 잔뜩 있길래, 내 python file 들이 들어있는 곳에 가서 python38.lib
을 복사 붙여넣기 하였다.
python file을 찾은 방법은 https://blog.gyus.me/2020/how-to-install-python-on-windows/ 여기를 봤는데, python을 재설치 하려하다가 해당 사람이 어디에 저장해뒀는지 찾아내서 확인한 결과 lib 파일안에 있었다.
복붙하니까 바로 돌아갔다.
https://github.com/NVlabs/stylegan2-ada-pytorch/issues/39
해당 issue를 잘 참고해서 자신의 컴퓨터에서 발생하는 에러를 해결해보자.