nVidia Geforce GT 1030 (2GB VRAM) 으로 Stable Diffusion WebUI 사용하기
※ 여러가지 시행착오끝에 아래와 같은 512x768 이미지를 GT 1030 에서 2분대에 생성할 수 있도록 했다. 작년 이맘때 생성한게 10분 대였다는걸 감안하면 많은 발전이다. 그만큼 기술이 늘었다는 셈이다. 이 방법은 아마도 2G VRAM 을 가진 모든 nVidia 계열에서 사용할 수 있을거 같다.
※ 하는 방법을 적어 놓는다.
1. Ubuntu 22.04 를 설치하고 nVidia 그래픽 카드 드라이버를 설치한다. 이 글을 쓰는 시점에서 드라이버 버전은 550.67 이다. 윈도에서는 이 방법이 되지 않는다.
2. OS 가 띄워진 후에도 VRAM 2GB 를 온전히 비워질 수 있도록 한다. 필자의 경우 모니터 연결은 내장 그래픽을 사용했다.
3. Stable Diffusion WebUI 를 설치하고 실행한다. 옵션은 "--medvram --listen --xformers" 을 준다.
glibc version is 2.35 Check TCMalloc: libtcmalloc_minimal.so.4 libtcmalloc_minimal.so.4 is linked with libc.so,execute LD_PRELOAD=/lib/x86_64-linux-gnu/libtcmalloc_minimal.so.4 Python 3.10.12 (main, Nov 20 2023, 15:14:05) [GCC 11.4.0] Version: v1.9.0 Commit hash: adadb4e3c7382bf3e4f7519126cd6c70f4f8557b Launching Web UI with arguments: --medvram --listen --xformers Loading weights [********] from Model.safetensors Running on local URL: http://0.0.0.0:7860
To create a public link, set `share=True` in `launch()`. Startup time: 7.1s (prepare environment: 1.4s, import torch: 2.4s, import gradio: 0.6s, setup paths: 1.2s, import ldm: 0.1s, initialize shared: 0.1s, other imports: 0.3s, list SD models: 0.1s, load scripts: 0.4s, create ui: 0.4s). Creating model from config: /home/windy/stable-diffusion-webui/configs/v1-inference.yaml Applying attention optimization: xformers... done. Model loaded in 1.6s (load weights from disk: 0.5s, create model: 0.3s, apply weights to model: 0.5s, calculate empty prompt: 0.2s).
4. 이미지를 생성한다. 아래 화면 참조하자. 프롬프트는 75 토큰 이하, 네거티브 프롬프트가 반드시 75토큰이상 150토큰 이하이어야 한다. (왜그래야 하는지는 모르겠다)
4-1. 아래와 같이 화면에 표시된다.
100%|████████████████████████████████████████████████████████| 24/24 [02:33<00:00, 6.40s/it] Total progress: 100%|██████████████████████████████████████████████| 24/24 [02:36<00:00, 6.54s/it] Total progress: 100%|██████████████████████████████████████████████| 24/24 [02:36<00:00, 6.36s/it]
+-----------------------------------------------------------------------------------------+ | Processes: | | GPU GI CI PID Type Process name GPU Memory | | ID ID Usage | |=========================================================================================| | 0 N/A N/A 5895 C python3 1952MiB | +-----------------------------------------------------------------------------------------+
1 번은 최소 8억개인 SD1.5 와 유사하다고 생각되는데, SD1.5와 호환될지는 모르겠네요. 2 번은 transformer 를 diffusion 모델과 합했다는 의미인거 같네요. 최근에 나온 비디오 생성 AI인 Sora 가 이렇게 했다죠. 이렇게 하면 초 고해상도의 이미지를 생성할 수 있을걸로 생각합니다. 3 번은 Continuous Normalizing Flows (CNFs)를 사용했다는건데 잘 모르겠습니다.
그외에 이상한 그림 생성 못하게 한다는거 같습니다만, SDXL 을 보면 트레이닝을 처음부터 다시 해버리면 그것도 안되는거라서요. 어쨌든 기본 레벨에서는 생성 안되게 한다는거 같고 이렇게 되면 SD3 이미지 생성 서비스 만들기 쉬워지겠네요. (프롬프트 제한 안걸어도 되니까 말이죠)
또한 여러개의 묘사를 모아서 정의한것도 잘 인식한다고 합니다. 현재 SD 에서는 아직까지 1girl 을 주로 사용하는데요, 2girls 프롬프트를 주어봤자 비슷한 그림이 나오기 때문입니다만, SD3 부터는 이게 하나하나 묘사를 하면 제대로 생성한다는거 같네요.
AI 에서 생성할 수 있는 드레스를 꼽자면 단연 이런 드레스를 꼽는다. 실존하기 어려운, 실제로 만들기 어려운 드레스다.
드레스 이미지 생성할대 가장 신경쓰는게 바로 손가락이다. 아직 잘 못 그리기 때문. 나머지 빛이라던가 얼굴 형태는 어떻게든 간접적으로 되긴 하는데, 손은 아직 자연스럽게 안된다. img2img 를 계속 쓸 수 있는것도 아니고 말이다. 다른 익스텐션을 사용해봐도 아직 마땅치 않다.
최초로 얼굴을 바꾸는 LoRA 를 사용하지 않고 올려본다. 그만큼 체크포인트가 얼굴 표현이 잘 되었다는 이야기도 하다.
프롬프트의 주제는 Floral, Lily, Tiara, Cyan 이다. 나름 잘 나와서 올려본다.