어쩌다 AMD 그래픽카드를 구매해서 이 고생을 하고 있는지 모르겠다. AMD 그래픽카드는 윈도우에서 머신러닝에 사용할 수 없다. 다행히 ROCm이 있지만, WSL(WSL2도 동일)에서 사용할 수 없다. AMD 그래픽카드를 머신러닝에 사용하려면, 리눅스를 직접 설치해야 한다. nvidia 그래픽카드를 샀어야 하는건데… 게다가 인터넷을 아무리 찾아봐도 Stable Diffusion web UI를 AMD GPU에서 실행하는 깔끔한 방법이 정리된게 없어서, 몇 번이나 재설치를 하면서 삽질했다. 그래서 반드시 필요한 절차만 남긴 설치 방법을 공유한다.

참고로 리눅스는 Ubuntu 22.10 (Kinetic Kudu)를 사용하고 있고, GPU는 RX 6800이다.

1. AMD 그래픽 드라이버 설치

ROCm을 이용하기 위해서는 AMD 그래픽 드라이버 설치가 필요하다. 오픈소스 드라이버를 그대로 사용하고 ROCm만 설치하는 방법도 있는 것 같다. 다양한 옵션을 확인하고 싶으면, 이 페이지(https://amdgpu-install.readthedocs.io/en/latest/)를 참고하면 된다.

AMD 홈페이지에서 자신의 그래픽카드에 맞는 드라이버를 다운로드하고 설치한다. 필자는 AMD Radeon™ RX 6800 Drivers & Support 페이지의 Ubuntu x86 64-Bit 탭에서 “Radeon™ Software for Linux® version 22.40.3 for Ubuntu 22.04.2”을 다운로드했다.

AMD 그래픽카드 드라이버 홈페이지

다운로드된 파일은 “amdgpu-install_5.4.50403-1_all.deb”다. “amdgpu-install_5.4.50403-1_all.deb”를 설치하고, 터미널에 amdgpu-install을 입력하면 설치가 진행된다. 설치 후에는 재부팅 한다. 혹시 재부팅 과정에서 MOK을 등록하는 창이 나온다면, [ Enroll MOK - Continue - Yes - 패스워드 입력 - Reboot ] 순서대로 진행하면 된다.

2. render & video 그룹에 사용자 추가

Stable Diffusion web UI의 설치 방법을 따라해도 이미지 생성에 그래픽카드를 사용하지 않은 이유는 사용자가 그래픽 카드를 사용하는 권한을 부여받지 못했기 때문이었다. 3D 그래픽 가속과 비디오 장치에 대한 권한이 필요했다.

터미널에서 sudo usermod -a -G render $LOGNAMEsudo usermod -a -G video $LOGNAME를 입력한다. 각각 현재 로그인한 사용자를 “render” 그룹과 “video” 그룹에 추가하는 명령어다.

3. 필요한 패키지 설치

이제부터는 Stable Diffusion web UI에서 안내하는 AMD GPU에서 설치하는 절차(https://github.com/AUTOMATIC1111/stable-diffusion-webui/wiki/Install-and-Run-on-AMD-GPUs)에 따라 설치하면 된다. 다만, 조금 수정해서 따라야 한다. 그렇지 않으면, ROCm용 pytroch가 설치되지 않아서 GPU를 사용할 수 없다.

우분투에서는 sudo apt install wget git python3 python3-venv 명령어를 통해 필요한 패키지를 설치한다. python3는 기본으로 설치되어 있으므로, 일반적인 경우라면 wget, git, python3-venv만 설치된다. python3 버전은 3.10.6을 설치하라고 되어있지만, 기본으로 설치되어 있는 최신버전(3.10.7)에서도 잘 작동했다.

4. Stable Diffusion web UI 다운로드

필요한 준비는 끝났다. 일반적인 절차에 따라서 설치하면 된다. 다만, python을 python3로 변경하고, pytorch를 별도로 설치해야하는 등 일부 수정이 필요하다.

아래 명령어를 순서대로 터미널에서 입력한다. Stable Diffusion web UI를 다운로드하고, 내부에 가상환경을 만든다.

git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui
cd stable-diffusion-webui
python3 -m venv venv
source venv/bin/activate
python -m pip install --upgrade pip wheel

git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui을 통해 Stable Diffusion web UI 레파지토리를 내 컴퓨터로 다운로드한다. cd stable-diffusion-webui로 다운로드한 폴더로 이동한다. python -m venv venv로 내부에 가상환경을 설치한다. source venv/bin/activate로 가상환경을 실행한다. python -m pip install --upgrade pip wheel로 필요한 패키지를 업그레이드한다.

5. ROCm PyTorch 설치 및 확인

깃허브 페이지에 따라 설치를 진행하면, PyTorch가 제대로 설치되지 않는다. 그래서 Stable Diffusion web UI의 실행이 아예 불가능하거나, cuda 테스트를 스킵하고 실행(CPU로 연산)해야 한다.

PyTorch 홈페이지에서 ROCm용 파이토치를 설치한다. 필자는 최근에 발표된 PyTorch 2.0을 설치했다.

pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/rocm5.4.2

PyTorch 홈페이지 설치 가이드

만약, 제대로 설치가 되었다면, venv가 activate된 상태에서 pip list | grep 'torch' 명령어를 입력했을 때, torch 버전 뒤에 rocm이 보일 것이다.

torch 2.0.0-rocm5.4.2가 설치된 모습

6. Stable Diffusion web UI 설치 및 실행

마지막으로 Stable Diffusion web UI를 설치하면 된다. 터미널에서 python launch.py를 입력해도 되고, Stable Diffusion web UI 폴더에서 wdbui.sh 파일을 프로그램으로 실행(파일을 우측버튼으로 누르고, 프로그램으로 실행)해도 된다. 실행할 때, GPU에 따라 python launch.py --precision full --no-half 혹은 python launch.py --precision full --no-half --medvram 명령어를 이요하면 된다. 필자가 사용하는 RX 6800은 트레이닝이 필요할 때가 아니면, 별다른 옵션 없이도 잘 작동했다.

처음 Generate를 누르면, 처음 이미지 생성을 시작하기까지 시간이 소요된다. 참고 기다리면, 그 이후부터는 빠르게 이미지 생성이 시작되는 모습을 볼 수 있다. 만약 GPU 사용 상태를 확인하고 싶다면, radeontop이라는 패키지(sudo apt install radeontop으로 설치)를 사용하면 된다.

Stable Diffusion web UI 이미지 생성 결과