- VAE를 받아 SDUI 의 VAE 디렉토리에 넣고 이 VAE 를 사용하도록 세팅한다. 그리고 --no-half-vae 옵션을 사용하고 SDUI 를 실행해보면, 이미지 생성시 아래와 같이 메모리 사용량이 줄어드는걸 볼 수 있다.
SDXL 에서 FP16 VAE 으로 세팅하고 이미지를 생성시 전용 GPU 메모리 사용량
SDXL 에서 FP32 VAE 으로 세팅하고 이미지를 생성시 전용 GPU 메모리 사용량
FP32 VAE 사용시 마지막 단계에서 FP32 VAE 를 사용하기 위해 메모리 사용량이 급격히 (2배) 늘어나는걸 볼 수 있다. 이미지 품질에는 영향이 없기 때문에 FP16을 사용할 수 있으면 사용해야 한다.
- 시간과 메모리 사용량은 아래와 같이 비교된다.
FP32 VAE: 생성시간 4 min. 18.3 sec. A: 8.37 GB, R: 26.08 GB, Sys: 16.0/15.9961 GB (100.0%) FP16 VAE: 생성시간 3 min. 49.4 sec. A: 5.22 GB, R: 9.99 GB, Sys: 11.2/15.9961 GB (69.8%)
- 또한 HiResFix 나 Upscale 작업시에는 VRAM 이 부족한 경우가 많다. 부족한 경우 Tiled VAE 를 사용할 수도 있지만, FP16을 사용할 수도 있을것 같다. 아니면 두가지 모두 사용하거나 말이다.
- FP16 VAE 를 사용해서 문제가 생기면(검은색 이미지가 생성되면) SDUI 의 아래 옵션을 체크해보자. NaN 이 발생하는 경우 자동으로 BF16이나 FP16으로 변환해 사용한다. BF16 을 사용하는 경우 GPU 에서 지원하는지 반드시 확인해야 한다. 잘 모르겟으면 해제하면 된다.
☑ Automatically convert VAE to bfloat16
☑ Automatically revert VAE to 32-bit floats
- FP16 VAE 설명을 보면, NaN 이 자주 발생하는건 일부 활성화 값이 너무 크기 때문이라고 한다. 이 값을 조절하기 위해 몇가지 작업을 했다고 한다.
남는 PC에 Stable Diffusion 1.5 를 원활히 돌리기 위해 8G 이하의 저렴한 GPU 를 구매하려 한다. 중고로 5만원 정도에 SD1.5 에 사용할 수 있는 쓸만한 4G VRAM 을 가진 GPU 를 구매하는게 목표이긴 하다. 아직은 그 이상 투자하려는건 아니다.
우선 어떤 모델이 있는지 확인해 봤다. 표에 정리된 모델명은 해당 제품군에서 해당 VRAM 을 가진 가장 낮은 사양의 모델이다.
※ 1650 은 기본 모델은 추가 전원 핀이 없지만, TU106, TU116 을 사용한 후기 버전은 추가 전원핀이 있고 전력을 더 소모한다. 이건 장단점이 있는데, 필자처럼 마더보드의 전력을 끌어 쓰지 않도록 구성하는걸 선호하는 경우에는 오히려 좋다. 마더보드의 전력은 CPU와 메모리에 집중해야 한다.
PALIT GeForce RTX™ 3050 KalmX 6GB. 3050 에서 유일한 무소음이다.
※ 글을 쓰다보니 3050이 눈에 보인다. 이건 중고가격도 15만원대다. 3050 은 3가지 버전이 있다.
- 3050 8G (GA106, 130W, 2560, 9.098T, 8핀) * 2022.01 출시 - 3050 8G (GA107, 115W, 2560, 9.098T, 6핀) * 2022.12 출시. MSI 에서 주로 출시했다. - 3050 6G (GA107, 70W, 2304, 6.774T, X) * 2024.02 출시
3050 8G 인데 115W 인 GPU 가 있어서 찾아봤다. 주로 MSI 에서 발매한 기종으로 아래와 같다. 단종/판매중이라고 쓴 제품은 실제 우리나라에서 수입된 제품이다.
2025.03.10 수정 생각을 바꿨다. SDXL 까지 되는걸로 해야겠다. 지금 최소 필요한 용량을 확인해보고 있는 중이다. Tiled VAE 사용해도 최소 6GB 는 필요할 것으로 생각한다. 이렇게 되면 3050 6G 모델이 가장 좋아보이는데 저렴한 가격에 구매할 수 있을지 모르겠다. 애초에 계획했던 5만원대와는 멀어지게 되는거고 말이다.
요즘엔 4K 이미지에 대한 목표가 없어졌다. 예전엔 그렇게도 생성하고 싶었었는데, 막상 할 수 있게 되고보니 그다지 갈망하지는 않는거 같다.
좀 다른 방법을 소개한다. Tiled Diffusion 플러그인을 사용하는 방법이다. 하는 방법은 아래와 같다.
1. SDUI 에서 Extensions 탭으로 간 후, TiledDiffusion with Tiled VAE manipulations 을 설치한다.
2. txt2img 탭으로 가서 이미지를 생성하기 위한 설정(프롬프트)을 하고, Hires Fix 를 선택한다. 최종 해상도가 4K 이상이 되도록 배율을 선택한다.
3. Tiled VAE 를 선택한다. 최소한 아래와 같은 설정이 필요하고 나머지 2개도 필요하면 체크해준다.
Encoder/Decoder Tile Size 는 가급적 크게 주는게 좋은데, 너무 크게 주면 CUDA error: out of memory 오류가 발생한다. 적당히 크게 세팅하자. 16GB VRAM 의 경우 1536, 96 으로 세팅한다. 8GB VRAM 의 경우 1024, 64 정도면 될것이다. 그 이하의 VRAM 을 사용하면 더 낮게 세팅해도 된다. 최소값은 256, 48 이다.
4. 생성을 눌러 이미지를 생성하자.
콘솔을 보면 아래와 같이 생성되는걸 확인해볼 수 있다.
100%|████████████████████████████████████████| 38/38 [02:51<00:00, 4.52s/it] 100%|████████████████████████████████████████| 76/76 [03:32<00:00, 3.83s/it] [Tiled VAE]: input_size: torch.Size([1, 4, 320, 192]), tile_size: 96, padding: 11 [Tiled VAE]: split to 4x2 = 8 tiles. Optimal tile size 96x96, original tile size 96x96 [Tiled VAE]: Fast mode enabled, estimating group norm parameters on 57 x 96 image [Tiled VAE]: Executing Decoder Task Queue: 100%|███████████| 984/984 [00:04<00:00, 213.04it/s] [Tiled VAE]: Done in 5.675s, max VRAM alloc 3613.766 MB Total progress: 100%|██████████████████████████████| 76/76 [03:41<00:00, 2.92s/it]
Tiled VAE 사용하지 않은 이미지와 사용한 이미지와는 차이나지 않는다.
VRAM 이 부족하지 않아도 이미지 생성시 GPU가 공유 메모리도 사용하고 있다면 Tiled VAE 를 사용해볼만 하다. 상당히 빨라진다. 필자의 경우 4:59 소요되던 스케일링 작업이 Tiled VAE 를 사용하면 3:45 정도 소요된다.
- 이때문에 Stable Diffusion WebUI도 다시 설치하고, nVidia 드라이버를 다시 설치했는데 실행하고 보니 발열이 많아졌다.
상세하게 말하자면, GPU 의 발열은 줄었는데, CPU 의 발열은 늘었다.
GPU: 80°C -> 75°C CPU: 70°C -> 80°C
- nVidia GPU 드라이버는 570.86 으로 변경했다. 현재 최신버전이다.
- Stable Diffusion WEBUI 에서의 PyTorch 와 CUDA 버전도 2.1.2+cu121 -> 2.3.1+cu121 으로 달라지긴 했다. 옵션은 동일하다. 메모리도 45% 정도 사용하던게 50% 정도 사용하고 있다.
뭔가 CPU에서 발열이 더 일어나고 있고, GPU 에서 발열이 적게 일어나는식으로 튜닝이 된 느낌이다. 마치, AVX2 를 사용하는 것 처럼 말이다. ( Intel® Core™ i7-7700K 발열 참조 ) 문제는 CPU가 그것때문에 80도가 "유지"된다는거. 순간적으로는 100°C 으로도 올라가는거 같다. 수냉 쿨러를 점검해봤지만 이상 없었다.
- 이미지 생성이 느려진다는건 아니라서 그냥 쓰고는 있는데 뭔가 찜찜하긴 하다. 예정에도 없던 수냉 쿨러 바꿀 준비 해야할지도 모르겠다.