우분투 클라우드 서버에서 WebUI로 Stable Diffusion 기반 Text-to-Image (txt2img) 모델을 사용하는 방법에 대해 알아보겠습니다. 기존에 stable diffusion 모델을 이용해서 그림을 생성하기 위해서는 다른 사람이 생성된 모델을 다운로드받아서, python 코드를 다뤄야 했었는데요, 이런 불편함을 우리에게 친숙한 UI 형태로 다룰 수 있는 WebUI도 코드가 공유된 이후로 더 쉽게 그림을 그릴 수 있게 되었다고 생각합니다. 참고로 WebUI는 PyThon 기반이기 때문에, PyThon을 먼저 공부하고 싶으신 분들은 지금 바로 관련 강의나 책을 확인해보세요.
WebUI로 Stable Diffusion 기반 Text-to-Image 모델 사용하기 전 준비사항
본격적으로 글을 작성하기 앞서서, 준비물은 GPU가 장착된 우분투 클라우드 서버, 서버에 접속하기 위한 putty나 XShell 같은 프로그램이 필요합니다. 어떤 회사의 클라우드 서버를 사용해야 할지, 그리고 어느 정도의 비용이 발생할지를 미리 확인해보시기를 바랍니다. 참고로 저는 우분투 OS로 20.04.5 LTS 버전을 사용했습니다.
클라우드 서버로 WebUI를 사용하기 위해서는, 클라우드 서버의 포트 (port)를 하나 더 오픈해야 합니다. 기본적으로 putty를 통해 서버에 접속하기 위한 ssh 전용 포트 22번은 열려있지만, 이걸 통해서 WebUI에 접속하실 수 없으십니다. ssh나 포트처럼 네트워크와 관련된 용어가 생소하시다면, 컴퓨터의 네트워크 관련 강의를 확인해보세요.
우분투 클라우드 서버에 WebUI 설치하는 방법
추가 포트까지 오픈된 우분투 서버가 준비되셨다면, 접속 후 아래의 명령어를 입력해서 패키지를 설치합니다.
# 관리자 (root) 계정인 경우
apt install wget git python3 python3-venv
# 관리자 권한이 있는 계정인 경우
sudo apt install wget git python3 python3-venv
이후, stable-diffusion-webui를 github에서 다운로드 받고, 추가 패키지 설치까지 진행하기 위해 아래의 명령어를 실행합니다. 이 명령어를 실행하시면, /home/[생성된 id]/ 경로 밑에 다운로드 받은 디렉토리가 생성됩니다.
bash <(wget -qO- https://raw.githubusercontent.com/AUTOMATIC1111/stable-diffusion-webui/master/webui.sh)
이때, 관리자 계정인 root로 진행하신 분들은 아래 명령어를 실행하면 "ERROR: This script must not be launched as root, aborting"이라는 오류를 보실 텐데요, 관리자 계정이 아닌 다른 계정을 adduser 명령어를 통해 생성해야 합니다. adduser와 같은 기본적인 리눅스 명령어 또는 리눅스 계열 OS에 대해서 좀 더 공부하고 싶으신 분들은 구글링이나 youtube와 같은 인터넷 강의를 참조하셔도 좋습니다.
조금금 전 명령어를 입력하면 아래와 같이, 다양한 패키지들이 설치되는 것을 확인하실 수 있습니다. 그런데 마지막에 localhost에 접근할 수 없기 때문에 share 옵션을 사용하라는 에러가 발생했는데요, WebUI를 실행시킬 때 큰 문제가 없는 부분이기 때문에, 바로 밑의 글에서 WebUI를 실행할 때 제가 사용했던 옵션을 알려드리겠습니다.
################################################################
Install script for stable-diffusion + Web UI
Tested on Debian 11 (Bullseye)
################################################################
################################################################
Running on dong user
################################################################
################################################################
Clone stable-diffusion-webui
################################################################
Cloning into 'stable-diffusion-webui'...
remote: Enumerating objects: 16434, done.
remote: Total 16434 (delta 0), reused 0 (delta 0), pack-reused 16434
Receiving objects: 100% (16434/16434), 27.51 MiB | 22.57 MiB/s, done.
Resolving deltas: 100% (11495/11495), done.
################################################################
Create and activate python venv
################################################################
################################################################
Launching launch.py...
################################################################
Python 3.8.10 (default, Nov 14 2022, 12:59:47)
[GCC 9.4.0]
Commit hash: 0cc0ee1bcb4c24a8c9715f66cede06601bfc00c8
Installing torch and torchvision
Looking in indexes: https://pypi.org/simple, https://download.pytorch.org/whl/cu117
Collecting torch==1.13.1+cu117
Downloading https://download.pytorch.org/whl/cu117/torch-1.13.1%2Bcu117-cp38-cp38-linux_x86_64.whl (1801.8 MB)
|████████████████████████████████| 1801.8 MB 2.2 kB/s
Collecting torchvision==0.14.1+cu117
Downloading https://download.pytorch.org/whl/cu117/torchvision-0.14.1%2Bcu117-cp38-cp38-linux_x86_64.whl (24.3 MB)
|████████████████████████████████| 24.3 MB 23.0 MB/s
Collecting typing-extensions
Downloading typing_extensions-4.5.0-py3-none-any.whl (27 kB)
Collecting requests
Downloading requests-2.28.2-py3-none-any.whl (62 kB)
|████████████████████████████████| 62 kB 6.0 MB/s
Collecting pillow!=8.3.*,>=5.3.0
Downloading Pillow-9.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.3 MB)
|████████████████████████████████| 3.3 MB 52.4 MB/s
Collecting numpy
Downloading numpy-1.24.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (17.3 MB)
|████████████████████████████████| 17.3 MB 134.1 MB/s
Collecting idna<4,>=2.5
Downloading idna-3.4-py3-none-any.whl (61 kB)
|████████████████████████████████| 61 kB 940 kB/s
Collecting certifi>=2017.4.17
Downloading certifi-2022.12.7-py3-none-any.whl (155 kB)
|████████████████████████████████| 155 kB 136.0 MB/s
Collecting charset-normalizer<4,>=2
Downloading charset_normalizer-3.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (195 kB)
|████████████████████████████████| 195 kB 133.5 MB/s
Collecting urllib3<1.27,>=1.21.1
Downloading urllib3-1.26.14-py2.py3-none-any.whl (140 kB)
|████████████████████████████████| 140 kB 126.6 MB/s
Installing collected packages: typing-extensions, torch, idna, certifi, charset-normalizer, urllib3, requests, pillow, numpy, torchvision
Successfully installed certifi-2022.12.7 charset-normalizer-3.0.1 idna-3.4 numpy-1.24.2 pillow-9.4.0 requests-2.28.2 torch-1.13.1+cu117 torchvision-0.14.1+cu117 typing-extensions-4.5.0 urllib3-1.26.14
Installing gfpgan
Installing clip
Installing open_clip
Cloning Stable Diffusion into repositories/stable-diffusion-stability-ai...
Cloning Taming Transformers into repositories/taming-transformers...
Cloning K-diffusion into repositories/k-diffusion...
Cloning CodeFormer into repositories/CodeFormer...
Cloning BLIP into repositories/BLIP...
Installing requirements for CodeFormer
Installing requirements for Web UI
Launching Web UI with arguments:
No module 'xformers'. Proceeding without it.
Downloading: "https://huggingface.co/runwayml/stable-diffusion-v1-5/resolve/main/v1-5-pruned-emaonly.safetensors" to /home/dong/stable-diffusion-webui/models/Stable-diffusion/v1-5-pruned-emaonly.safetensors
100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████| 3.97G/3.97G [00:45<00:00, 94.0MB/s]
Calculating sha256 for /home/dong/stable-diffusion-webui/models/Stable-diffusion/v1-5-pruned-emaonly.safetensors: 6ce0161689b3853acaa03779ec93eafe75a02f4ced659bee03f50797806fa2fa
Loading weights [6ce0161689] from /home/dong/stable-diffusion-webui/models/Stable-diffusion/v1-5-pruned-emaonly.safetensors
Creating model from config: /home/dong/stable-diffusion-webui/configs/v1-inference.yaml
LatentDiffusion: Running in eps-prediction mode
DiffusionWrapper has 859.52 M params.
Downloading (…)olve/main/vocab.json: 100%|████████████████████████████████████████████████████████████████████████████| 961k/961k [00:01<00:00, 814kB/s]
Downloading (…)olve/main/merges.txt: 100%|████████████████████████████████████████████████████████████████████████████| 525k/525k [00:00<00:00, 568kB/s]
Downloading (…)cial_tokens_map.json: 100%|██████████████████████████████████████████████████████████████████████████████| 389/389 [00:00<00:00, 177kB/s]
Downloading (…)okenizer_config.json: 100%|██████████████████████████████████████████████████████████████████████████████| 905/905 [00:00<00:00, 348kB/s]
Downloading (…)lve/main/config.json: 100%|█████████████████████████████████████████████████████████████████████████| 4.52k/4.52k [00:00<00:00, 1.12MB/s]
Applying cross attention optimization (Doggettx).
Textual inversion embeddings loaded(0):
Model loaded in 27.3s (calculate hash: 9.5s, load config: 0.2s, create model: 10.7s, apply weights to model: 1.5s, apply half(): 0.8s, load VAE: 3.0s, move model to device: 1.5s).
Traceback (most recent call last):
File "launch.py", line 361, in <module>
start()
File "launch.py", line 356, in start
webui.webui()
File "/home/dong/stable-diffusion-webui/webui.py", line 218, in webui
app, local_url, share_url = shared.demo.launch(
File "/home/dong/stable-diffusion-webui/venv/lib/python3.8/site-packages/gradio/blocks.py", line 1418, in launch
raise ValueError(
ValueError: When localhost is not accessible, a shareable link must be created. Please set share=True.
우분투 클라우드 서버에 설치된 WebUI를 실행시키는 방법
stable-diffusion-webui 라는 이름으로 생성된 디렉토리 안으로 들어가 보면, webui.sh 이라는 쉘 프로그램이 있습니다. 이제 이 프로그램을 실행시킨 다음, 웹 브라우저로 접속하면 되는데요, 아래의 옵션들을 넣어서 실행하면 됩니다. 우선 port 옵션은 클라우드 서버를 생성할 때 오픈했던 여분의 포트값을 넣으면 됩니다. 저는 10000으로 설정해두었습니다. 그리고 server-name 옵션에 hostname을 넣으면 됩니다. hostname은 커멘드 명령어로 hostname을 입력하면 바로 알 수 있습니다. 그리고 조금 전 오류의 원인이었던 share를 옵션으로 넣어줍니다. enable-insecure-extension-access 옵션은 WebUI에서 제공하는 다양한 extension이 있는데요, WebUI 상에서 사용하고 싶은 extension의 install 버튼을 눌렀을 때, 클라우드 서버에 코드 다운로드 및 설치까지 진행할 수 있는 옵션입니다.
./webui.sh --port 10000 --server-name 'hostname을 여기에 입력 (따옴표 포함)' --share --enable-insecure-extension-access
실행하면 아래와 같은 메시지를 확인하실 수 있는데요, "Running on local URL"이라는 마지막 메시지까지 확인되면 Chrome이나 edge 같은 웹 브라우저로 접속하실 수 있습니다.
################################################################
Install script for stable-diffusion + Web UI
Tested on Debian 11 (Bullseye)
################################################################
################################################################
Running on dong user
################################################################
################################################################
Repo already cloned, using it as install directory
################################################################
################################################################
Create and activate python venv
################################################################
################################################################
Launching launch.py...
################################################################
Python 3.8.10 (default, Nov 14 2022, 12:59:47)
[GCC 9.4.0]
Commit hash: 0cc0ee1bcb4c24a8c9715f66cede06601bfc00c8
Installing requirements for Web UI
Launching Web UI with arguments: --port 10000 --server-name [hostname 정보] --share --enable-insecure-extension-access
No module 'xformers'. Proceeding without it.
Loading weights [6ce0161689] from /home/dong/stable-diffusion-webui/models/Stable-diffusion/v1-5-pruned-emaonly.safetensors
Creating model from config: /home/dong/stable-diffusion-webui/configs/v1-inference.yaml
LatentDiffusion: Running in eps-prediction mode
DiffusionWrapper has 859.52 M params.
Applying cross attention optimization (Doggettx).
Textual inversion embeddings loaded(0):
Model loaded in 7.1s (create model: 0.6s, apply weights to model: 1.2s, apply half(): 0.6s, load VAE: 3.5s, move model to device: 1.1s).
Running on local URL: http://[클라우드 서버 ip 주소]:[오픈한 포트]
웹브라우저로 우분투 클라우드 서버에서 실행된 WebUI에 접속하는 방법
웹브라우저로 접속할 때, http://[클라우드 서버 IP 주소]:[오픈한 포트]인데요, 아래 [사진 1]과 같이 접속되는 것을 확인할 수 있었습니다.
[사진 1]에서 제가 사용한 stable diffusion 모델은 디폴트로 제공되는 모델을 사용했는데요, 현재 다양한 모델들이 공개되어 있어서, 사용하고 싶으신 모델을 적용해보시면 좋을 것 같습니다. 모델에 대한 정보는 구글링이나 youtube를 통해서 확인해보실 수 있습니다.
'IT' 카테고리의 다른 글
파이썬 텔레그램 봇 (python-telegram-bot) v20 이상에서 텍스트, 이미지, HTML 파일 전송하는 코드 (0) | 2023.03.09 |
---|---|
아마존 Lightsail 인스턴스에서 매직스플릿만 사용했을 때의 첫 결제 금액 확인 (0) | 2023.03.02 |
구글 드라이브에 Academic Torrents의 토렌트 파일 다운로드 받는 방법 feat. 구글 코랩 (Colab) (0) | 2022.12.31 |
키움증권에 USB에 저장된 타기관 공인인증서 PC에서 등록하는 방법 (0) | 2022.12.30 |
[프로그램 리뷰] 엔화로 일본 주식 매매를 위한 키움증권 영웅문 Global (feat. 키움증권 엔화 환전 수수료 우대 중단 사태) (0) | 2022.12.29 |
댓글