Stable Diffusion

Stable Diffusion(스테이블 디퓨전)은 Stability AI에서 오픈 소스로 배포한 'text to image' 인공지능 모델이다. 글자그림으로 치환해주는 소프트웨어이다.

개요[편집 | 원본 편집]

독일의 뮌헨 대학교의 Machine Vision & Learning Group의 연구를 기반으로 Stability AI를 중심으로 만들어진 인공지능 모델이다. 이 모델은 컴퓨터 사용 리소스를 줄여 낮은 성능의 컴퓨터에서도 인공지능을 이용 할 수 있도록 만들어졌다. 또한 오픈 소스로 공개해서 일반인들도 비용 걱정 없이 사용 할 수 있다.

현재 대두되고 있는 'Ai가 직업을 헤친다'는 인류 사회의 걱정을 심화시킨 장본인이기도 하다.

라이선스가 존재하며 Stable Diffusion를 이용하여 서비스를 제공할 경우 반드시 명시해야 하며 파인 튜닝을 한 모델의 경우 명시된 용도 외에 사용하면 안 된다.

아키텍처[편집 | 원본 편집]

간단히 말해서 유저가 입력한 내용(TEXT)를 프로그램이 알아 들을 수 있는 언어로 치환하고(Token), 이를 받아들인 UNet은 토큰이 생성한 무작위의 노이즈(Noise)를 뭉쳐서(Denoise) 그림으로 내놓는다. 이 노이즈와 디노이즈 과정을 연달아 수행하면서 끝에는 유저가 입력한 내용의 그림을 만들어 주는 것이다. 여기서 그림에 색채나 효과를 주는 것이 vae의 역할인 것이다.

그동안의 인공지능은 넓으면 넓을수록 리소스를 과하게 그리고 누적시켜 이용해서 가정용 컴퓨터로는 어림도 없는 성능을 요구했다면 스테이블 디퓨전은 작은 공간에서 노이즈와 디노이즈를 처리하므로 리소스를 크게 먹지 않는다. 물론 리소스를 많이 제공 할 수록 내용을 그림으로 치환하는 속도는 빨라지고 그렇지 못한 컴퓨터에서는 느려지는 건 당연한 일.[1] 또한 그려야 하는 그림의 크기가 클 수록 당연히 필요한 리소스의 양은 늘어난다. 간단하게 말하면 256*256 크기의 그림과 1024*1024 크기의 그림을 그리는 속도는 4배까진 아니어도 분명 속도의 차이가 있다. 또 이런 크기 때문에 특정 모델이나 작업을 수행하는 방법 등에서 문제가 생겨서 없던 문제가 생기기도 한다.[2]

현재는 SD 1.5과 이를 발전시킨 SDXL의 2가지 체크포인트가 주로 쓰이고 있다. SD 1.5는 512*512 사이즈를 기반으로 하며, 학습자에 따라서 1024*1024 혹은 그 이상까지도 지원하지만, 이 경우 512*512로만 학습시킨 데이터와 충돌을 일으켜 그림이 이상해질 가능성이 있다. SDXL의 경우 1024*1024를 기반으로 하며, 그래픽 램을 많이 소비하는 만큼 학습자가 원하는 방향으로 작업물을 만들어낸다.

체크포인트의 변화[편집 | 원본 편집]

과거 모델(Model)이라 불리기도 하는 체크포인트(CheckPoint)는 스테이블 디퓨전 1버전부터 1.5버전까지가 주류였다. 이 버전을 발전시킨 2.0과 2.1버전이 나왔지만, 성능이 기대치에 미치치 못해 유저들에게 관심을 받지 못했다. 현 시점에서는 SD 버전은 1.5 버전을 애용하고 있다.

이후 SDXL이라는 매개 변수가 수억에서 수십억으로 늘어난 모델을 발표했다. 이에 따라 사용자의 문장 1문장으로도 원하는 바에 가까운 그림을 그려낼 수 있게 되었다. SD 1.5버전에서는 체크포인트에 학습된 데이터라고 해도, 엇나가는 경우가 발생하곤 했다. 하지만, SDXL은 거의 그렇지 않다. 하지만 문제는 처리해야할 매개 변수량이 수십억으로 늘어났으니, 그만큼 그래픽메모리나 시스템메모리를 점거한다는 것이다. 만약, 원하는 만큼 점거하지 못하면 그만큼 속도가 느려져 그래픽 램 6GB로는 그림 하나에 2분에서 많게는 4분까지 걸린다!

2024년 2월에는 SD 3.0 버전을 발표했다. 이는 개량형인 SDXL보다 매개변수가 대략 80억개를 지원하는 것으로, 문장 한 줄로도 원하는 바를 그려낼 수 있는 강력한 체크포인트가 될 것이다. 물론, 그만큼 높은 메모리와 고성능 그래픽카드를 요하게 되겠지만, SDXL도 작업을 최적화하는 기술들이 커뮤니티에 연구되고 출시되는 만큼, 해당 모델이 보급되기 시작하면 처리속도와 효율을 높이는 방법이 나올 수 있다.

그런데, SD3의 경우 비상업적 목적으로만 이용할 수 있다고 못을 박아버려 유저들의 차가운 시선을 받아야만 했다. 여기에 스테이블리티 AI 팀에서 빠져나온 직원들이 만든 모델인 FLUX.1을 선보였고, FLUX.1의 성능이 SD3을 압도할 수준이 되어버리자 부랴부랴 2024년 10월 22일, SD 3.5버전을 발표하고, 많은 호평을 받았다. FLUX.1은 로컬로 돌리기에는 상당한 리소스를 요구해 FLUX.1 수준과 비슷하면서도 성능 측면에서 우위를 선점하기 편한 SD3.5에 기대를 거는 유저들이 많아지고 있다.

사용법[편집 | 원본 편집]

위의 아키텍처의 방식대로 스테이블 디퓨전은 '모델'을 통해 사용자의 내용(TEXT)을 노이즈-디노이즈 과정을 통해 구현해낸다. 따라서 모델(Checkpoint)이 없다면 작동을 할 수 없다. 그렇다고 모델만 있어서도 구동이 불가능하다. 따라서 이 모델을 구해다가 models\stable-diffusion 폴더에 넣고 스테이블 디퓨전을 실행하고나서 나타나는 화면에서 왼쪽 상단에서 교체해주면 된다.

모델은 초기엔 2D만 지원하였으나 점차 게임 그래픽 3D, 실사 인물처럼 보이는 3D, 실사 인물을 표본으로 한 3D까지 넓어졌다. 또한 모델마다 학습한 화풍, 캐릭터, 자세, 풍경 등이 다르기에 사용 전 둘러보는 것도 좋다.

모델에 붙는 SD1 / SD2 / SDXL은 버전을 뜻한다. 그래픽 램이 8GB 미만인 경우 SD1 이나 SD2로 작업하는 것이 좋다. 그래픽 램이 8GB 이상인 경우, 최적화 세팅을 해주면 SDXL로도 작업 가능하다. 하지만, 작업 속도는 느릴 수 있으며 작업 중 게임이나 유튜브 4K 영상 시청 등이 제한될 가능성이 있다. 만약, SD1로 작업을 하겠다면 Lora나 textual inversion도 버전을 맞춰야한다. SDXL로 만들어진 Lora나 textual inversion은 SD1이나 SD2에 적용할 수는 있지만, 작업물이 반드시 훼손된다. 따라서, 버전에 맞추는 것이 좋다.

프롬프트(prompt)는 2가지로 내가 그려달라고 요청하고 싶은 내용을 적는 공간과 negative prompt라고 그림에서 이런 요소는 빼달라고 할 수 있는 공간이 있다. 네거티브 프롬프트는 보통 low quality, bad quality, ugly face 등과 같은 흔히 '저퀄'이라 부르는 요소들을 집어넣는다. 다만, 너무 과도하게 집어넣으면 모델에 따라서는 피카소의 우는 여인보다 기괴한 그림을 그려 줄 수 있으니 적당히 집어 넣으면 된다.

프롬프트가 비어 있으면 랜덤하게 그려준다. 이를테면 복장에 대한 이야기 없이 해변(beach)을 넣으면 수영복을 입은 사람을 그린다던지 사람 없이 해변 풍경만 그려준다. 허나 이것도 모델의 데이터에 따라 다르므로 반드시 그러한 것은 아니다. 예컨데 모델이 풍경만 학습했다면 인물을 그려달라고 해도 그려주지 않는 그런 것이다.

또한 특정 모델에서는 인식이 불가한 프롬프트가 있다. 학습량이 적어서 구현이 불가능한 속성이거나 캐릭터, 배경은 그려주지 않거나 그려준다 하여도 정확도가 떨어져 뭉게지게 되는데 이를 바로 잡는 것이 Lora와 Embedding이다.

임베딩은 textual inversion이라 부르기도 한다. Lora는 하나의 모델을 만들 듯이 필요한 데이터만 학습시켜서 모델과 함께 사용하는 개념이라 한다면[3] 임베딩은 백과사전에 포스트잇처럼 데이터 하나를 붙이는 것이다.[4] 둘 모두 필요할때만 프롬프트에 넣어서 불러 낼 수 있다. 또한 둘 모두 과하게 사용하면 그림이 뭉게진다.[5]

마지막으로 vae를 적용해야 하는데 모델(checkpoint)에 같이 vae가 포함되는 경우가 있고 그렇지 않아서 개별로 받아 적용해야 하는 경우가 있다. 파일은 models\vae에 넣어주면 된다. 다만 model과 적용법이 다른데 스테이블 디퓨전을 구동하고 나오는 페이지에서 settings에서 stable diffusion 항목의 vae 관련 옵션을 찾아 automatic이나 none으로 된 것을 설치한 vae로 바꿔주면 된다.

그럼에도 불구하고 그림을 뽑아낸 유저와 자신의 그림이 다른 경우가 있다. xformers, 네거티브 프롬프트, 임베딩, 랜덤시드(Random Seed) 등 여러 요인에 의해 같은 프롬프트라 하여도 그림이 좀 달라지는 경우는 있다.

로컬 구동 프로그램[편집 | 원본 편집]

구동하는 방법에는 구글 코랩 등을 이용해 시스템을 빌려서 구동하는 방법과 내 컴퓨터로 직접 돌리는 방법이 존재한다. 여기서는 직접 돌리는 방법을 서술한다.

  • WebUI : 가장 기본적인 구동 프로그램으로 여기서 포크나 튜닝에 따라 이름이 조금씩 달라진다. 가령, AMD도 사용 가능하게 바꾼 버전도 존재한다.
  • Diffusers : 파인튜닝을 할 때 가장 성능이 좋다고 정평이 난 프로그램. HuggingFace에서 지원하고 있다.
  • Draw Things : 스테이블 디퓨전을 Mac에서도 사용하게 만든 프로그램이다. WebUI의 기본을 모두 가져왔지만, 아쉽게도 WebUI의 확장 프로그램은 가져오지 못했다.
  • comfyui : 스테이블 디퓨전의 오픈소스를 이용한 가장 최적화된 프로그램이다. 사용 방법은 난해해보이고 어려워보이나, 터득하면 이만한 프로그램이 없다. 게다가 리소스 활용 측면에서도 상당히 효율적인데, WebUI에서는 Pony를 사용할때 기본 8GB를 요구하고, 다른 작업을 하고 있으면 뻗는 것이 다반사지만 comfyui는 자원을 세분화하여 분배하고 또 끌어 쓰기 때문에 모든 리소스를 작정하고 갈아넣으면서 돌리지 않는 이상, 적절히 타협하면서 구동하기 때문에 6GB의 비디오 메모리로도 충분히 돌릴 수 있다. 심지어는 6GB의 비디오 메모리에서 돌리려고 실행하면, 알아서 그보다 낮은 비디오 메모리를 선점하는데 그마저도 모두 쓰지 않고 적절히 사용하기에 이전 WebUI에서 아무 작업도 안하고 2분가량 걸렸던 그림작업이, 가벼운 게임이나 유튜브 시청을 하면서도 20초 후반 ~ 30초 후반이라는 타임으로 끊을 수 있다.

NVIDIA 이외의 하드웨어[편집 | 원본 편집]

CPU[편집 | 원본 편집]

CPU에서도 가능하다. LCM 버전의 로라를 사용해야 빠르다. 성능은 GPU에 비해 처참한 수준이라 그래픽카드를 장만하는 것이 좋다.

AMD GPU[편집 | 원본 편집]

webui

AMD GPU에서 webui 설치 방법 안되면 안되는거다. WebUI-DirectML 깃허브

AMD는 GPGPU 지원이 엔비디아보다 상대적으로 좋지 않다. AMD GPU에서 작동하는 stable-diffusion은 마이크로소프트의 directml 버전과 AMD의 ROCm(라데온 오픈소스 GPGPU 플랫폼) 버전[6]이 있다. directml은 윈도우에서만 지원하고 rocm에 비해 성능은 높은 편이다. rocm은 풀 성능 대비 50% 내외의 성능을 보인다. 구형 그래픽카드나 사양이 너무 낮은 그래픽카드는 AMD 측에서 지원하지 않아 각종 오류가 뜨면서 작동이 불가능하므로 유의해야 한다.

인텔 Arc GPU[편집 | 원본 편집]

애플 실리콘[편집 | 원본 편집]

외부링크[편집 | 원본 편집]

  • Civitai : 다양한 모델(체크포인트, 로라, 임베딩 등)을 공유하는 최대 사이트라고 볼 수 있다. 전 세계의 여러 모델들이 모인다고 봐도 무방하고, 커뮤니티에서만 공유되는 모델들을 제외하면 거진 있을 건 다 있는 곳이다. AI 그림을 구동할 수 있는 체계를 구성해놓은 다음, 체크포인트나 로라, 임베딩, VAE 등을 구경할 수 있고 원한다면 가입해서 사이트 내의 포인트로 직접 구동해볼 수 있다.
  • HuggingFace : Civitai와 함께 AI 계통에서 양대산맥을 구축하고 있는 사이트이다. 하지만, Civitai와 달리 접근성 측면에서는 떨어진다는 단점이 있다. 그래도 유저들이 직접 연구하며 만들어낸 모델이나 AI 정보, 프롬프트 등이 활발하게 교류되는 곳인 만큼 높은 품질의 모델이나 프롬프트, VAE 등을 발굴하기 쉽다.
  • Pixai : Civitai와 비슷한 공유 사이트이다. 초기에는 그래도 Civitai의 경쟁 사이트로 나름 인기가 있었으나, SD1.5에서 Pony 및 SDXL로 넘어가는 과도기 시절에 제대로 대처하지 못해 결국 인기가 저조해졌다.

각주

  1. 이를테면 1060 3GB에선 약 2분 걸리는 작업이 3060에선 5~12초 내로 도장 찍듯 빠르게 작업한다.
  2. 그래서 일부 모델은 최대 크기, 작업 방법, 추천 vae를 명시해두는 편이다.
  3. 이를테면 블루아카이브의 아스나가 학습되지 않은 모델에 Lora를 이용해 아스나를 그릴 수 있게 하는 식이다.
  4. 이를테면 특정 자세에 대한 데이터 학습량이 적어 뭉게지게 나오는 것을 선명하게 나오도록 유도하는 것이다.
  5. Lora는 특히 다른 Lora와 같이 쓰거나 그림체를 바꾸는 Lora와 함께 쓰면 뭉게질 수 있다.
  6. rocm은 torch만 다르다. xformers를 설치하려고 하면 패키지가 없다고 나온다.