Education*
Devops
Architecture
F/B End
B.Chain
Basic
Others
CLOSE
Search For:
Search
BY TAGS
linux
HTTP
golang
flutter
java
fintech
개발환경
kubernetes
network
Docker
devops
database
tutorial
cli
분산시스템
www
블록체인
AWS
system admin
bigdata
보안
금융
msa
mysql
redis
Linux command
dns
javascript
CICD
VPC
FILESYSTEM
S3
NGINX
TCP/IP
ZOOKEEPER
NOSQL
IAC
CLOUD
TERRAFORM
logging
IT용어
Kafka
docker-compose
Dart
스테이블 디퓨전 설치 및 사용해보기
Recommanded
Free
YOUTUBE Lecture:
<% selectedImage[1] %>
yundream
2024-09-22
2024-09-22
208
![Stable Diffusion](https://docs.google.com/drawings/d/1djBbAOb0_Zj1vLwTskvZPJJSIOe2WTAAwf8io-l_Uwg/pub?w=960&h=720) # Stable Diffusion **Stable Diffusion(이하 SD)** 는 텍스트에서 이미지를 생성하는(Text2Image) **딥러닝 기반 생성 모델**로 Latent Diffusion Model(LDM)의 한 유형이다. 이 메돌은 입력된 텍스트를 바탕으로 고해상도의 이미지를 생성한다. 간단한 텍스트 설명만으로 복잡하고 다양한 이미지 생성이 가능하며 주로 시각 예술, 디자인, 광고 등 창의적 도구로 사용한다. SD는 입력 이미지와 텍스트 사이의 상관관계를 학습하며, 아래와 같은 기능/특징을 제공한다. * Text to Image: 입력된 텍스트 설명에 따라 고해상도 이미지를 생성 * Inpainting: 이미지의 특정 부분을 수정하거나 채우는 이미지 편집 기능 * Image to Image: 기존 이미지를 입력하여 해당 이미지를 기반으로 변형된 새로운 이미지 생성 * 오픈 소스 및 커스터마이징 가능: 오픈소스코드로 개발자가 모델을 수정하고 새롭게 활용할 수 있다. # Stable Diffusion 실행 환경 * 운영체제: 윈도우즈, 리눅스, 맥OS 모두에서 사용가능하지만 일반적으로 **리눅스**를 최적의 환경으로 평가하고 있다. * 하드웨어: 대부분의 생성 모델이 그러하듯이 CPU와 GPU가 뒷받침되어야 원활한 작업이 가능하다 * **NVIDIA GPU**가 권장된다. 최소 6G 이상의 VRAM이 필요하며 10GB 이상의 VRAM을 권장한다. * NVIDIA RTX 3060, RTX 3090, RTX 4080 16G, RTX 4090 24G * Intel i7, AMD Ryzen 7등 **멀티코어 CPU**를 권장한다. * 최소 **16GB 이상의 시스템 메모리** 권장 * 최소 **10GB 이상의 디스크 공간** * 소프트웨어 * SD는 Python 환경에서 실행된다. **Python 3.8** 이상 * NVIDIA GPU 사용을 위한 **CUDA** 및 **cuDNN** 라이브러리 * SD는 **PyThorch 딥러닝 프레임워크**를 사용한다. * Hugging Face에서 제공하는 **diffusers** 라이브러리 * transformers, scipy, torchvision 등의 추가 Python 패키지 # 나의 환경 * 우분투 리눅스 24.04 * Python 3.9.20 * NVIDIA GeForce RTX 4060 Ti 16G * AMD Ryzen 5 5600X 6-Core 생성 AI를 하는데 가장 큰 문제는 GPU일 것이다. RTX 4090 24G를 사용하고 싶지만, 300만원 가까이 하는 넘사벽의 가격이라서 **학습 목적**으로는 너무 비싸다. 그런 점에서 RTX 4060 Ti 16G을 추천한다. 게이머들에게는 이도 저도 아닌 애매모호한 포지션의 GPU라고 까이고 있지만 **무조건 램이 높아야 하는** AI 엔지니어 입장에서는 최고의 가성비 모델이다. ### Python 버전.. Python 관련 애플리케이션을 설치하다 보면 Python 버전 문제를 한번씩 겪게 된다. 3.8, 3.9. 3.10 버전을 사용하자. 내 경우 3.12 를 사용하고 있었는데, 계속되는 실패로 꽤나 고생했다. 결국 python 3.9 버전을 설치하고 3.9 환경에서 설치 성공 했다. # gcc compiler 설치 및 빌드 환경 설정 CUDA Toolkit을 사용하기 위해서는 gcc compiler가 필요하다. gcc 컴파일러를 설치하자. ``` sudo apt update sudo apt install build-essential ``` gcc 버전을 확인한다. ``` gcc --version ``` CUDA 빌드를 위해서 Kernel header를 설치한다. ``` sudo apt-get install linux-headers-$(uname -r) ``` # NVIDIA GPU Driver Install **ubuntu-drivers-common**은 그래픽 드라이버를 포함한 다양한 하드웨어를 자동으로 감지하고 설치할 수 있도록 도와주는 유틸리티다. 이 패키지를 이용하면 아주 쉽게 NVIDIA GPU Driver를 설치 할 수 있다. ``` sudo apt-get update sudo apt-get install -y ubuntu-drivers-common ``` ubuntu-drivers list 명령을 이용해서 설치 가능한 드라이버 목록을 확인 할 수 있다. ``` $ sudo ubuntu-drivers list nvidia-driver-560, (kernel modules provided by nvidia-dkms-560) nvidia-driver-535, (kernel modules provided by linux-modules-nvidia-535-generic) nvidia-driver-535-server, (kernel modules provided by linux-modules-nvidia-535-server-generic) nvidia-driver-535-server-open, (kernel modules provided by linux-modules-nvidia-535-server-open-generic) nvidia-driver-560-open, (kernel modules provided by nvidia-dkms-560-open) nvidia-driver-545, (kernel modules provided by nvidia-dkms-545) nvidia-driver-545-open, (kernel modules provided by nvidia-dkms-545-open) ``` 원하는 드라이버를 설치하면 된다. 24년 8월 현재 최신버전은 560인데, 너무 최신 버전을 설치하면 오히려 문제가 될 것 같아서 550 버전을 설치했다. ``` sudo ubuntu-drivers install nvidia:550 ``` 추가적인 유틸리도 함께 설치하자. ``` sudo apt install nvidia-utils-550-server ``` nvidia-utils를 설치하면 **nvidia-settings**, **nvidia-smi** 같은 관리/모니터링 툴, CUDA/CuDNN과 같은 NVIDIA의 GPU 라이브러리, OpenGL, Vulkan 그래픽 API와 관련된 툴도 함께 설치해준다. nvidia-smi 명령을 실행해서 GPU 상태를 체크해보자. ``` nvidia-smi Sat Sep 21 00:31:17 2024 +-----------------------------------------------------------------------------------------+ | NVIDIA-SMI 550.107.02 Driver Version: 550.107.02 CUDA Version: 12.4 | |-----------------------------------------+------------------------+----------------------+ | GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. | | | | MIG M. | |=========================================+========================+======================| | 0 NVIDIA GeForce RTX 4060 Ti Off | 00000000:0B:00.0 On | N/A | | 0% 51C P8 20W / 165W | 2971MiB / 16380MiB | 8% Default | | | | N/A | +-----------------------------------------+------------------------+----------------------+ +-----------------------------------------------------------------------------------------+ | Processes: | | GPU GI CI PID Type Process name GPU Memory | | ID ID Usage | |=========================================================================================| | 0 N/A N/A 1830 G /usr/lib/xorg/Xorg 271MiB | | 0 N/A N/A 2567 G /usr/bin/kwalletd5 2MiB | | 0 N/A N/A 2837 G ...-gnu/libexec/xdg-desktop-portal-kde 2MiB | | 0 N/A N/A 2876 G /usr/bin/ksmserver 2MiB | ``` # WebUI 설치 SD는 모델이므로 모델을 그대로 사용하려면 여러 복잡한 과정을 거쳐야 한다. **Stable Diffusion WebUI** 는 Stable Diffusion을 기반으로 이미지 생성 작업을 쉽게 수행할 수 있도록 웹인터페이스를 제공하는 오픈소스 툴이다. 이 WebUI를 사용해서 Text-to-Image, Image-to-Image 등 다양한 이미지 생성 작업을 GUI 환경에서 편리하게 사용 할 수 있다. SD WebUI는 오픈소스로 [github](https://github.com/AUTOMATIC1111/stable-diffusion-webui) 에서 설치 할 수 있다. webui를 clone 한다. ``` git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git ``` webui 디렉토리로 이동한 후 virtualenv를 이용해서 python 3.9 버전을 사용하도록 환경 설정한다. ``` virtualenv venv --python=python3.9 source venv/bin/activate python --version Python 3.9.20 ``` 디렉토리에 있는 **webui.sh** 를 실행한다. ``` $ ./webui.sh --xformers ``` **xformers** 는 PyThorch를 기반으로 하는 라이브러리로 Transformer 모델의 메모리 최적화와 속도 향상을 위해서 사용한다. ``` ################################################################ Launching launch.py... ################################################################ glibc version is 2.39 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.9.20 (main, Sep 7 2024, 18:35:26) [GCC 13.2.0] Version: v1.10.1 Commit hash: 82a973c04367123ae98bd9abdf80d9eda9b910e2 Launching Web UI with arguments: --xformers Loading weights [f47e942ad4] from /home/yundream/myjob/stable-diffusion-webui/models/Stable-diffusion/realisticVisionV60B1_v51HyperVAE.safetensors Running on local URL: http://127.0.0.1:7860 ``` 실행 로그를 보면 127.0.0.1:7860 으로 webui 서버가 실행되는 것을 알 수 있다. 브라우저를 이용해서 접근하면 아래와 같은 화면을 볼 수 있다. ![WebUI](https://docs.google.com/drawings/d/1ZRMaspwWpG5sE3OjFnZwuTUA4rRPA-Sd3iYjbqhsozY/pub?w=960&h=720) 중요한 몇 가지 키워드들을 살펴보자. ##### 📌 Stable Diffusion checkpoint SD는 **이미지 생성 AI 모델** 로 이미지를 생성하기 위해서 사전학습된 정보를 가지고 있다. 하지만 특정 영역, 예를 들어서 만화, 사진 실사 와 같은 스타일이나 인물, 풍경, 도시를 더 잘 표현하기 위해서는 추가적인 훈련이 필요하다. 이렇게 각 목적에 훈련된 모델이 **체크포인트** 이다. 이러한 체크포인트는 **Hugging Face Model Hub**, **GitHub** 등에서 다운로드 받아서 사용할 수 있다. 이들 파일은 **.ckpt** 나 **.safetensors** 확장자를 가지며 보통 "models/Stable-diffusion" 디렉토리에 저장해서 사용하면 된다. 예를들어 동일한 프롬프트라고 하더라도 체크포인트 모델에 따라서 서로 다른 스타일의 이미지를 생성한다. ![CheckPoint 별 이미지 스타일](https://docs.google.com/drawings/d/1JalnSxYRvK8DY8ljD2TF9mP7fupRvbwSrOjCg0c_qlk/pub?w=960&h=720) ##### 📌 Prompt와 Nagative Prompt 프롬프트는 생성하고자 하는 이미지의 내용을 설명하는 텍스트다. 사용자가 원하는 이미지의 주체, 스타일, 요소 등을 구체적으로 표현한다. > A beautiful woman wearing a blue denim jacket and jeans, standing in a sunny park, smiling softly 네거티브 프롬프트는 생성을 원하지 않는 요소나 특성을 설명하는 텍스타다. 원치 않는 스타일, 특징, 배경 등을 명시하여 생성된 이미지의 품질을 향상시키는데 도움을 준다. > no distorted features, no cartoonish style, no awkward poses # Checkpoint 다운로드 및 테스트 SDXL 1.0은 실사 이미지를 생성하는데 가장 최적화된 모델이라고 한다. 실제 어떤 체크포인트를 사용하는게 좋냐라고 주변에 물어봐도 SDXL을 추천하는 경우가 많은 것 같다. 아래 링크에서 체크포인트(약 6G)를 다운로드 한 다음에 "models/models/Stable-diffusion" 디렉토리에 복사한다. * [stable diffusion xl base 다운로드](https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0/blob/main/sd_xl_base_1.0.safetensors) ![sdxl](https://docs.google.com/drawings/d/1tLzP7PqZ7TFIJHJwDy0NMWxX9CBGOT12tTHRY_Nmv-4/pub?w=960&h=720) 사용한 프롬프트는 아래와 같다. > masterpiece, best quality, girl, collarbone, wavy hair, looking at viewer, blurry foreground, upper body, necklace, contemporary, plain pants, intricate, print, pattern, ponytail, freckles, red hair, dappled sunlight, smile, happy ![sdxl 생성이미지](https://docs.google.com/drawings/d/18EphFZs7y5_GNApT5KCsP83oJaAjsRjdFW223EVIqsI/pub?w=960&h=720) > johnny depp photo portrait, film noir style, monochrome, high contrast, dramatic shadows, 1940s style, mysterious, cinematic ![sdxl 생성이미지](https://docs.google.com/drawings/d/1hVvGhMqUEixSOHJduJ9pZJP3IMJSls-O5s5YI2Uprt8/pub?w=960&h=720) > happy indian girl, portrait photography, beautiful, morning sunlight, smooth light, shot on kodak portra 200, film grain, nostalgic mood ![](https://docs.google.com/drawings/d/14eN5hF7Yj9ZTja3RsrnUcm67Uj2atv8ZO1nsk_jeRd0/pub?w=960&h=720) > beautiful woman wearing fantastic hand-dyed cotton clothes, embellished beaded feather decorative fringe knots, colorful pigtail , subtropical flowers and plants, symmetrical face, intricate, elegant, highly detailed, 8k, digital painting,trending on pinterest, harper’s bazaar, concept, art, sharp focus, illustration, Tom Bagshaw, Lawrence Alma-Tadema, Alphonse Muchaugly, deformed ![](https://docs.google.com/drawings/d/1tiPZy0q1GIoR026TQIrwNZZx-vIMRWPIvnvZiaqtO_I/pub?w=690&h=694) > a woman with black armored uniform, futuristic, giant robot, inspired by Krenz Cushart, neoism, kawacy, wlop, gits anime ![sdxl 생성이미지](https://docs.google.com/drawings/d/1DX8hLlBf1vMaYSRVRh1pLW0RLIbeC09owPqU3Q13s-Y/pub?w=960&h=720) **Prompt** > anime artwork a girl looking at the sea, dramatic, anime style, key visual, vibrant, studio anime, highly detailed **Nagative Prompt** > photo, deformed, black and white, realism, disfigured, low contrast ![](https://docs.google.com/drawings/d/14Vb_UKIg1SIHPudX_Wn5NBunBUwXhB-8zgpuk8jfUKE/pub?w=960&h=720) **Prompt** > 16-bit pixel art, a cozy cafe side view, a beautiful day **Nagative Prompt** > sloppy, messy, blurry, noisy, highly detailed, ultra textured, photo, realistic ![생성이미지](https://docs.google.com/drawings/d/1rJkjA8nofXsjS_cxrhj7Ui1EVofkmzaEtxRTDkLAuKk/pub?w=960&h=720) > Cityscape in photorealistic style, detailed buildings, and lifelike lighting. ![SDXL 생성이미지](https://docs.google.com/drawings/d/17JidYJU4QtinMIEMSq7IDAOmHReVnb9rRKAkV6yv3pQ/pub?w=960&h=720) > City park in impressionist style, vibrant colors, and playful brushstrokes. ![SDXL 생성이미지](https://docs.google.com/drawings/d/1bF0OORI9niOyFDd_Mn7H-J8vDsJaU3hEdMlaqfnYsK4/pub?w=960&h=720) > Busy city market in comic book style, exaggerated features, and bold lines. ![SDXL 생성 이미지](https://docs.google.com/drawings/d/1yYmRxuBfMkbWx5wQ5yyrGr7FuZSF2ERUXksH8IknyfY/pub?w=960&h=720) # 정리 SD를 이용하면 수십초 이내에 이미지를 출력 할 수 있다. 블로그, 유튜브, 인스타그램 등 개인 매체에 이미지를 제공하기 위한 목적으로 충분히 사용 할 수 있는 수준으로 보인다. SD의 향후 과제라면 상업적인 목적으로 사용 사례를 만들 수 있는 수준으로 출력 품질을 높이는 것이 될 것이다. 이-커머스를 예로 들자면 제품의 배경 이미지를 효과적으로 만들기 위해서 사용 할 수 있을 것이다. 하지만 재판매용(resale) 시장에서는 사용 할 수 있겠으나, 본격적으로 브랜드와 제품의 가치를 이미지로 표현하기 위위해서는 사용하기 쉽지 않다. 품질을 사용자 눈높이 수준까지 끌어올리기가 쉽지 않을 것이다. 시간과 노력을 들여서 품질을 끌어올릴 수 있겠으나 "그럴거면 생성 AI 기능을 가지고 있는 포토샵"을 사용하는게 더 나을 것이다. SD를 직접 테스트해보면 이게 어떤 의미인지를 이해할 수 있을 것이다. 그래도 개인 및 중소기업에서의 컨텐츠 제작, 컨셉아트, 초기 디자인 모델링, 초기 캐릭터 디자인 영역에서는 충분히 사용 할 수 있을 것이다. 또한 워낙 기술이 빠르게 발전하고 있어서 조만간 프러덕트 목적으로 사용 할 수 있는 수준이 될 것으로 기대하고 있다. # 참고 * [The Best 25 Stable Diffusion Prompts](https://openart.ai/blog/post/stable-diffusion-prompts-for-city) * [Top 40 prompts for stable diffusion xl](https://medium.com/phygital/top-40-useful-prompts-for-stable-diffusion-xl-008c03dd0557)
Recent Posts
GPT를 이용한 Reranker 테스트
5분만에 만들어보는 Streamlit 챗봇
Let's encrypt로 SSL 인증서 관리하기
Upscayl을 이용한 이미지 업스케일링
스테이블 디퓨전 설치 및 사용해보기
Elasticsearch 설치
AI / LLM에 대한 친절한 소개
SLA 다운타임 계산기
Docker로 GitLab 설치하기
Ubuntu Linux에 NVIDIA 드라이버 설치
Archive Posts
Tags
AI
Copyrights © -
Joinc
, All Rights Reserved.
Inherited From -
Yundream
Rebranded By -
Joonphil
Recent Posts
Archive Posts
Tags