빠르게 사용하기 위해 제작된 글 입니다! 제대로 된 설치나 실행코드가 아닐 수 있습니다!
일단 이것을 도전한다면 아나콘다나 미니콘다는 설치해주세요.
설치 안해도 되지만 관리하기가 편하기 때문에 설치하는 것이 좋습니다!
속도 테스트 영상 (제가 찍었습니다.)
SDXL Turbo란
2023년 11월 28일.. 바로 이 글을 쓰는 2일전에 나온 것이 SDXL Turbo입니다.. ㄷㄷ
원리나 자세한 것은 잘 모르지만 보통 Stable Diffusion으로 이미지를 만들 때 step 수를 늘려서 20~50 정도로 스텝을 반복하면서 이미지를 만듭니다. 그런데 SDXL Turbo는 이런 스텝 없이 한번의 스텝으로 이미지를 완성한다는 것이죠..
일반 Stable Diffusion은 이미지에 노이즈가 잔뜩 끼어있는데.. 이러지 않고 바로 완성된 이미지를 생성한다는 것.. 엄청난 기술..!
https://stability.ai/news/stability-ai-sdxl-turbo
아무튼 이런 SDXL Turbo를 직접 컴퓨터에서 돌려볼 수도 있도록 오픈소스로 풀렸기 때문에 바로 사용해봅시다!
기본적으로 모든 방법은 이 링크 아래에 있습니다.
https://huggingface.co/stabilityai/sdxl-turbo
1. 가상환경 만들기
일단 가상환경을 만들겠습니다.
Anaconda Prompt를 열어주고 아래 명령어를 입력해주세요!
conda create -n SDXLTurbo python=3.10 -y
이렇게 하면 자동으로 가상환경을 만들어지게 됩니다.
여기에서 제가 따로 테스트 했을 때 파이썬 3.10 버전에서도 됬기 때문에 3.10으로 했습니다.
그 후에 만들어진 가상환경을 활성화 시킵니다.
conda activate SDXLTurbo
이렇게 하면 가상환경이 활성화 되면서 커맨드 창의 왼쪽에 (base) 가 (SDXLTurbo)로 바뀌었을 겁니다!
2. 라이브러리 설치
이제 라이브러리를 설치해야합니다!
일단 GPU를 사용할 것이기 때문에 Pytorch를 설치하고 나머지는 제공되는 것을 설치할 것입니다.
https://pytorch.org/get-started/locally/
일단 여기에 가서 자신의 OS, 자신의 CUDA 버전에 맞춰 명령어를 만든 후에 이걸 입력해서 설치해줍시다!
저의 경우 아래 처럼 나왔기 때문에 아래 명령어로 설치했습니다. (설치할 때 kaggle 뭐라면서 빨간색 뜨는건.. 아마 무시해도 될겁니다..;;)
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121
설치가 완료 되었다면 2번째로 이미지 생성에 필요한 라이브러리를 설치해줘야 합니다! 설치 명령어는 허깅페이스에도 나와있습니다.
아래 명령어로 설치해주시면 됩니다.
pip install diffusers transformers accelerate --upgrade
설치가 되었다면 모든 준비는 끝났습니다!
3. 코드 입력 및 실행
여기에서 실행하는건 2가지 방법이 있습니다.
첫번째 방법은 커맨드 창에 python을 적고 엔터 눌른 후에 아래에 적힌 코드를 입력해서 실행하는 방법이 있지만 이건 제대로 확인하기도 어렵고 좀 별로인 방법이기 때문에 두번째 방법으로 하겠습니다.
두번째 방법은
일단 Visual Studio Code를 엽니다!
그 후 프로젝트 폴더를 생성한 후에 그 안에 main.py든 아무 파이썬 파일을 생성합니다.
그리고 main.py를 열고 그 아래
대충 이런 느낌의 하단 바가 있을겁니다. 여기에서 3.11.2 64-bit 쪽의 버튼을 클릭합니다. (버튼의 버전 등은 다를 수 있습니다.)
그러면 인터프리터 선택창이 나오는데 여기에서 아래와 비슷한 것을 찾아 선택합니다.
만약 없다면 오른쪽 상단의 새로고침이나 Visual Studio Code를 종료했다가 다시 열어보세요!
그 후에 아래 코드를 입력합니다. (아래 코드는 원본 코드에서 조금 변화 시켰습니다. 시간 측정 코드, 무한 입력 코드, 이미지 저장 코드 들을 추가했습니다.)
from diffusers import AutoPipelineForText2Image
from torchvision.transforms.functional import to_pil_image
from torchvision.transforms import ToTensor
import torch
import time
pipe = AutoPipelineForText2Image.from_pretrained("stabilityai/sdxl-turbo", torch_dtype=torch.float16, variant="fp16")
pipe.to("cuda")
while True: # 반복
prompt = input("prompt: ") # 프롬프트 입력
start_time = time.time() # 시간 측정 1
image = pipe(prompt=prompt, num_inference_steps=1, guidance_scale=0.0).images[0] # 이미지 제작
end_time = time.time() # 시간 측정 2
# 이미지 저장을 위해 PIL 이미지로 변환
tensor_image = ToTensor()(image)
image = to_pil_image(tensor_image)
print(f"제작된 시간: {round((end_time - start_time) * 1000, 2)}ms") # 측정된 시간 출력 밀리초로
image.save("image.jpg") # 이미지 저장
그 후에 Ctrl + Shift + ` 를 동시에 눌러서 새 터미널을 엽니다.
그리고 python main.py를 입력해서 실행합니다! main.py 말고 다른 이름으로 해주었다면 그 이름으로!
아무튼 그러면 실행이 되고 자동으로
C:\Users\<컴퓨터 이름>\.cache\huggingface\hub
위 경로 안에 필요한 SDXL Turbo 모델을 다운로드 하게 됩니다. 약 6.46GB입니다.
모든 것이 정상적으로 설치되었다면 아래 처럼 뜰 것입니다. (prompt: )
그 후에 원하는 프롬프트를 입력해서 이미지를 생성합니다. 이미지는 현재 프로젝트 파일의 image.jpg에 생성됩니다.
이미지는 한번 생성하고 또 생성하면 이미지가 변경됨으로 마음에 드는 사진이 있다면 만든 후에 백업해야 합니다!
나머지
이미지를 생성할 때 한번은 2~10초 정도 느리게 생성됩니다. 이건 아마 모델의 최초 로드 하고 연관이 있는 것 같습니다.
그 후에는 제 컴퓨터 기준으로 (RTX 3080TI) 약 0.2초 만에 생성이 됩니다.
암튼 잘 되네요! 다만 상업적이용이 아직은 불가하므로 주의해주세요!