Rich-Text-to-Image webui 확장을 간단하게 만저보는 시간

그런데 이건 sd-webui에서 구현된 것이 아닌, sd-webui에 기생하는 별도의 프로그램에 가까워서 확장성이 없음. 선택 가능한 모델도 이것이 전부. 


 

이렇게 된 이유는 이런것들은 보통 허깅페이스의 디퓨저 기반이고 디퓨저 모델 형식을 사용하기 때문. 디퓨저는 체크포인트 로드를 지원하지만 개조를 하는 경우에는 디퓨저 방식을 많이 사용함.

그런데 여기에 색상 있는 프롬프트를 사용하면

12GB VRAM에서 CUDA out of memory가 뜸. 


그것도 SDXL가 아닌 SD 1.5가. SDXL는 당연히 안되고...


소스코르를 확인해보니 fp32로 로드하길레 


fp16로 로드하도록 소스코드를 수정함. 디퓨저 기반이라서 가능한것. 대신 프로그램이 불안정해지니 주의.


그러면 잘 작동된다.

다른 색상도 OK

그럼에도 VRAM이 아슬아슬한 상황. --lowvram을 사용하면 조금 개선되지만 그래도 여전히 아슬아슬하다.


그렇다면 더이상 방법이 없는것일까? 그렇지 않다. 디퓨저 기반인 경우 토크나이저와 텍스트 인코더는 허깅페이스의 트렌스포머라는 다른 라이브러리가 담당하는데, 이 라이브러리는 언어모델을 담당한다. 프롬프트를 읽고 처리하는것은 언어모델의 한 분야로서 지속적인 언어모델에 대한 연구가 없었다면 그림 AI는 불가능했을지도 모른다. 


그리고 트렌스포머는 8bit 또는 4bit 양자화를 지원한다. 다만 트렌스포머 혼자서는 안되고 학습에 관심이 있다면 들어본적 있는 bitsandbytes가 필요하다.


bitsandbytes를 설치하도록 지정한 다음


토크나이저와 텍스트 인코더를 4bit로 로드하도록 수정한다.


대충 개선되긴 했다. 


SD 1.5 순정 모델이 문제이긴 한데, 소스코드의 순정 SD 1.5 디퓨저 모델 주소를 적당한 디퓨저 아니메 모델로 변경하면


일단 작동은 하는데 무리하게 시도하는 거라서 그런건지 뭔가 미묘한 느낌? 누군가가 webui에 제대로 이식할때까지는 그냥 그림의 떡에 가까운 기술.