윈디하나의 누리사랑방. 이런 저런 얘기

글쓴시간
분류 기술,IT/스테이블 디퓨전
Stable Diffusion - SDXL 의 VAE FP16 vs FP32

SDXL 에서 VAE 는 FP32 으로 사용하곤 한다. FP16 으로 된 VAE 라도, FP32 으로 변환해서 사용한다. 이렇게 하는 이유가 SDXL 의 경우 VAE 를 사용해 이미지를 변환할 때, NaN 오류가 많이 발생하기 때문이다.

- 그래서 필자도 Stable Diffusion webUI (SDUI) 에서 --no-half-vae 옵션을 주어 사용했다. 이렇게 하면 NaN 이 발생하지 않아 이미지가 검게 생성되는 현상을 없앨 수 있었다. 반대로 이 옵션을 주지 않으면, 매우 자주 발생한다.

여태까지 --no-half-vae 옵션을 주면서 사용하다가, 최근에 이에 대한 패치가 나온걸 알 았다. VAE 에 대한 FP16  FIX 이다. SDXL-VAE-FP16-Fix 에 나와있는

https://huggingface.co/madebyollin/sdxl-vae-fp16-fix/resolve/main/sdxl.vae.safetensors

을 다운로드 받아 사용하면 된다.

- 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 이 자주 발생하는건 일부 활성화 값이 너무 크기 때문이라고 한다. 이 값을 조절하기 위해 몇가지 작업을 했다고 한다.

사용자 삽입 이미지

활성화 값이 큰 예시

글쓴시간
분류 기술,IT
VRAM 4G 이상 8G 이하의 nVidia GPU

남는 PC에 Stable Diffusion 1.5 를 원활히 돌리기 위해 8G 이하의 저렴한 GPU 를 구매하려 한다. 중고로 5만원 정도에 SD1.5 에 사용할 수 있는 쓸만한 4G VRAM 을 가진 GPU 를 구매하는게 목표이긴 하다. 아직은 그 이상 투자하려는건 아니다.

우선 어떤 모델이 있는지 확인해 봤다. 표에 정리된 모델명은 해당 제품군에서 해당 VRAM 을 가진 가장 낮은 사양의 모델이다.

VRAM | 10xx    16xx  20xx   30xx  40xx  50xx
-----+-------------------------------------
4G | 1050Ti 1630
6G | 1060 1660 2060 3050
8G | 1070 2060S 3050 4060 5050

이 모델들에 대한 2025.03.05 현재 가격을 알아보았다. 중고 업자에게 구매할 수 있는 가격이며, 직거래하는 경우 더 저렴한 가격에 구매할 수 있다. TDP 도 중요하기에 같이 적어놓았다.

모델   VRAM TGP  CUDA FP32   PRICE     VARIATION
------ ---- ---- ---- ------ --------- ---------------------------
1630 4G 75W 512 1.828T 9만 중고
1050Ti 4G 75W 768 2.138T 9만 중고
1650 4G 75W 896 2.984T 11만 중고 GDDR6, TU106, TU116, 1650S
1060 6G 120W 1280 4.375T 13만 중고 3G, 5G, GDDR5, GDDR5X
1660 6G 120W 1408 5.027T 16만 중고 1660S, 1660Ti
1070 8G 150W 1920 6.463T 17만 중고 GDDR5X, 1070Ti
2060 6G 160W 1920 6.451T 19만 중고 12G
2060S 8G 175W 2176 7.181T 25만 중고
3050 6G 70W 2304 6.774T 25만
3050 8G 130W 2560 9.098T 32만 GA107 (115W)
4060 8G 115W 3072 15.11T 45만 Ti
5050 8G 100W 2560 12.90T 250$ (예상)

1030 2G 30W 384 1.127T 10만 DDR4

※ 1630 은 성능이 너무 낮은데다, 가격의 이점이 없어 거의 안 팔렸다. 당시 신품가격 17만원이었는데 이 가격이면 다른거 샀다. 그래서인지 중고로도 거의 매물이 없다. 그래도 1030에 비해 NVENC 가 있었기 때문에 이를 사용할 수 있는 가장 저렴한 제품이다.

※ 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 에서 발매한 기종으로 아래와 같다. 단종/판매중이라고 쓴 제품은 실제 우리나라에서 수입된 제품이다.

Colorful iGame RTX 3050 Ultra W DUO OC V2 (2팬, 249mm) 단종
Colorful Tomahawk RTX 3050 DUO V2         (2팬, 255mm) 단종
MSI RTX 3050 AERO ITX OCV1                (1팬, 168 mm)
MSI RTX 3050 AERO ITX V1                  (1팬, 168 mm)
MSI RTX 3050 VENTUS 2X OCV1               (2팬, 236 mm) 단종
MSI RTX 3050 VENTUS 2X V1                 (2팬, 236 mm)
MSI RTX 3050 VENTUS 2X XS                 (2팬, 205 mm)
MSI RTX 3050 VENTUS 2X XS OC              (2팬, 205 mm) 판매중. DVI 커넥터가 있다.

사용자 삽입 이미지

MSI RTX 3050 VENTUS 2X OCV



쓰고보니 3050이 좋아보인다. 에혀.

----

2025.03.10 수정
생각을 바꿨다. SDXL 까지 되는걸로 해야겠다. 지금 최소 필요한 용량을 확인해보고 있는 중이다. Tiled VAE 사용해도 최소 6GB 는 필요할 것으로 생각한다. 이렇게 되면 3050 6G 모델이 가장 좋아보이는데 저렴한 가격에 구매할 수 있을지 모르겠다. 애초에 계획했던 5만원대와는 멀어지게 되는거고 말이다.
글쓴시간
분류 기술,IT/스테이블 디퓨전
Stable Diffusion WebUI 4K 이미지 생성 - Tiled VAE 사용

요즘엔 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 정도 소요된다.
글쓴시간
분류 기술,IT
소프트웨어 업그레이드로 인한 CPU 발열 증가

- Ubuntu 22.04 -> 24.04 으로 업그레이드 했다.

사용자 삽입 이미지

- 이때문에 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 으로도 올라가는거 같다. 수냉 쿨러를 점검해봤지만 이상 없었다.

- 이미지 생성이 느려진다던가, 시스템에 이상이 있는건 아니라서 그냥 쓰고는 있는데 뭔가 찜찜하긴 하다. 딱히 할 수 있는것도 없긴 하지만 말이다. 그냥 수냉 쿨러 바꿀 준비 해야할지도 모르겠다.

----

2025.04.25

아무래도 이건 드라이버 문제인것 같다. 현재 최신 커널/드라이버를 사용하니 이 현상이 사라졌다.
글쓴시간
분류 기술,IT/스테이블 디퓨전
3.1 절기념 한복 그림

3.1 절이기도 해서 한복 비슷한 그림으로 그려보았다. 요맘때랑 광복절때 한복을 그려야 겠다는 생각을 한다.

현재 AI 에서는 우리나라 전통 한복을 완전하게 그리지는 못한다. (아마 앞으로도 완전하게는 못그릴거 같다) 특히 옷 매듭이 어렵고, 윗 저고리도 한복처럼 잘 안나온다. 어딘가 일본의 기모노와 중국의 한푸, 치파오가 섞여있는 느낌이다.

생성한 것 중 그나마 비슷하다고 생각되는 걸로 골라 올린다. 오늘 하루종일 이 이미지만 생성한거 같다. CIVITAI 에 올려놓은 한복 LoRA를 사용해 생성했다.

사용자 삽입 이미지

사용자 삽입 이미지

사용자 삽입 이미지

사용자 삽입 이미지

사용자 삽입 이미지

사용자 삽입 이미지

사용자 삽입 이미지