로컬 환경 세팅과 문제 해결
로컬 환경에서 NVIDIA GPU의 상태와 CUDA 버전을 확인해야 합니다. 다음 명령어들을 사용하여 각각의 정보를 조회할 수 있습니다.
nvidia-smi # NVIDIA GPU 상태 모니터링 및 관리
nvcc -V # CUDA 버전 확인
'nvidia-smi' 명령어를 실행하면, 결과 화면에는 CUDA Version이 표시됩니다. 예를 들어, "CUDA Version: 12.2"라고 표시된다면, 해당 GPU는 최대 CUDA 12.2 버전까지 지원한다는 의미입니다.
이미 CUDA가 설치되어 있다면, 'nvcc -V' 명령어를 사용하여 현재 설치된 CUDA 버전을 확인할 수 있습니다. 예를 들어, 설치된 버전이 11.8인 경우가 있습니다.
이미 기존에 설치했기 때문에 'nvcc -v'를 통해 설치한 CUDA 버전 확인(11.8)
Pytorch 설치 아래 사이트에 들어가 현재 내 OS, CUDA 버전과 맞는 버전 설치
https://pytorch.org/get-started/previous-versions/
최신 버전의 경우 의존성 문제 혹은 버그가 발생될 수 있으므로 조금은 안정된 버전을 사용하는 것이 좋다. (오픈 소스 프로젝트의 경우 일반적으로 requirements.txt 파일을 확인하여 지원하는 Pytorch 버전을 확인하는 것이 좋음)
# CUDA 11.8
conda install pytorch==2.2.0 torchvision==0.17.0 torchaudio==2.2.0 pytorch-cuda=11.8 -c pytorch -c nvidia
# anaconda 가상환경이므로conda 명령어 이용해 설치
GPU 및 Pytorch 설정이 끝났으니, StyleGan-ada에서 자주 발생하는 에러들을 해결
Setting up PyTorch plugin "upfirdn2d_plugin"... Failed!
위 에러의 경우
https://github.com/NVlabs/stylegan2-ada-pytorch/issues/39
https://github.com/NVlabs/stylegan2-ada-pytorch/issues/155
위 이슈들에서 다룬 부분인데, 해결법의 경우 아래 명령어를 이용해 라이브러리를 설치해야한다.
pip install click requests tqdm pyspng ninja imageio-ffmpeg==0.4.3
이후 Colab에서는 문제가 되지 않지만 로컬 환경의 경우 Visual Studio를 설치해야한다.
현재 설치된 CUDA 버전과 지원하는 Visual Studio 버전을 확인해야하는데 아래 그림과 같이 OS의 경우 문제가 없고, Visual Studio의 경우 2017, 2019, 2022 버전 모두 가능하고 2015 버전의 경우 11.1 버전 이후에 지원을 안한다고 하니 주의하자.
https://github.com/NVlabs/stylegan2-ada-pytorch/issues/155
또한, 위 이슈의 솔루션에 따르면 (2021년 11월 11일 작성) Visual Studio 2022 버전은 정상적으로 작동하지 않는다고 하니 2019 버전을 설치하자.
이후 PATH 추가를 해야한다.
Add this to your PATH:
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvarsx86_amd64.bat
추가적으로 위 프로젝트의 경우 pytorch 버전이 1.7, 1.9, 1.9 버전을 지원하기 때문에 일부 코드에서 문제가 발생할 수 있다.
아래 이슈를 확인해보면 해당 문제와 해결 방법 부분이 설명되어있다.
RuntimeError: aten::grid_sampler_2d_backward() is missing value for argument 'output_mask'. Declaration: aten::grid_sampler_2d_backward(Tensor grad_output, Tensor input, Tensor grid, int interpolation_mode, int padding_mode, bool align_corners, bool[2] output_mask) -> (Tensor, Tensor)
https://github.com/NVlabs/stylegan2-ada-pytorch/issues/223
stylegan3 버전에서 해당 부분이 해결되었다고 하니 conv2d_gradfix.py, grid_sample_gradfix.py 코드를 stylegan3 저장소의 코드로 수정해야한다.
이후 실행 과정에서는 문제없이 실행되는 것을 확인하였다.