StyleGanv2-ada 로컬 환경 세팅과 삽질 (해결)

황동준·2021년 9월 2일
1

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을 맞춰준다.

https://pytorch.org/get-started/previous-versions/

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에서 자주 뜨는 에러를 고쳐보자.

https://github.com/NVlabs/stylegan2-ada-pytorch/issues/39

가장 많이 뜨는 에러는 역시 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

이렇게 하면 이제 에러가 왜 뜨는지 이유를 알 수 있다. 내가 떴던 오류를 알려주겠다.

  1. MSCV Error

    https://github.com/RameenAbdal/StyleFlow/issues/13
    내 컴퓨터에 C++ compiler가 없다는 뜻이다. Visual Studio 2019를 안 깔아줬기 때문이다.. (용량 부족으로 삭제했었는데, 다시 설치하는 계기가 되었다..)
    visual studio에서 C++ option에 MSCV 가 있는데, 그거 꼭 체크하고 설치하면 된다.

  2. utf-8 can't encoded by ~~~
    1번 이후에 생긴 에러다.
    한글 버전으로 Visual Studio를 설치하면 utf-8 code를 encoding 할 수 없어서 생기는 에러다. 영어버전으로 설치하는 것도 방법이지만, 그거보다 cmd 창에서 uft-8을 안쓰면 되는거다. 아래 명령어를 입력하면 해결된다.

chcp 65001

참고링크

  1. 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를 잘 참고해서 자신의 컴퓨터에서 발생하는 에러를 해결해보자.

profile
부담없이 기록하기

0개의 댓글