이 글은 AMD 노트북이나 미니PC를 구입하신 분들중 Stable-Diffusion 에 관심이 생겨서 처음 해보는 사람들을 위한 글입니다.
제목은 780m을 썼지만 실제로는 다양한 AMD 그래픽 카드에서 구동 가능하고 저 역시 780m, 680m, Vega(4650u 내장 그래픽카드) 에서도 작동하는것을 확인했습니다.
1. 시작하기 전에 간단한 잡썰
인터넷 검색해보면 위와 같이 많은 인공지능 이미지 생성 툴이 있는데요. (저거 말고 더 있지만 제가 해본것만 적어봅니다) 제가 여기저기 주워들은 이야기를 정리해보면
태초에(?) 1번이 있었고… 어느 개발자가 퍼포먼스 문제 때문에 포크해서 2번을 만들었는데 1번이랑 2번이랑 내부적으로 너무 많은 변화가 생기니 완전히 분리되어 하나의 새로운 라인으로 성장했고… 3번은 2번의 퍼포먼스는 좋은데 너무 변화가 심해지니 확장 플러그인이 호환이 안되거나 1번의 개선점을 2번에 적용을 못하니 다시 최대한 1번과 호환이 되면서 퍼포먼스는 개선하는 방향으로 전환 했다고 합니다. 4번은 1번에서 출발해서 완전히 독자 노선으로 갔다고 하는데 솔직히 역사는 잘 모르겠고 5번은 그냥 다른 툴인거 같습니다.
AMD에서 GPU 가속을 해서 연산을 할려면 DirectML이나 Zluda 둘 중 하나를 지원해야 하는데 제가 써본거로는 DirectML이 Zluda 보다 2~3배 느립니다.
SD.Next는 공식적으로 둘다 지원하고요 ComfyUI는 DirectML을 지원합니다. 나머지는 다른 분들이 Zluda 사용을 추가한 파생 버전을 사용해야 하는데 3번 reforge는 파생버전을 못찾았고..
ComfyUI는 찾았는데 뭐가 문제인지 설치하고 실행하면 위 스샷 처럼 에러가 발생하거나 어찌저찌해서 실행은 시켰더니만 이번엔 이미지 생성하면 Cuda 에러 뜨면서 정상 작동을 안합니다. 그래서 ComfyUI는 포기했습니다.
1번 2번은 어느분이 Zluda 패치를 해 놓은 버전이 있고 4번은 공식 지원이라 셋다 설치해서 사용 해봤는데 forge는 퍼포먼스는 제일 좋지만 UI에서 잔버그가 많아서 쓰다가 말았고 SD.Next는 모델 관리 메뉴가 버그인지 제가 뭔가 잘못쓰는건지 추가를 해도 목록에 안나오는 것 때문에 역시 쓰다가 말았습니다.
그래서 이 글에서는 stable-diffusion-webui + Zluda = stable-diffusion-webui-amdgpu 버전 설치를 다뤄보겠습니다.
1. 폴더 구조
일단 저는 폴더 구조를 위와 같이 했습니다. 두가지 이유가 있는데요. 하나는 윈도우 재설치시 AI 폴더 하나만 그대로 옮기면 바로 실행되는 반포터블화이고 다른 하나는 SD.Next나 reforge등 다른 툴 사용시 중복되는 파일을 공유하기 위해서입니다.
2. 공통 파일 다운로드
이 과정은 처음 설치 할때만 필요한 과정이고 해당 파일이 전부 존재하면 안해도 되는 과정입니다.
Git : https://git-scm.com/downloads/win
GIt은 최신버전 64비트 포터블로 받아서 실행하면 위와 같은 파일/폴더가 생기는데 이걸 전부 ETC\git 폴더에 넣어줍니다.
Python 3.10.11 : https://www.python.org/downloads/release/python-31011/
설치할때 ETC\python3.10.11 폴더로 지정하거나 기본으로 설치 후 위 스샷과 같은 파일을 복사해서 넣어주면 됩니다.
ROCm : https://www.amd.com/en/developer/resources/rocm-hub/hip-sdk.html
2024년 12월 기준으로 6.1.2, 5.7.1 두 버전 중 어떤걸 해도 상관없습니다. ComfyUI 보면 6.1.2는 검증되지 않아서 5.7.1을 추천한다고 하는데 저는 둘다 해보니 780m 680m에서는 둘다 잘 작동했습니다. (4650u에서는 6.7.1의 경우 ROCm 내장 툴에서는 인식하는데 Stable-Diffusion 툴에서는 인식 못하는 문제가 있었습니다.)
설치하면 C:\Program Files\AMD\ROCm\6.1 이라는 폴더가 생기는데 이 폴더를 ETC\ROCm\6.1 폴더로 복사합니다.
ROCmLibs 패치
ROCmLibs : https://github.com/likelovewant/ROCmLibs-for-gfx1103-AMD780M-APU
AMD 공식으로 ROCm은 6000~7000번때 최신 그래픽 카드만 지원하는데 능력자분들이 다른 그래픽카드 들도 사용 할 수 있도록 만들어 주셨습니다. 위 링크 Release 항목에서 5.7.1이나 6.1.2 에 맞는 파일을 다운 받아야 합니다.
자신의 그래픽 카드가 뭔지 잘 모르겠다 싶으면 ETC\ROCm\6.1\bin\amdgpu-arch.exe를 실행하면 위처럼 현재 그래픽 카드 모델이 뭔지 나옵니다. (현재 노트북에서 실행해서 780m(gfx1103)이 아닌 다른 모델명이 나왔습니다.)
다운 받은 파일 압축을 풀면 rocblas.dll과 library 폴더가 나오는데요.
rocblas.dll은 ETC\ROCm\6.1\bin 로
library폴더는 ETC\ROCm\6.1\bin\rocblas 로 복사하면 됩니다.
기존 파일과 폴더를 백업해놓으라는 말이 있긴 한데 해도 되고 안해도 됩니다.
3. 설치
우선 stable-diffusion-webui-amdgpu 폴더를 생성합니다.
@echo off FOR %%A IN ("%~dp0.") DO set parent_path=%%~dpA set PATH=%parent_path%ETC\git\cmd git init . git remote add origin https://github.com/lshqqytiger/stable-diffusion-webui-amdgpu.git git pull origin master
stable-diffusion-webui-amdgpu 폴더안에 메모장이나 기타 텍스트 에디터를 사용해서 위 내용이 담긴 “stable-diffusion-webui-amdgpu-설치.cmd” 파일을 생성합니다.
그리고 실행합니다.
@echo off FOR %%A IN ("%~dp0.") DO set parent_path=%%~dpA set PYTHON_PATH=%parent_path%ETC\python3.10.11\ set PYTHON=%PYTHON_PATH%python.exe set GIT_PATH=%parent_path%ETC\git\cmd\ set GIT=%GIT_PATH%git.exe set VENV_DIR=%~dp0venv set USERPROFILE=%parent_path%ETC\USERPROFILE\stable-diffusion-webui-amdgpu\ set HIP_PATH=%parent_path%ETC\ROCm\6.1\ set ROCM_HOME=%HIP_PATH%bin\ set TEMP=tmp\ set PATH=%PATH%;%parent_path%ETC\git\cmd;%PYTHON_PATH% If Not Exist "%USERPROFILE%AppData\Local\" ( mkdir %USERPROFILE%AppData\Local\ ) set tmp_pypath=home = %PYTHON_PATH% if exist "%VENV_DIR%\" (powershell -command "$text = (gc %VENV_DIR%\pyvenv.cfg) -replace 'home = .*', $env:tmp_pypath; $Utf8NoBomEncoding = New-Object System.Text.UTF8Encoding($False);[System.IO.File]::WriteAllLines('%VENV_DIR%\pyvenv.cfg', $text, $Utf8NoBomEncoding);") set COMMANDLINE_ARGS=--models-dir "%parent_path%Models" --use-zluda --disable-nan-check --no-half-vae git pull origin master call webui.bat
이번엔 위 내용으로 stable-diffusion-webui-amdgpu-실행(ZLUDA).cmd 파일을 만듭니다. 그리고 실행시키면 stable-diffusion-webui-amdgpu가 작동하는 모습을 볼 수가 있습니다.
몰라도 되긴 하지만 위 실행 배치파일 내용을 하나 하나 설명하자면…
FOR %%A IN ("%~dp0.") DO set parent_path=%%~dpA
이 부분은 상위 폴더의 경로를 구하는 부분입니다. 현재 경로가 AI\stable-diffusion-webui-amdgpu 이니 parent_path는 AI\ 값이 들어가 있습니다.
set PYTHON_PATH=%parent_path%ETC\python3.10.11\ set PYTHON=%PYTHON_PATH%python.exe
이부분은 파이썬 경로를 지정해주는건데 밑에 Path 부분에도 들어가야 해서 한줄만 바꾸면 밑에까지 다 적용되라고 이렇게 작성했습니다.
set GIT_PATH=%parent_path%ETC\git\cmd\ set GIT=%GIT_PATH%git.exe
Git 부분도 파이썬과 마찬가지입니다.
set VENV_DIR=%~dp0venv
가상 파이썬 환경 폴더를 지정합니다. 그냥 venv만 써도 되는데 전에 모 프로그램이 상대경로 제대로 못써서 엉뚱한 곳에 파일 생성했던 경험 때문에 절대경로를 지정하게 하느라 해놓았습니다.
set USERPROFILE=%parent_path%ETC\USERPROFILE\stable-diffusion-webui-amdgpu\ set HIP_PATH=%parent_path%ETC\ROCm\6.1\ set ROCM_HOME=%HIP_PATH%bin\
첫줄은 Zluda 때문에 필요한 부분인데요. Zluda는 쉐이더 컴파일 처럼 처음에 컴파일 작업을 합니다.
이 작업이 금방 끝나진 않고 8845hs 기준으로 약 40분 가량 걸리는데요. 매번 하지 말라고 zluda.db 라는 파일로 저장해 놓습니다. 이 파일을 잘 백업해야 나중에 윈도우 재설치 한 뒤에도 40분씩 또 컴파일 하는 작업을 안하게 되죠. 그래서 AI\ETC 폴더 안에 저장되도록 한것입니다.
두번째줄과 세번째 줄은 ROCm 경로를 지정하는건데 요게 없으면 ROCm 없다고 실행이 안됩니다.
set TEMP=tmp\ set PATH=%PATH%;%parent_path%ETC\git\cmd;%PYTHON_PATH%
이건 뭐 그냥 임시폴더 경로랑 git, 파이썬 경로 path에 추가
If Not Exist "%USERPROFILE%AppData\Local\" ( mkdir %USERPROFILE%AppData\Local\ )
이건 Zluda 때문에 있는데요. Zluda가 저 경로 폴더가 없으면 컴파일 해도 실제 파일을 저장하지 않습니다. 아마도 USERPROFILE 환경변수가 윈도우 때문에 기본적으로 AppData\Local 폴더가 반드시 있기 때문에 체크를 안하는거 같은데요. 암튼 저는 그래서 해당 폴더가 없으면 생성하도록 했습니다.
set tmp_pypath=home = %PYTHON_PATH% if exist "%VENV_DIR%\" (powershell -command "$text = (gc %VENV_DIR%\pyvenv.cfg) -replace 'home = .*', $env:tmp_pypath; $Utf8NoBomEncoding = New-Object System.Text.UTF8Encoding($False);[System.IO.File]::WriteAllLines('%VENV_DIR%\pyvenv.cfg', $text, $Utf8NoBomEncoding);")
이 부분은 venv\pyvenv.cfg 파일을 열어보면 home 값이 설치할때 파이썬 경로를 가리키고 있는데요. 이 부분을 경로가 변경되도 실행에 문제 없도록 수정해주는 부분입니다.
이 부분은 https://github.com/serpotapov/stable-diffusion-portable 에서 가져왔습니다.
set COMMANDLINE_ARGS=--models-dir "%parent_path%Models" --use-zluda --disable-nan-check --no-half-vae git pull origin master call webui.bat
여기는 실행시 파라미터 지정하는건데 비디오램이 8g 이하면 –medvram이나 –lowvram을 추가해야 합니다.
안그러면 위 스샷 처럼 CUDA out of memory 뜨면서 기껀 연산 다 해놓고 결과 안보여 줍니다
4. 추가 팁
Tip 1.
amd 내장 그래픽 카드를 쓰면 시스템 램을 vram으로 쓰기 때문에 작게 잡아도 부족하면 알아서 공유GPU 메모리라고 시스템 램을 더 끌어다 씁니다. 그래서 시스템 램이 많으면 굳이 vram에 크게 안잡고 써도 별 차이 없을 줄 알았는데…
vram 8g, 16g 할당시 3분 10초 정도 걸리던게 2분 40초대로 살짝 차이가 납니다. 그렇기 때문에 vram 할당을 많이 하는것을 추천드립니다.
Tip 2.
설정에 가면 VAE 항목에 TAESD | Full 을 선택하는게 있는데 이거 꼭! 반드시 TAESD를 선택하세요.
TAESD에 대한 자세한 설명은 https://github.com/madebyollin/taesd 을 참고 하시고 이거 하면 연산 속도도 상당히 빨라지고 Out of memory 발생하는걸 상당히 많이 막아줍니다.
이거 말고 Tiled VAE 라는것도 있는데 (별도 확장 설치) 이것도 설치해서 활성화 하세요. SDXL 1.0 연산시 CUDA out ouf memory 나는걸 방지해줍니다.
Tip 3.
모델(체크포인트, 로라) 다운로드는 https://civitai.com/ 에 가면 구할수 있습니다.
SD 1.5 베이스 모델은 연산은 빠른데 프롬프트 세세하게 안쓰면 괴물이 나오는 경우가 많아서 초보자들에겐 추천하지 않고요. Pony, SDXL 1.0, Illustrious 베이스로 나온 체크포인트를 추천드립니다.
Tip 4.
civitai에서 해당 모델이 야짤 생성이 가능한지 아닌지 볼려면 위 이미지 처럼 계정 설정에 들어가서 설정을 변경하고 모델 페이지에서 아래로 스크롤 하면 다른 유저가 이 모델을 사용해서 만든 그림이 나오는데 거기에 야짤이 있으면 된다는 소립니다.
근데 진짜 기괴한 이상성욕 야짤 무자게 많이 나오니깐 주의 하세요.
5. 마무으리
마지막으로 제가 딸깍으로 뽑은 이미지 몇장 올려보고 마치겠습니다.
답글 남기기