AI 이미지/AUTOMATIC1111

Stable Diffusion A1111 메모리 부족 에러

하늘이푸른오늘 2023. 4. 15. 00:42

AUTOMATIC1111을 설치하고, 몇가지 테스트 중이었습니다. 그중에서도 Easy Diffusion에서는 사용할 수 없었던 LoRA를 사용할 수 있다고 해서 기분 좋게 돌리고 있었죠.

그런데, 잘 돌아가는 듯 하다가... 뻗었습니다. 처음에 512x512짜리 이미지 1개를 생성할 때는 문제가 없었는데 크기를 좀 늘이고 2장씩 뽑으라고 했더니 아래처럼 "torch.cuda.OutOfMemoryError: CUDA out of memory. Tried to allocate 38.00 MiB (GPU 0; 4.00 GiB total capacity; 2.67 GiB already allocated; 27.80 MiB free; 2.71 GiB reserved in total by PyTorch" 라는 메시지를 내고 죽어버렸습니다. 이 다음에는 다시 실행도 안되서 컴퓨터를 리부팅시켜야 했고요.

AUTOMATIC1111 - CUDA out of memory

사실 이것은 제가 사용하는 비디오 카드가  GeForce GTX 1050 Ti 를 사용하는 호환카드에 VRAM이 4GB로, Stable Diffusion을 거의 간신히 돌릴 수 있는 정도로 성능이 낮기 때문에 발생한 일입니다. (Easy Diffusion에서 베터 버전으로 LoRA를 사용할 수 있다고 해서 테스트중 뻗어버렸을 때 프로그램을 탓했더니 제 컴이 꼬졌기 때문이었네요. 개발자 분들에게 죄송..ㅠㅠ)

그렇다고 더 좋은 비디오 카드를 사용한다고 해서 메모리 부족이 발생하지 않는 건 아닙니다. 아무리 좋은 그래픽 카드라고 해도 예를 들면 한번에 뽑는 이미지 갯수(Batch size)를 올리거나, 이미지 크기를 키우면 에러가 발생합니다. 나중에 비디오를 생성하는 세상이 온다면 더 메모리 부족에 시달리겠죠. 

아무튼 그래서 메모리 문제를 해결하려고 AUTOMATIC1111에서 Settings 부분을 찾아보다가 너무 복잡해서 포기하고(Easy Diffusion에서는 메모리 사용량을 제어하는 설정이 있었는데...ㅠㅠ) AUTOMATIC1111 최적화 문서를 보니 xformers를 사용하면 아래처럼 메모리 사용량이 줄면서도 속도가 올릴 수 있다고 하니 바로 해봤습니다.

이 문서에서는 사용하는 방법이 없어서 좀 더 뒤졌는데, 설치(아니 활성화)하는 방법이 정말 쉽네요. 그냥  AUTOMATIC1111 webui가 설치된 %userprofile%/stable-diffusion-webui 디렉토리에 들어가서 [webui-user.bat] 파일을 편집해서 "set COMMANDLINE_ARGS=" 라고 되어 있는 곳에 "--xformers"를 추가만 해주면 됩니다. 아래처럼요.

@echo off
set PYTHON=
set GIT=
set VENV_DIR=
set COMMANDLINE_ARGS=--xformers

call webui.bat

그러면 실행되면서 xformers 모듈을 불러오고 실행됩니다.

다만, 대부분의 경우 환경설정과 씨드 번호가 동일하면 동일한 이미지가 생성되는데, xformers를 사용하면 약간씩 생성되는 이미지가 약간씩 달라진다는 단점이 있다고 합니다. 아래는 제가 참고한 글에 들어 있는 건데, 첫번째는 원래 이미지고요, 오른쪽 두개는 xformers를 켜고 생성한 이미지인데... 뭐 달라졌다고는 하는데 별로 달라진 것 같지는 않네요. 막눈에게는 별 차이가 없어 보이니 다행입니다.ㅎㅎ

다만, 아래쪽의 데이터를 보면.... 실행 시간은 약간 줄어들었는데 VRAM 사용량을 보면 확실히 줄었다는 걸 알 수 있습니다. 4.4GB가 650MB로 준다니 획기적이네요. ㅎㅎ

GPU: RTX 3090
Render Time: 16 seconds
VRAM @ Idle: 5440 MB
VRAM @ Max: 9860 MB
Actual MAX VRAM Usage: 4420 MB
GPU: RTX 3090
Render Time: 14 seconds
VRAM @ Idle: 5422 MB
VRAM @ Max: 6076 MB
Actual MAX VRAM Usage: 654 MB

아무튼... 다행입니다. 이렇게 해서 (언젠가는 사야겠지만) 잠시라도 돈이 굳었네요. 얼마나 버틸 수 있을지 저도 기대됩니다. ㅎㅎㅎ

민, 푸른하늘

p.s. 그래도 이미지 크기를 좀 더 키우거나... 얼굴 복원 기능을 사용하면 똑같은 문제가 발생하네요. 그래서 좀 더 찾아보니, Troubleshooting 문서에 VRAM 이 적을 때의 대처법이 있네요.

Automatic1111 을 구동할 때 사용하는 webui-user.bat 파일을 열면 대략 아래처럼 생겼는데요, COMMANDLINE_ARGS에 --medvram 또는 --lowvram, 그래도 안될 때는  --lowvram --always-batch-cond-uncond 를 추가하라고 합니다. (이걸 보니, Easy Diffusion이 편하기는 하네요. ㅎㅎ)

@echo off

set PYTHON=
set GIT=
set VENV_DIR=
set COMMANDLINE_ARGS=--xformers --medvram
set PYTORCH_CUDA_ALLOC_CONF=garbage_collection_threshold:0.6,max_split_size_mb:128
call webui.bat

===