콘텐츠로 이동

SDXL-Turbo(이미지 생성)

개요

Stable Diffusion XL Turbo(SDXL-Turbo)는 StabilityAI에서 제공하는 고속, 고품질의 텍스트-이미지 생성 모델입니다. 다른 여러 디퓨전 모델과 달리, SDXL-Turbo는 단일 추론 단계(single inference step)만으로 고품질 이미지를 생성할 수 있어 속도가 크게 향상되었습니다. 이 튜토리얼에서는 optimum-rbln을 사용하여 sdxl-turbo 모델을 컴파일하고 이미지를 생성하는 방법을 보여줍니다.

환경 설정 및 설치 확인

시작하기 전에 시스템 환경이 올바르게 구성되어 있고 필요한 패키지가 모두 설치되어 있는지 확인합니다. 필요한 항목은 다음과 같습니다:

Note

  • rebel-compiler를 사용하려면 RBLN 포털 계정이 필요합니다.
  • 위 명령은 Debian 계열 Linux(예: Ubuntu)에서 pip로 패키지를 설치하는 일반적인 절차를 전제로 합니다. OS나 환경이 다른 경우에는 설치 가이드에서 지원되는 설치 조합과 적용 가능한 명령을 확인할 수 있습니다.

RBLN Optimum 사용하기

모델 컴파일

먼저 optimum-rbln 라이브러리에서 제공하는 RBLNStableDiffusionXLPipeline 클래스를 사용하여 SDXL-Turbo 모델을 컴파일합니다. 모델을 컴파일하려면 export 인수를 True로 설정합니다. 이렇게 설정하면 파이프라인이 HuggingFace 허브에서 원본 모델을 다운로드한 다음, RBLN Compiler를 사용하여 컴파일합니다. torch_dtype=torch.float16을 전달하면 파이프라인을 반정밀도(half precision)로 컴파일합니다. dtype을 지정하지 않으면 파이프라인은 torch.float32로 동작합니다. 컴파일 후에는 save_pretrained() 메서드를 사용하여 모델 아티팩트(artifacts)를 디스크에 저장합니다. 이 과정은 컴파일된 모델을 포함하는 디렉터리(예: rbln-sdxl-turbo)를 생성합니다.

import torch
from optimum.rbln import RBLNStableDiffusionXLPipeline

model_id = "stabilityai/sdxl-turbo"
pipe = RBLNStableDiffusionXLPipeline.from_pretrained(
    model_id=model_id,
    torch_dtype=torch.float16,
    rbln_guidance_scale=0.0,
    export=True,
)

pipe.save_pretrained("rbln-sdxl-turbo")

컴파일된 모델 불러오기

이미지를 생성하려면, 먼저 이전 단계에서 저장한 컴파일된 모델을 불러옵니다. 이번에는 export 인수를 False로 설정하여 로컬 경로에서 사전 컴파일된 모델을 불러오도록 지정합니다. SDXL-Turbo는 Classifier-Free Guidance 없이 실행되도록 설계되었으므로, 컴파일 단계에서 rbln_guidance_scale=0.0으로 설정합니다. 추론 시 guidance_scale에도 같은 값을 사용해야 합니다.

1
2
3
4
5
6
from optimum.rbln import RBLNStableDiffusionXLPipeline

pipe = RBLNStableDiffusionXLPipeline.from_pretrained(
    model_id="rbln-sdxl-turbo",
    export=False,
)

이미지 생성

컴파일된 파이프라인을 불러온 뒤 프롬프트와 num_inference_steps 같은 표준 인수로 파이프라인을 호출합니다. guidance_scale은 컴파일 시 사용한 rbln_guidance_scale 값(이 예제에서는 0.0)으로 설정해야 합니다.

1
2
3
prompt = "A cinematic shot of a baby racoon wearing an intricate italian priest robe."
image = pipe(prompt, num_inference_steps=1, guidance_scale=0.0).images[0]
image.save("generated_image.png")

예시 출력:

참고