Ubuntu 22.04에서 Stable Diffusion 환경 세팅하기

Seonuk Kim·2023년 8월 24일
1

Image Generative AI

목록 보기
1/2
post-thumbnail

Graphic User Interface

Stable Diffusion으로 이미지 생성을 원활하게 하기 위해서는 많은 컴퓨팅 자원이 필요합니다. 특히, GPU의 VRAM이 크면 클수록 좋고, SDXL 구동을 위해서는 시스템 메모리(RAM)가 최소 16 GB이 되어야 합니다. 또한, 파인튜닝까지 하신다면 모델(checkpoint)와 LoRA를 저장하기 위해 넓은 저장용량을 확보하시는 것이 좋습니다.

이미지 생성

파인튜닝

로컬 환경을 구축하기 어려운 상황이라, AWS EC2Azure에서 클라우드 서버를 파서 사용하고 있고, Ubuntu 22.04 환경에서 필요한 세팅을 마친 후, 위와 같은 GUI(Graphic User Interface)를 활용해 이미지 생성과 파인튜닝을 진행하고 있습니다. 이 글은 AWS EC2의 g5.2xlarge 인스턴스를 기준으로 작성되었습니다.

NVIDIA Graphic

Ubuntu 기본 설정

일단 Ubuntu를 사용하므로 다음과 같이 설정을 해줍시다.

sudo apt-get update
sudo apt install -y ubuntu-drivers-common

잠깐 이야기가 옆으로 세지만, 파인튜닝을 위해서 Amazon Linux 2는 사용하시면 안됩니다. 해당 OS에서는 파인튜닝을 위해 사용되는 GUI인 kohys_ss를 설치하는 과정에서 맞는 버전의 tkinter를 설치할 수 없기 때문입니다. 따라서 Linux 환경에서 구동하시고자 하신다면, Ubuntu 22.04를 사용하셔야 합니다.

NVIDIA Driver & CUDA 완전 삭제 (optional)

재설치가 아니라면 넘어가셔도 됩니다.

sudo apt-get purge *nvidia* cuda* "*cublas*" "nsight*" 
sudo apt-get autoremove
sudo apt-get autoclean
sudo rm -rf /usr/local/cuda*
sudo nvidia-uninstall

제대로 삭제가 됐는지 확인을 해봅시다.

nvidia-smi
nvcc -V

먼저 위의 명령어를 쳤을 때 아무것도 나오지 않아야 합니다.

sudo dpkg -l | grep nvidia
sudo dpkg -l | grep cuda

위의 명령어도 동일하게 아무것도 나오지 않는다면 제대로 다 삭제가 된 것이고, 위의 명령어에서 무언가가 나온다면 아래 명령어로 모두 지워줍시다.

sudo apt-get remove --purge 지울이름

중간에 설치를 멈추거나 설치된 Driver가 여러개여서 충돌이 발생할 때, 위의 명령어를 활용해서 다 지워주신 후 다시 설치해야 합니다.

구성 확인 및 NVIDIA Driver 설치

CUDA를 사용 가능한 GPU인지 확인하기

lspci | grep -i nvidia

distribution과 relase nubmer 확인

uname -m && cat /etc/*release

gcc compiler 확인

CUDA Toolkit을 사용하기 위해서는 gcc compiler가 필요합니다. 아래 명령어를 통해 이미 설치되어 있는지 확인해봅시다.

gcc --version

만약 없다면 아래 명령어로 development tools를 설치합니다.

sudo apt update
sudo apt install build-essential

kernel version 확인 및 올바른 kernel headers 설치

uname -r
sudo apt-get install linux-headers-$(uname -r)

그래픽 카드 확인

sudo lshw -numeric -C display

설치할 수 있는 NVIDIA Driver 버전 확인 및 설치

sudo ubuntu-drivers devices

CUDA Toolkit 버전에 따라서 최소 권장 버전이 존재합니다. 아래 링크에서 확인할 수 있습니다.
https://docs.nvidia.com/deploy/cuda-compatibility

CUDA ToolkitLinux x86_64 Minimum Required Driver VersionWindows Minimum Required Driver Version
CUDA 12.x>= 525.60.13>= 527.41
CUDA 11.x>= 450.80.02>= 452.39

오른쪽에 recommended라고 적혀있는 nvidia-driver-535를 아래 명령어를 통해 설치하도록 하겠습니다. CUDA를 설치할 때, 함께 설치할 수도 있지만, 개인적으로 recommended된 버전과 달라지거나 CUDA Toolkit 최소 권장 버전 이하일 때도 종종 발생하기에, 저는 NVIDIA Driver를 recommended 버전으로 먼저 설치한 후, CUDA 설치 시에 Driver 설치는 체크를 해제해주는 것을 선호합니다.

sudo apt install nvidia-driver-535

이후 아래 명령으로 reboot를 해줍시다.

sudo reboot now

reboot 후 아래 명령이 입력 시 제대로 출력되면 성공적으로 NVIDIA Driver 설치가 완료된 것입니다.

nvidia-smi

CUDA 11.8 설치

wget https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda_11.8.0_520.61.05_linux.run
sudo sh cuda_11.8.0_520.61.05_linux.run

이후, 차례대로

  1. Continue
  2. accept 입력
  3. Driver 체크 해제 (X자 해제)
  4. Install

을 해줍시다.

설치가 완료됐으면 경로 지정을 위해 다음을 터미널에 순서대로 입력합니다.

sudo nano ~/.bashrc

제일 아랫줄에 아래 두 줄을 추가합시다.

export PATH="/usr/local/cuda/bin:$PATH"
export LD_LIBRARY_PATH="/usr/local/cuda/lib64:$LD_LIBRARY_PATH"

수정된 bashrc 적용합시다.

source ~/.bashrc

아래 명령이 입력 시 제대로 출력되면 성공적으로 CUDA가 설치된 것입니다.

nvcc -V

cuDNN 8.7.0 설치

https://developer.nvidia.com/rdp/cudnn-archive에서 로그인한 다음, 버전에 맞는 cuDNN을 다운로드 받습니다. 저는 CUDA 11.x 버전에 맞는 cudnn-linux-x86_64-8.7.0.84_cuda11-archive.tar.xz을 다운로드 받았습니다. 그리고 다운로드 받은 경로에서 압축을 해제한 후, 필요없는 파일은 삭제해줍니다.

tar -xvf cudnn-linux-x86_64-8.7.0.84_cuda11-archive.tar.xz
rm -rf cudnn-linux-x86_64-8.7.0.84_cuda11-archive.tar.xz

압축이 풀린 파일들을 아래 명령어를 입력하여 옮기고 및 권한 설정을 해줍시다.

sudo mv cudnn-linux-x86_64-8.7.0.84_cuda11-archive/include/cudnn*.h /usr/local/cuda/include
sudo mv cudnn-linux-x86_64-8.7.0.84_cuda11-archive/lib/libcudnn* /usr/local/cuda/lib64
sudo chmod a+r /usr/local/cuda/include/cudnn*.h /usr/local/cuda/lib64/libcudnn*

아래 명령이 입력 시 제대로 출력되면 성공적으로 cuDNN이 설치된 것입니다.

cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2

Python 3.10.12 설치

2023년 9월을 기준으로 Stable Diffusion 활용에 가장 적합한 Python 버전은 3.10.12입니다. 아래 명령어를 통해 설치해줍시다.

sudo apt install wget git python3 python3-venv

혹시 python main.py 같은 명령어를 python3.10 기준으로 사용하고 싶은 때, 아래와 같이 추가적인 설정을 해줍시다.

which python3
cd /usr/bin
ls | grep "python*"
sudo ln -s python3.10 python
ls | grep "python*"

하는 김에 pip 업데이트도 해줍시다.

sudo apt update
sudo apt install python3-pip

이미지 생성 툴 설치

Stable Diffusion web UI (Automatic1111)

가장 대표적인 이미지 생성 툴인 SD web UI입니다. 해외에서는 개발자의 이름을 따 A1111(발음은 어토메틱일레븐일레븐)이라고 많이 부릅니다.

설치는 아래와 같은 순서로 하시면 됩니다.

https://github.com/AUTOMATIC1111/stable-diffusion-webui.git
cd stable-diffusion-webui/
./webui.sh --xformers

로컬 환경에서는 xformers만 설치 후, 127.0.0.1:7860 으로 들어가는 것도 상관없지만, AWS EC2나 Azure를 사용할 때는 Public IP:[포트 번호] 로 접속하기 위해서, 그리고 여러 오류를 피하기 위해서 저는 아래와 같이 입력하여 들어갑니다.

./webui.sh --listen --share --port [port number] --enable-insecure-extension-access --no-gradio-queue --xformers --no-half-vae --api

args 중 중요한 것들을 대강 정리해보자면 아래와 같습니다.

  • listen: 127.0.0.1이 아닌 0.0.0.0으로 주소 지정.
  • share: gradio 주소를 생성. 다른 사람들도 해당 주소를 알면 마음대로 접속 가능하며, 매번 켤 때마다 바뀜.
  • port: 포트 번호 설정 (Public IP:[포트 번호] 로 접속)
  • enable-insecure-extension-access: 로컬 환경이 아닐 때도 extension을 설치하고 지울 수 있도록 허가해주는 설정.
  • xformers: xformers 활성화 (설치 안되어 있으면 자동 설치)
  • api: API 사용 가능 (Public IP:[포트 번호]/docs 로 접속)

DAAM extension 설치 시 오류 해결 (optional)

vi requirements_versions.txt

이후 마지막에 아래 두 줄을 추가합니다.

fonts
font-roboto

ComfyUI

ComfyUI는 SDXL의 출시와 비슷한 시기에 맞춰 등장한 노드 형식의 UI입니다. SD web UI보다 빠른 이미지 생성 속도를 자랑하며, API 역시 지원합니다.

설치는 아래와 같은 순서로 하시면 됩니다. 겹치는 args는 A1111과 의미가 같습니다.

git clone https://github.com/comfyanonymous/ComfyUI.git
cd ComfyUI

# 가상환경이 설정 되어 있지 않을 시
pip install virtualenv
python3 -m virtualenv venv

# 가상환경 활성화
source venv/bin/activate

# 라이브러리 미설치시 설치
pip install -r requirements.txt

python main.py --listen --port [port number]

또한 아래와 같은 args도 추가 가능합니다. 아래 args는 하나만 선택 가능합니다. 함께 사용할 수 없습니다.

  • gpu-only: GPU만 사용
  • highvram: VRAM이 충분할 때
  • normalvram: 기본값 (default)
  • lowvram: VRAM 3GB 이하
  • novram: lowvram으로도 구동이 안될 때 활용
  • cpu: CPU만 사용 (매우 느림)

파인튜닝 툴 설치

kohya_ss

드림부스나 LoRA 파인튜닝에 사용되는 대표적인 UI인 kohya_ss입니다. 보통 A1111의 extension으로 사용할 수 있는 WD(=Waifu Diffusion) 1.4 tagger를 활용해 이미지와 매칭되는 프롬프트를 가진 텍스트 파일을 만든 후, kohya_ss으로 본격적인 파인튜닝을 합니다. auto-tagging에는 BLIP이 사용되기도 합니다.

설치와 실행은 아래와 같은 순서로 하시면 됩니다.

git clone --recursive https://github.com/bmaltais/kohya_ss.git
cd kohya_ss
virtualenv --python=/usr/bin/python3.10 venv
source venv/bin/activate
chmod +x ./setup.sh
sudo apt update -y && sudo apt-get install -y python3.10-tk
./setup.sh
./gui.sh --listen=0.0.0.0 --headless

맺음말
마침 이틀전은 Stable Diffusion이 나온지 딱 1년이 되는 날이었습니다. 1년만에, 과거에는 상상도 할 수 없던 일들을 많이 할 수 있게 되었는데, 앞으로는 이미지 생성 AI가 얼마나 발전하고, 어떻게 세상을 바꿀지 기대해봅시다.

profile
Content Creator and Researcher with AI technology

3개의 댓글

comment-user-thumbnail
2023년 11월 9일

정말 감사합니다.

답글 달기
comment-user-thumbnail
2023년 12월 7일

./webui.sh --listen --share --port [port number] --enable-insecure-extension-access --no-gradio-queue --xformers --no-half-vae --api

이영역에서
--- 중략

Cannot locate TCMalloc (improves CPU memory usage)

--- 중략
launch.py: error: argument --port: invalid int value: '[port'

에러가 발생하고 진행되지 않네요. 무엇이 잘못되었을까요? 동일한 조건 동일한 안내대로 했는데..

1개의 답글