SDXL 에서는 FP8 를 사용않고 있었다. SDUI 에서도 FP8 이 기본적으로 활성화 되지 않는다. 문득 조금 이상하다는 생각이 들어 찾아봤다.
- 우선 SDUI 에서는 Optimizations 항목에 FP8 관련 설정이 아래와 같이 2개 있다.
① FP8 weight (Use FP8 to store Linear/Conv layers' weight. Require pytorch>=2.1.0.) ◎ Disable ◎ Enable for SDXL ◎ Enable
② Cache FP16 weight for LoRA (Cache fp16 weight when enabling FP8, will increase the quality of LoRA. Use more system ram.)
- ① 을 활성화하면 기본적으로 FP8 을 사용하게 된다. 실제로 해보면 성능 향상(이미지 생성속도)이 없다. 단 메모리는 FP8을 사용하는 만큼 적게 사용한다. FP8을 활성화 하는 경우 일부 LoRA 를 사용할 수 없다. 왜인지는 모르겠지만 오류 발생한다.
- SDXL 메모리 사용량
FP8: 3.80 GB FP16: 5.23 GB
SDXL FP16
SDXL FP8
주) VAE 는 동일하게 FP32 사용한다.
- ②는 캐시관련된거라 성능에 관련이 없다.
- 결론적으로 써도 성능 향상이 없고, LoRA 호환성만 떨어뜨리기 때문에 사용 안하는 거다. 결과물도 다르다. (단 FP16이 항상 더 좋은 결과를 내주는건 아니다) FLUX.1 dev 는 FP8 을 쓰면 효과가 상당히 좋은데 (이미지 생성속도가 빨라지는데) 유독 SDXL 에서는 효과가 없다.
- 아래는 같은 프롬프트, 같은 파라메터를 사용해서 만든 이미지다. 어떤게 좋다고는 할 수 없지만 왠지 FP16 이 더 빛나 보인다.
체크포인트를 바꿨다. 오랜만에 머지를 다시 했는데, 괘 괜찮게 나왔다. 8월 초에 한번 바꾸고 근 3개월 만이다. 그동안 몇번 머지를 시도했지만 기존것 보다 안 좋다고 판단되어서 사용하지 않고 있었다. 다행이도 이번엔 기존것 보다 잘 나왔다.
슬슬 SDXL 이나 SD3, FLUX.1 등으로 바꾸긴 해야 한다고 생각하긴 하는데 아직 못 바꿨다. PC의 업그레이드는 마쳤고, 지금은 SDXL 정도는 무난하게 사용가능하긴 하지만 아직 맘에 드는 그림체가 아니라서 못 바꾸고 있다. 하지만 꾸준히 SDXL 이나 FLUX.1 으로는 생성하고 있다. 웬지 아래와 같은 그림체가 안나와서 맘에 안들 뿐이다. 이러다가 직접 LoRA 를 작성해야 하는게 아닌가 생각하기도 한다.
① Stable Diffusion 3.5 Large: 80 억개 파라메터 ② Stable Diffusion 3.5 Large Turbo: Large 의 ADD(Adversarial Diffusion Distillation) 적용 모델. 4 스텝 용. ③ Stable Diffusion 3.5 Medium: 25 억개 파라메터
우선 Large 와 Large Turbo 가 발표되었습니다. Medium 은 10/29 공개 예정이라 하네요.
- 앞서 발표했던 SD3 의 Medium 모델이 20 억개의 파라메터를 가졌고, SDXL 은 26 억개입니다. FLUX.1 Dev 가 120억개입니다. 파라메터가 많으면 더 좋은 이미지를 얻을 수 있는건 맞지만, 고사양을 필요로 하기 때문에 대중성에서는 떨어집니다. 많이 떨어지죠. 아직까지 SDXL 에서 벗어나지 못하는 이유기도 합니다.
SD 3.5 구조. SD3 와 거의 유사하다.
SD3.5 의 구조는 SD3 와 거의 같습니다. 다이어그램에는 CLIP 에서 256 토큰을 사용한다고 되어있는데 뭔지는 잘 모르겠네요.
FLUX.1 Dev 이 사용하기 어려워서 (이미지 생성 속도 때문에) 고민되었는데 Medium 은 이미지 생성속도가 SDXL 과 비슷한 정도일 것으로 생각되어서 사용해볼만 하겠네요.
- 2024.10 현재 가장 많이 사용되는 모델은 SDXL 입니다. SD3.5 나 FLUX.1 Dev 이 대중화되려면 조금 더 시간이 필요해 보이네요. 소비자들이 많이 사용하는 GPU 가 xx60 (3060, 4060, 1650, 2060, ...) 급의 GPU 인데 이정도 스펙에서는 SDXL 을 사용하면 쾌적하게 사용할 수 있으니까요. 저도 SD1.5, SDXL 이 주력입니다.
1. https://huggingface.co/black-forest-labs/FLUX.1-dev/tree/main (공식 리포지토리) flux1-dev.safetensors 및 ae.safetensors 파일 다운로드
2. https://huggingface.co/comfyanonymous/flux_text_encoders/tree/main clip_l.safetensors 및 t5xxl_fp16.safetensors 파일 다운로드 -> 공식 리포지토리의 text_encoder, text_encoder_2 아래에 있는 파일과 같은 파일이다.
3. 다운로드 받은 파일을 stable-diffusion-webui-forge 의 디렉토리로 옮김
3. stable-diffusion-webui-forge 실행 후, 아래와 같이 세팅 UI: flux CheckPoint: flux1-dev VAE / TextEncoder: clip_l.safetensors, t5xxl_fp16.safetensors, ae.safetensors
4. GERERATE 버튼 클릭!
- 이렇게 실행하려면 최소한 24GB VRAM 을 가진 nVidia GPU 와 64GB 의 시스템 메모리가 필요하다.
- 일부 파일은 여기서 받음: https://huggingface.co/camenduru/FLUX.1-dev/tree/main
※ FP8, NF4으로 구성
속도를 빠르게 하고 메모리 사용량을 줄이기 위한 목적으로 FP8 이나 NF4 를 사용한 모델을 사용할 수 있다. 이걸로 해야 필자의 사양(RTX 2060 12GB, MEMORY 64GB)에서 실행된다.
전용 GPU 메모리(Dedicated GPU Memory): GPU 의 VRAM 용량 공유 GPU 메모리(Shared GPU Memory): GPU 에 의해 공유되는 시스템 메모리. 사용 가능한 용량은 시스템 메모리의 절반
- 스왑 메모리 위치 -- CPU: 모델을 GPU 메모리 및 시스템 메모리에 위치 -- Shared: 모델을 GPU 메모리 및 공유 GPU 메모리에 위치. 좀 더 빠른 대신 실행 이슈(크러시)가 발생할 수 있다.
- GPU Weights (MB): GPU 에 적재할 모델의 크기. 크면 클수록 좋지만, 이미지 생성시에도 GPU 메모리를 필요로 하기 때문에 적당히 조절해야 한다.
- 스왑 메쏘드 -- Queue: 모델 적재 -> 연산 -> 다른 모델 적재 -> 연산의 순서로 차례대로 진행된다. -- Async: 모델 적재 -> 연산 및 다른 모델 적재 -> 연산 및 다른모델 적재 의 순서로 동시에 처리된다. Queue 보다 빠르지만, 모델에 따라 갑자기 매우 느려질때가 있다. Async 와 Queue 를 비교해보고 빠른걸 선택하자.
CivitAI 에 공개된 이미지 프롬프트를 보고 따라한 그림. FLUX 로 생성했다. https://civitai.com/images/31943195