PM이 구름IDE로 AI와 그림 그린 썰 : 스테이블 디퓨전 웹UI 설치하기

구름에 입사하고 PM 업무에 익숙해질 무렵, 내게 GPU 컨테이너 서비스(베타) 리뉴얼 업무가 주어졌다. 고객 문의(CS)로 들어온 피드백과 문의를 살피고, 경쟁 서비스를 분석하고, 유저 시나리오를 작성하는 등 리뉴얼 계획을 차질 없이 수립해 나갔다. 그 과정에서 ‘스테이블 디퓨전(Stable Diffusion)’이란 오픈 소스를 알게 됐다.

처음 들은 건 아니었다. 별다른 관심을 두지 않았다랄까. 그때 PM의 직업병이 시나브로 재발했다. 조사하고 직접 써보는 병. 퇴근 후 잠까지 줄여가며 스테이블 디퓨전을 구름IDE에 직접 설치하고, 이렇게 저렇게 써보길 며칠째. 이왕 이렇게 된 김에 글로 남겨보기로 했다. 그럴싸한 제목도 지었다. ‘AI와 그림을 그린 썰’. 원대한 제목과 달리 작성한 글은 ‘구름IDE에 스테이블 디퓨전 웹UI 설치’ 정도의 내용이지만.

by John, Snow

💬 구름IDE란?
클라우드 기반 통합 개발 환경(IDE)입니다. 쉽게 말하면 우리가 문서를 작성하는 MS Word처럼 개발자가 코드를 작성할 때 사용하는 일종의 편집기입니다. 일종의 편집기에 컴파일러와 클라우드 호스팅 기능을 더한 개발 도구라 생각하면 쉽습니다.

GPU 컨테이너(베타)는 시간 제한이 있지만 누구나 무료로 엔비디아 테슬라 T4 GPU를 이용할 수 있는 서비스입니다. 베타가 붙은 건 정식 출시 전 오류를 점검하고 사용자에게 피드백을 받는 출시 단계이기 때문입니다. 따라서 이용할 때에는 아직 기능이 불안정하거나 동작에 문제가 있을 수 있음을 감안해야 합니다.


스테이블 디퓨전이 뭔가요?

스테이블 디퓨전은 영국 AI 스타트업 스테빌리티AI(Stablility AI)가 오픈소스로 내놓은, 텍스트를 이미지로 바꿔주는 생성형 AI입니다. 생성형 AI는 입력 데이터의 패턴과 구조를 학습한 다음 유사한 특징이 있는 새로운 데이터를 만들어내는 ‘인공지능’을 말합니다(출처 : 위키백과).

스테이블을 직역하면 ‘안정적인 확산’ 정도의 의미입니다. 그 의미처럼 오픈소스로 나온 스테이블 디퓨전은 소스 코드가 공개되어 있고 누구나 이용 가능합니다. 스테이블 디퓨전은 미드저니와 함께 대표적인 이미지 생성형 AI의 하나로 큰 관심을 받고 있죠.

여기서 다룰 것은 스테이블 디퓨전 중에서도 스테이블 디퓨전 웹UI(Stable Diffusion Web UI)입니다. 스테이블 디퓨전 웹UI는 터미널에서 사용 가능한 스테이블 디퓨전을 웹 서비스(GUI)로 만든 프로젝트입니다. 유료로 결제해야 쓸 수 있는 이미지 생성형 AI를 ‘설치’와 ‘인프라’라는 난관만 거치면 웹 서비스로 쉽게 쓸 수 있죠.

이걸로 무엇을 할 수 있죠?

스테이블 디퓨전은 그림을 직접 그리지 않고 텍스트로 묘사하면 AI가 그림을 그려줍니다. 몇 가지 예를 들어볼까요?

만화가 이현세(출처 : 연합뉴스)

고교 외인부대. 아마게돈, 까치라는 만화를 기억하나요? MZ 세대는 모르겠지만, 1970~80년 대 한국 만화계를 휩쓴 만화입니다. 이들 만화를 그린 이현세 작가는 최근 ‘이현세AI프로젝트’를 진행하고 있습니다. 생성형 AI가 이현세 만화 캐릭터 중 ‘까치’의 캐릭터를 학습해 웹툰풍의 캐릭터를 그리는 프로젝트죠. 다른 만화인 고교 외인부대는 이렇게 새로 그려져 현대판 ‘고교 외인부대’가 출간될 예정입니다. 생성형 AI로 작가는 죽더라도 그 작품은 영원한 생명을 얻게 될까요?

만화, 웹툰, 애니메이션 산업군에서 생성형 AI에 거는 기대는 남다릅니다. 한 장 한 장 그린 후 채색해야 하는 노동집약적 산업의 틀을 생성형 AI가 바꿀 수 있기 때문입니다.

goorm techblog의 썸네일 이미지는 (1장 빼고) 생성형 AI로 만들어졌다.

우리 일상에서도 생성형 AI의 쓰임은 많습니다. 파워포인트나 블로그 내 이미지 한 장 넣으려면 직접 그리거나 픽사베이(Pixabay) 같은 이미지, 그래픽 공유 서비스에서 이미지를 받아 써야 했습니다. 이제는 어떤 이미지가 필요한지 글로 써 이미지를 생성하고 이용하면 되죠.

구름 기술 블로그의 포스트 썸네일을 유심히 살펴봤나요? 이들 이미지 대부분은 생성형 AI로 만들었습니다. (1장만 빼고요.) 과거 같으면 디자이너에게 의뢰해 받아 썼을 블로그 썸네일 이미지를 텍스트로 그려 사용한 거죠. 

디자이너라면 생성형 AI를 영감을 얻는 도구로 써보세요. 표현하기 난감한 IT 키워드도, 생성형 AI에게 키워드를 주면 수천 장의 이미지를 만들어줍니다. 이들에서 영감을 얻어 작품을 완성하는 식으로 창작의 어려움을 조금이나마 해소할 수 있죠.

어떠셨나요? 스테이블 디퓨전이 무엇인지, 또 무엇을 할 수 있는지, 우리에게 어떤 의미가 있는지 알겠나요? 이제 본론으로 넘어가서 이러한 이미지 생성형 AI의 하나인 스테이블 디퓨전을 구름IDE에 설치하고 사용해볼 것입니다. 어떤 그림을 그려볼까요? 또 어디에 활용할 수 있을까요? 기대되지 않나요?


1. 구름IDE에 로그인부터 하겠습니다.

가장 먼저 구름IDE에 로그인해야 합니다. 아직 가입하지 않았다면 회원가입부터 할게요. 가입 방법을 모르겠다면 도움말을 참고해 진행하세요.

2. GPU 컨테이너를 생성해야 합니다만,

구름IDE에 로그인하셨다면 절반은 성공한 셈입니다. 시작이 절반… 아, 아닙니다. (거짓말은 않겠습니다.) 로그인에 성공했다면 GPU 컨테이너를 생성합니다.

❶ [새 컨테이너] 오른쪽에 있는 [NVIDIA Tesla T4]를 클릭합니다.
❷ 컨테이너 이름을 적습니다. 여기서는 StableDiffusion이라고 적었습니다. 이름에는 알파벳, 숫자, 하이픈(-), 언드스코어(_)를 제외한 다른 특수기호나 공백은 사용할 수 없습니다.
❸ 이름을 입력했다면 [생성하기] 버튼을 클릭합니다.
❹ 인고(?)의 시간이 지나면 GPU 컨테이너가 생성됩니다.
❺ [컨테이너 실행하기]를 눌러 컨테이너를 실행합니다.

구름IDE의 GPU 컨테이너(베타)의 스펙은 이렇습니다. 구글 코랩과 비교해도 큰 차이는 없죠. 참고로 코랩은 주피터 노트북 기반의 개발 환경으로 파이썬 학습이나 AI 연구를 지원하기 위한 서비스입니다. 최근 이용자 약관을 변경해 무료 사용자가 스테이블 디퓨전을 더 이상 이용할 수 없게 됐죠. 덕분에 구름IDE 이용자가 늘었다죠!

구름IDE GPU 컨테이너 beta구글 코랩(추정)
CPU낮음Xeon(R) CPU @ 2.2GHz
메모리10GB12GB
저장소40GB33GB
GPUNVIDIA TESLA T4NVIDIA Tesla K80, T4, P4, P100, V100, A100 중 하나
OS우분투 20.04 LTS리눅스
이용 시간주 최대 30시간(월요일 오전 10시 리셋)연속 이용 최대 12시간하루 12시간, 연속 90분
비고2023년 7월 이용약관이 변경되며 무료 사용자는 스테이블 디퓨전 이용 불가
GPU 컨테이너 스펙

3. 스테이블 디퓨전 웹UI, 설치해 볼까요?

이제부터 스테이블 디퓨전 웹UI를 설치해 보겠습니다. 고난(?)의 과정일 수도 있지만, 차근차근 따라하면 큰 어려움 없이 설치할 수 있을 겁니다.

3.1 구름 계정을 준비합시다.

스테이블 디퓨전에 사용할 계정부터 만들게요. Step by Step을 차근차근 따라하면 어렵지 않을 거예요.

❶ 셸(Shell)은 리눅스 명령어를 OS에 전달해 사용자가 원하는 작업을 수행하는 프로그램입니다. 이 셸은 ‘터미널’이라는 프로그램에서 이용할 수 있습니다.
❷ 텍스트로 명령어를 입력하면 결과를 출력하는 이러한 인터페이스를 ‘커맨드라인 인터페이스(CLI)’라고 부릅니다. 셸이 대표적인 CLI입니다. 여기에 명령어를 입력해 일을 시킨다고만 기억하세요.
❸ 먼저 root 계정의 비밀번호를 변경할 것입니다. 터미널에 passwd라고 입력하고 enter↵ 키를 누릅니다. 그러면 root 계정의 새 암호를 물어봅니다. 같은 암호를 두 번 입력해 비밀번호를 바꿉니다.

passwd

❹ 이번에는 adduser goorm 명령어를 입력합니다. ‘goorm’이란 이름의 사용자 계정을 추가하는 명령어입니다.

adduser goorm

❺ 이번에는 root 계정과는 다른 암호를 두 번 입력합니다(보안을 위해서요!). 암호 외에도 ‘이름’ 등의 정보를 묻는데 enter↵를 눌러 넘겨도 됩니다. 정보가 맞는지 물어보면 ‘y’를 입력하세요.

3.2 추가한 계정에 root 권한을 줄게요.

스테이블 디퓨전 설치에는 root 권한이 필요합니다. 새로 추가한 사용자 계정(goorm)에 root 권한을 줄 것입니다. 만약 vi 에디터에 익숙치 않다면 따라하기가 어려울 수 있는데요. 다음 스텝 바이 스텝을 차근차근 따라 하면 충분히 할 수 있을 것입니다. 여러분을 믿어요!

vi /etc/sudoers 명령어를 실행합니다. vi는 유닉스 OS에서 널리 쓰이던 문서 편집기입니다. 이 명령어는 vi 에디터로 /etc/ 디렉터리 안에 있는 sudoers 파일을 열라는 의미입니다.

vi /etc/sudoers

❷ 터미널 기반의 텍스트 에디터가 열립니다. 방향키로 커서를 옮겨 root ALL=(ALL:ALL) ALL 텍스트를 찾고 이 텍스트의 맨 끝에 커서를 옮깁니다. 다음 키보드에서 영문자 ‘a’ 키를 한 번 누릅니다.
❸ a 키를 누르면 에디터가 편집모드로 바뀝니다. enter↵를 눌러 줄바꿈을 하고 goorm ALL=(ALL:ALL) ALL을 타이핑(또는 복사 & 붙여넣기)합니다.

goorm ALL=(ALL:ALL) ALL

❹ 키보드에서 ESC 키를 눌러 편집모드를 종료합니다.
❺ 다음 키보드에서 : 키를 누룹니다.
❻ 그다음 wq!를 순서대로 타이핑하고 엔터를 누릅니다.
❼ 정리할게요. :wq!를 입력하면 변경한 내용이 강제(!)로 저장(w)되고 에디터가 종료(q)됩니다.

잘 따라하셨나요? 축하합니다. 
설치 과정에서 가장 큰 난관인 vi 에디터 이용이라는 어려움을 잘 이겨내셨습니다.

3.3 깃 리포지터리를 ‘클론(복제)’할게요!

다음으로는 스테이블 디퓨전 웹UI 깃 리포지터리를 구름IDE에 클론(복제)할 것입니다. 스테이블 디퓨전 웹UI가 저장된 온라인 저장소의 파일을 구름IDE에 복사한다고 생각해도 됩니다.

❶ 깃허브는 분산버전관리 도구 깃에 호스팅을 제공하는 웹 서비스입니다. 쉽게 말해 오픈소스 코드들이 깃허브에 저장되어 있다고 보면 됩니다. 다음 명령어를 실행합니다.

git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git

❷ 명령어를 실행하면 깃허브 리포지터리(스테이블 디퓨전 웹UI)가 구름IDE에 복제됩니다.
❸ 다음 chown -R goorm stable-diffusion-webui/ 명령어를 실행하세요. 복제된 stable-diffusion-webui 디렉터리의 소유자가 앞서 생성한 goorm 계정으로 변경됩니다.

chown -R goorm stable-diffusion-webui/

chmod -R 777 stable-diffusion-webui/ 명령어는 스테이블 디퓨전 웹UI 디렉터리 권한(읽기/쓰기 등)을 모두 허용으로 변경합니다.

chmod -R 777 stable-diffusion-webui/

3.4 파이썬 3.10이 필요해요.

스테이블 디퓨전 웹UI를 실행하려면 파이썬 3.10대 버전이 필요합니다. (참고로 최신 파이썬 버전은 3.12.0입니다.) 이는 파이토치(torch) 버전 때문인데, 최신 버전을 설치하면 실행되지 않으니 주의하세요.

su goorm 명령어를 실행합니다. su는 현재 계정을 로그아웃하지 않고 다른 계정으로 전환하는 명령어입니다. 즉, goorm 계정을 사용하겠다는 의미죠.

su goorm

sudo apt install software-properties-common 명령어를 실행합니다. software-properties-commonadd-apt-repository를 사용하는 데 필요한 패키지입니다. goorm 계정의 암호를 입력해 설치를 진행합니다.

sudo apt install software-properties-common

sudo add-apt-repository ppa:deadsnakes/ppa 명령어를 실행합니다. PPA(Personal Package Archive)는 개인이 업로드한 소스 코드를 다른 사람이 우분투 OS에서 실행할 수 있는 패키지 형태로 바꿔 제공하는 저장소입니다. 이 명령어는 PPA에서 제공하는 여러 패키지 중 deadsnakes/ppa를 추가합니다. 설치 전 계속 하려면 enter↵ 키를 누르라는 안내가 나옵니다. enter↵ 키를 누르세요.

sudo add-apt-repository ppa:deadsnakes/ppa

sudo apt install python3.10 명령어를 실행합니다. 앞서 추가한 저장소에 파이썬 3.10 버전을 내려받아 설치합니다.

sudo apt install python3.10

❺ 다음 명령어를 실행합니다. 구름IDE 우분투 OS는 파이썬 3.8과 함께 방금 설치한 파이썬 3.10이 있습니다. 두 버전 중 하나를 선택해 사용할 수 있는데, 다음 명령어가 바로 새로 설치한 파이썬 3.10을 그 선택지에 추가하는 명령어입니다.

sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.10 1

sudo update-alternatives --config python 명령어를 실행합니다. 선택지의 버전 중 사용할 파이썬 버전을 선택하는 명령어입니다.

sudo update-alternatives --config python

❼ 우리는 Python 3.10을 써야 하기 때문에 ‘1’을 입력합니다.
sudo apt install python3.10-venv 명령어를 실행합니다. 파이썬 가상 환경을 구축하는 데 필요한 python3.10-venv 패키지가 설치됩니다.

sudo apt install python3.10-venv

3.5 몇 가지 라이브러리를 추가할게요.

sudo apt-get install libgl1을 입력합니다. Vendor neutral GL dispatch library 라이브러리(GPU 관련)를 설치하는 명령어입니다.

sudo apt-get install libgl1

sudo apt install libgoogle-perftools4 libtcmalloc-minimal4 명령어를 실행합니다. 이 명령어는 구글에서 만든 메모리 할당 라이브러리인 TCMalloc를 설치합니다. 이 라이브러리는 메모리 사용 효율을 높여줍니다. 설치하지 않아도 스테이블 디퓨전을 이용하는 데 문제는 없지만, 안 하면 스테이블 디퓨전을 실행할 때마다 “Cannot locate TCMalloc (improves CPU memory usage)”라는 에러가 눈에 거슬릴거예요.

sudo apt install libgoogle-perftools4 libtcmalloc-minimal4

4. 고생했어요. 이제, 실행해 볼게요.

이제 파이썬 가상 공간을 만들고 스테이블 디퓨전 웹UI를 실행해 볼 것입니다. 먼저 터로 cd 명령어를 써서 stable-diffusion-webui 디렉터리로 이동합니다. (다음 명령어를 실행하세요.)

cd stable-diffusion-webui

사용자 환경 변수 값을 적용하는 export 명령어를 쓸 것입니다. 스테이블 티퓨전 웹UI 디렉터리 안의 webui-user.sh 파일의 내용을 수정합니다. vi 에디터는 앞서 써봤으니 이번에는 쉽게 할 수 있겠죠?

❶ vi 에디터로 webui-user.sh 스크립트 파일을 엽니다.

vi webui-user.sh

❷ 터미널 기반의 텍스트 에디터가 열리면, 방향키로 커서를 옮겨 문서의 맨 끝으로 이동합니다. a 키를 눌러 편집 모드로 바뀝니다. 
❸ enter↵를 눌러 줄바꿈을 하고 다음 텍스트를 붙여넣습니다.

export COMMANDLINE_ARGS="--medvram --share --lowram --port 80 --always-batch-cond-uncond --xformers-flash-attention"

❹ 키보드에서 ESC 키를 눌러 편집모드를 종료합니다. 다음 키보드에서 : 키를 누르고 wq!를 타이핑하고 엔터를 누릅니다.
❺ 그러면 변경 내역이 저장되고 에디터가 종료됩니다.

스테이블 디퓨전 웹UI를 실행할 때마다 변경할 수 있는 옵션입니다. webui-user.sh 스크립트 파일에 그 옵션을 저장해두면 매번 실행할 때마다 명령어를 칠 필요가 없습니다. 더 상세한 옵션 정보는 이 문서를 참고하세요.

자, 끝이 보입니다.
다음으로는 파이썬 가상 환경을 만듭니다.

python -m venv venv

고생하셨습니다. 다음 명령어로 스테이블 디퓨전 웹UI를 실행해 볼까요?

bash webui.sh -f

❶ GPU 컨테이너를 생성할 때만큼의 인고의 시간을 기다려야 합니다. 그러면 터미널 창에 다음과 같은 공개 URL 주소가 나타납니다.

running on public URL : https://c0#########.gradio.live

running on public URL을 클릭합니다.
❸ 풀다운 메뉴 중에서 [링크 열기]는 누릅니다. 웹 브라우저에서 새 탭이 열리고 잠시 뒤 스테이블 디퓨전 웹UI 사이트가 열릴 것입니다.

💬 ERROR: Cannot activate python venv, aborting… 에러가 나요!
이 에러를 만난다면 다음 명령어로 venv 환경을 지워주세요.
rm -rf venv

다음 명령어들로 파이썬 가상 환경을 새로 만듭니다.
python -m venv venv

스테이블 디퓨전 웹UI를 다시 실행해 보세요.
bash webui.sh -f
💬 메모리가 부족해요!
스테이블 디퓨전 웹UI를 닫고 다시 시작하려 하거나, 에러가 나서 종료된 경우 메모리 부족으로 재실행이 안 될 수 있습니다. 이 때는 스테이블 디퓨전 웹UI 프로세스를 종료해 메모리 용량을 확보해야 합니다.

구름IDE 상단 메뉴에서 [컨테이너] → [프로세스 목록]를 클릭합니다. 여러 프로세스 중 /workspace/StableDiffusion/stable-diffusion-webui/venv/lib…를 선택한 후 [강제 종료] 버튼을 클릭합니다.

5. 어떻게 쓰냐고요?
기본적으로 알아야 할 것만 빠르게 알려드릴게요.

스테이블 디퓨전 웹UI는 누구나 쉽게 생성형 AI를 사용할 수 있도록 UI 인터페이스를 제공합니다. 대표적인 이미지 생성 AI인 미드저니에 못지 않은 기능을 제공하죠. 먼저 스테이블 디퓨전 웹UI의 기본적인 UI 인터페이스를 살펴봅시다.

❶ 스테이블 디퓨전 웹UI의 주요 인터페이스를 빠르게 살펴보겠습니다.
❷ 이미지 생성에 사용할 ‘모델’을 선택할 수 있는 영역입니다. 원하는 모델을 추가해 사용할 수 있습니다. 참고로 모델은 일종의 ‘알고리즘’이라고 할 수 있습니다. 모델에 따라 결과물이 달라지죠.
❸ 프롬프트 입력 영역입니다. 프롬프트는 누군가의 특정 작업 수행을 돕는 메시지를 말합니다. 생성형 AI에게 “이런 그림을 그려달라”고 적는 곳입니다.
❹ 네거티브 프롬프트 입력 영역입니다. 네거티브 프롬프트는 프롬프트와 정반대의 의미를 지니고 있습니다. 이미지에 들어가지 않았으면 하는 것을 적습니다.
❺ [Generate]를 누르면 AI가 이미지를 생성합니다.
❻ 아무런 프롬프트를 입력하지 않아도 임의의 이미지가 만들어집니다?! 이미지는 이 영역에서 확인할 수 있습니다.
❼ Sampleing steps은 AI가 그림을 몇 번 수행할지를 의미합니다. 숫자가 클수록 그림이 정교해지지만 오래 걸립니다.
❽ Batch size는 AI가 한번의 이미지 생성 요청에 몇 개의 그림을 그리게 할지를 말합니다. 최대 8개 그림을 그리게 할 수 있습니다.
❾ CFG Scale은 AI가 프롬프트 설명에 얼마나 충실하게 따를지를 의미하는 용어입니다. 보통 디폴트 값(7)을 사용합니다.

6. 구름 캐릭터를 함께 그려봐요!

기본적인 사용법도 익혔으니, 이제 써볼까요? 무엇을 그리고 싶은가요? 전 구름 캐릭터를 그려볼게요.그려볼 이미지는 팔과 손, 눈이 있는 구름 캐릭터입니다. 만화 스타일로 그려볼 것입니다. 프롬프트에 다음을 넣습니다.

Cloud Character, ultra high res, best quality, masterpiece, cute, game, icon, Digital Painting, artstation

끝으로, 여러 그림 중 하나를 선택하기 위해 AI가 8장의 그림을 그리도록 Batch size는 8을 입력합니다. 자, [Generate] 버튼을 눌러볼까요?

어떤 그림이 그려졌나요? 기대하던 그림인가요? 혹시 괴상한 결과물에 실망하진 않았나요? 

생성된 이미지는 모델, 프롬프트 그리고 각종 옵션에 따라 스타일과 품질이 달라집니다. ‘프롬프트 엔지니어링’이란 말이 등장한 것도 이 때문이죠. 원하는 이미지를 생성하기 위해서는 비슷한 스타일의 그림을 그리는 모델을 찾고, 프롬프트와 옵션을 수정하며 시도하는 노력이 필요합니다.

기본기는 모두 알려드렸으니, 구름IDE와 스테이블 디퓨전 웹UI로 더 많은 이미지를 그려보세요. 어떤 그림이 그려졌나요? ☁️

💬 잠깐!
구름IDE의 GPU 컨테이너 서비스 베타는 더 많은 사람이 체험할 수 있도록 이용 시간에 제한이 있습니다. 현재 1주일에 12시간만 이용 가능하며, 이용 시간은 매주 월요일에 초기화됩니다. 그러므로 이용하지 않을 때는 컨테이너를 ‘꼭’ 정지시켜두어야 합니다.

구름IDE 대시보드에서 GPU 컨테이너 아래에 있는 [정지] 버튼을 누르면 컨테이너가 정지됩니다. 스테이블 디퓨전을 다시 사용하려면 [GPU 환경 구성하기]를 한 후 [실행]을 눌러 컨테이너를 실행하세요. 터미널에 다음 명령어를 각각 입력해 스테이블 디퓨전 웹UI를 다시 실행해야 합니다.

cd stable-diffusion-webui
bash webui.sh -f

Posted by
john.choi

IDE SQD에서 PM(Product Manager)을 맡고 있다.